|
STM32统计频率有许多种方式,有使用外部中断+定时器的方法,但是还有一种更加准确,可以计算占空比的方法。 即使用输入捕获来统计。 输入捕获的基本原理是通过检测TIMx_CHx上的边沿信号(如上升沿或下降沿),在边沿信号发生跳变时,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)中,从而完成一次捕获。此外,还可以配置捕获时是否触发中断或DMA等。 我们可以配置一个外部中断的中断回调函数,在中断回调函数中,我们可以计算两个脉冲的时间差来准确的计算脉冲的周期(频率)
这里我使用蓝桥杯的竞赛平台,STM32G431原理图中有两个NE555产生方波连接至PA15和PB4。
这里的PB4和PA15分别对应了TIM16的CHANNLE1和TIM8的CHANNLE1。
触发方式选择上升沿触发,这边定时器分频系数选择150-1,1us计数一次,最高计数65535即计数时间65.53ms,对应的最低频率为15HZ。 最高计数频率为1us即100KHZ,滤波系数选择0(因为不是按键没有杂波)
开启定时器中断。 这里的中断触发有两种可能:第一是计数器溢出导致的中断触发,第二种是检测到上升下降沿导致的中断触发。 由于我们的测量频率在我们的计数频率之内,所以我们不考虑计数溢出导致的中断触发。 这里分频系数也不能太高,我就干脆不分频了。 因为等会我们会清除计数器
我们定义一个结构体存放计数值和频率值,之后写一个函数来计算频率值。 主要统计两个上升沿之间的时间。
开启定时器计数以及使能中断。
输入捕获到频率检测。
如果检测结束则打印频率值。
我们可以看到理论最低频率为716.41HZ
可以看到测量最低频率为713.17HZ和理论值的差距非常的小。 转载自:电路小白 如有侵权请联系删除 |
【STM32U3评测】使用INS5699 RTC模组
【 逢7发帖赢大礼】1、利用CubeMX生成正点原子H7R7开发板的STM32CubeIDE工程
CubeMX生成CubeIDE工程代码乱码
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
【STM32U3评测】低功耗模式功耗测量
【STM32N6570-DK评测】3.CubeMX关于DCMIPP和CSI的BUG整理及摄像头使用
【STM32U3评测】并不优雅的点亮WS2812
微信公众号
手机版