如上图所示:
一个朋友A,他想产生一个波形,高电平:1-40us可调,低电平:1-40us可调。
他说,使用定时器中断的方式,总是无法产生1us的中断,使用nop来搭误差又很大。如果使用定时器,那如果奇数us的定时误差也很大,感到很疑惑,不知道怎么做。
我想熟悉STM32的小伙伴都知道该怎么做吧?这个其实很简单,直接使用定时器PWM就好。而产生PWM波形,最主要的三个参数就是
1>分频 为定时器提供基础时钟频率
2>计数值 可以通过计数值来决定周期
3>脉冲值 通过调整脉冲值来调整高低电平的时间分配
对于分频,提供了一个基础的时钟频率,这个频率决定了整个时间的分辨率,当然这个频率越高,导致的误差就会越大。因为这个频率是由锁相环提供,锁相环将HSE或者HSI倍频上去,频率被倍频的时候,误差也被倍频了。
我做实验所用到的外部晶体为24MHz,主频跑的72MHz,定时器1的APB总线时钟频率为72MHz,时钟的分频为0(不分频)。那此时我的时间分辨率为:13.89ns
通过串口接收到high level的数值和low level的数值,然后设置计数值和脉冲值。
计数值=(high level + low level)*72 , 例如 high level = 1us , low level = 2us,此时计数值=216
脉冲值=(计数值*high level)/(high level + low level),此时脉冲值为:72
根据这个参数设置定时器,产生的波形图如图:
这样就产生了~ 如果还有更好的方法,欢迎分享
|