STM32 HAL库 CubeMX教程(三)PWM呼吸灯

STM32 HAL库 CubeMX教程(三)PWM呼吸灯

    • PWM简介
    • CubeMX配置
    • 占空比设置
    • 呼吸灯程序编写
    • 参考文献

STM32 HAL库 CubeMX系列教程 目录

本教程对应keil完整工程下载:
https://download.csdn.net/download/weixin_43116606/12139146

PWM简介

控制 PWM 的主要有三个寄存器分别是 :捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)

在TIMx_CCMRx寄存器中的OCxM位写入’110’(PWM模式1)或’111’(PWM模式2),能够独立地设置每个OCx输出通道产生一路PWM。 这两种 PWM 模式的区别就是输出电平的极性相反 。默认为PWM模式1,有效电平为高。

捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入输出通道的开关。
在这里插入图片描述
CC2E 位,该位是输入/捕获 2 输出使能位,要想PWM 从 IO 口输出,这个位必须设置为 1 。

捕获/比较寄存器(TIMx_CCR1~4),该寄存器总共有 4 个,对应 4 个通道 CH1~4。 这个寄存器比较重要:
STM32 HAL库 CubeMX教程(三)PWM呼吸灯_第1张图片
通过修改这个寄存器的值,就可以控制 PWM 的输出脉宽了 。输出原理如下图:将AAR和CCRx寄存器的值进行比较,输出高低电平。
STM32 HAL库 CubeMX教程(三)PWM呼吸灯_第2张图片
一般是将ARR寄存器的值固定,修改CCRx寄存器的值就可以修改占空比了。

CubeMX配置

STM32 HAL库 CubeMX教程(三)PWM呼吸灯_第3张图片
STM32 HAL库 CubeMX教程(三)PWM呼吸灯_第4张图片PA8引脚为定时器1通道1引脚,此时用作PWM输出,需要设置的主要有三个参数:
1.预分频寄存器PSC:决定时钟频率,定时器时钟频率为72M,分频后为为72M/(71+1)=1M
2.自动重装载寄存器ARR:也与定时器时钟频率有关,决定PWM输出周期,此处设置为999
3.脉冲宽度Pulse:用来设置占空比,初始化占空比=500 / 999约=50%

占空比设置

__HAL_TIM_SET_COMPARE(&htimx,TIM_CHANNEL_y, pulse);
或者
TIM1->CCR1=pulse;
占空比=pulse / ARR *100%

呼吸灯程序编写

首先需要使能PWM,函数原型:HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t Channel)

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

接下来在while()里面使占空比有0~100%再由100%-0缓慢变化,呈现呼吸灯的效果。

while (1)
  {
  if(pwm_dir==0){
   HAL_Delay(10);
   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1, pwm_pulse++);
   pwm_dir=(pwm_pulse>999)?1:0;
  }
  else if(pwm_dir==1){
   HAL_Delay(10);
   __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1, pwm_pulse--);
   pwm_dir=(pwm_pulse<1)?0:1;
  }

仅供参考,错误之处以及不足之处还望多多指教!

参考文献

[1]: ALIENTEK 精英 STM32F103 开发板教程
[2]: STM32F10xxx参考手册

你可能感兴趣的:(STM32)