1.PWM中断初始化函数
在上一节中,我们使用定时器实现了输出PWM信号,这一节将实现用定时器捕获输入信号的频率和占空比的功能。
初始化流程如下图所示:
定时器实现捕获输入信号/1-1.png)
对应的初始化代码及注释如下:
1 | void IC_Init(void) |
2.获得频率与占空比
我们用测周法测频率,测周法的计算过程如下:
定时器实现捕获输入信号/2-1.png)
由于我们在初始化过程中预分频PSC为72,将晶振频率72MHz72分频后,标准频率fc为1MHz。
CCR1中的值就是每两个上升沿(一个周期内)的计数次数,也就是公式中的N,注意:由于CCR从0开始计数,因此实际计数值要+1
得到频率代码如下:
1 | uint32_t IC_GetFreq() |
CCR2中的值是从计时开始到第一个下降沿的计数次数,CCR2/CCR1即为占空比。
同样的,由于CCR从0开始计数,因此实际计数值要+1。
需要注意,如果为了显示百分比,需要将结果乘以100,但不能放在后面乘,否则CCR2/CCR1得到的数小于1,在C语言中会自动向下取整为0,而0乘以100还是0,会出现结果错误。
得到占空比代码如下
1 | uint32_t IC_GetDuty() |