PWM信号输出
本PWM信号输出的原理是: 通过定时器TIM1产生PWM信号,然后通过GPIO输出. STM32F1xx的定时器本身支持PWM输出. 只要在 stm32cubemx 中配置好定时器,然后通过代码调用即可.
一.PWM信号的产生原理
- 定时器TIM1通过信号源产生定时信号.并开始计数.
- 当计数器的值等于比较寄存器的值时,输出电平翻转.
- 当计数器的值等于自动重装载寄存器的值时,计数器清零.
二.PWM信号输出原理图
三.使用STM32CUBEMX配置定时器TIM1


数据计算方法:
- 根据系统时钟计算分频值,假如系统时钟是 72MHz,要得到合适的方波频率,需要设置为分频后的时钟
- 分频后时钟 = 72MHz / (PSC+1)
- 如果分频后的时钟为 1Mhz的话,那么 Counter Settings => PSC(Perscaler)应该设置为 71
- 此时,TIM1会在每1us就会将计数增加1
- 1Mhz的周期是 1/110001000 = 1us ,
- 1khz的周期是 1/1000 = 1ms 所以需要999次才能产生1ms的值 . 也就是说每计数999次后,就会重新到0开始计数.
- 所以: Counter Period(AutoReload Register) 为 999
- 如果要生成50%的PWM信号的那就需要在 500时转换电平才行. 那么: Pulse 设置为 999 * 50% = 500 即可.
四.代码实现
通过STM32CUBEMX生成的代码已经完成了99%的工作了. 只需要在main函数中启用PWM即可.
c
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM1_Init();
// 启动PWM
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
while (1)
{
}
}此时在 PA8 上已经输出了50%的PWM信号.
