编程思路:每次上升沿产生中断,获取CNT值,并清零CNT值,重新计时,CNT值就是一个PWM波的周期,通过周期可以获得其频率
例:第一次上升沿产生时计数值为50,清零并重新计数,经过下降沿后,第二个上升沿产生了,此时计数值为50,则周期为50us,频率 = 1/T,因为T的单位为s,所以f = (1/50)*1000000 = 200000hz
最好设置为1us走时一次
测量一路PWM频率
打开STM32CubeMX
将PA15设置为TIM2_CH1(定时器2通道1)
将定时器2的通道1设置为直接捕获模式
打开定时器2的NVIV中断
将分频系数配置成79,相当于频率 = 80Mhz / (79+1) = 1Mhz,周期 = 1/频率 = 1us相当于1us走时一次
1hz频率对应周期为1s
生成代码
将Cube生成的tim.c和.h文件拷贝到目标工程的bsp_tim.c和.h里并在main里声明.h文件与
TIM_Init()
使能TIM模块
在stm32g4xx_it.h中移植Cube里的TIM2的中断服务函数
开启TIM2_CH1的输入捕获中断
编写中断回调函数(需要背下来)
测量两路PWM频率
在CubeMX里打开PB4引脚的TIM3_CH1
设置通道1为直接捕获模式,预分频系数 = 79,ARR = 最大值(65535),并打开NVIC中断
将Cube生成的tim.c和.h文件拷贝到目标工程的bsp_tim.c和.h里并在main里声明.h文件与
TIM_Init()
按照TIM2_CH1的配置方法配置TIM3_CH1的各种初始化
打开定时器3中断输入捕获
编写定时器中断回调函数用于测量两路PWM波
将测得的两路PWM波打印在LCD屏幕上即完成