参考文章:
我的文章
我的文章2
PWM输出(呼吸灯)
老是理不清定时器的自动重装载和PWM通道Pulse的关系
先说PSC和AutoReload的关系
PSC是预分频
ST32F103频率可以上到72M
举个例子:
72000000/72=1M
1/1M=1/1000000=0.000001秒
预分配会影响自动重装载的计数速度
比如上面计算的,他可以0.000001s计一个数
当计到AutoReload的值时,就会产生一个中断
/*中断回调函数*/
pwm的脉冲数Pulse:
在AutoReload的计数周期内,设置脉冲的多少。
比如说舵机 要20ms的周期,那么根据公式:
定时器时间=1/(时钟频率/预分频/计数周期)
20ms=1/(72000000/72/20000)
Pulse是在这个“时钟频率/预分频”速度里面计的数的脉冲速
在程序里面可以用这个程序修改它的脉冲数:
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 500);
比如说要
20ms里面500个脉冲(高低电平)
也就是每500时钟频率/预分频=50072M/72=500*0.000001=0.005s的高电平
定时器中断调用函数:
HAL_TIM_Base_Start_IT(&htim2);//中断使能
HAL_TIM_IRQHandler(&htim2);//之后进入定时器中断处理函数判断产生的是哪一类定时器中断(溢出中断/PWM中断.....) 和定时器通道
void HAL_TIM_PeriodElapsedCallback(&htim2); //进入相对应中断回调函数 在中断回调函数中添加用户代码
PWM函数:
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_1, 3200);