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。 这个寄存器比较重要:
通过修改这个寄存器的值,就可以控制 PWM 的输出脉宽了 。输出原理如下图:将AAR和CCRx寄存器的值进行比较,输出高低电平。
一般是将ARR寄存器的值固定,修改CCRx寄存器的值就可以修改占空比了。
CubeMX配置
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参考手册