1、引言
单片机:STM32F407ZGT6; 仿真器:ST Link V2; 开发环境:STM32CubeIDE 1.10.1; 功能说明:使用单片机定时器产生PWM实现呼吸灯效果。
前情提要: STM32Cube学习(1)——点灯&配置 STM32Cube学习(2)——定时器中断 STM32Cube学习(3)——ADC STM32Cube学习(4)——UART串口
参考资料: 【STM32】HAL库 STM32CubeMX教程七—PWM输出(呼吸灯) STM32F4数据手册
2、STM32CubeIDE配置
选择TIM14通道,使能Channel1为PWM(因为开发板LED管脚是这个)
在参数设置中,配置如下 Counter Settings计数器配置: Prescaler(分频器)——71 Counter Mode(计数器模式)——Up Counter Period(计数器周期)——499 auto-reload preload(自动重载初值)——使能 PWM Generation Channel 1: Pulse(初始脉冲)——0 Output compare preload(输出比较预加载)——使能 CH Polarity(通道极性)——Low 关于PWM频率的计算公式如下 式中: fpwm为pwm工作频率; clk为定时器频率72MHz arr为计数器值499 psc为预分配值71 计算可知,PWM频率为2000Hz
占空比通过修改CCR1得到,计算公式为arr/CCR1,如50%占空比,即arr=499;CCR1=250;
3、代码
以下代码参考“Z小旋”
int main(void)
{
uint16_t pwmVal=0;
uint8_t dir=1;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM14_Init();
HAL_TIM_PWM_Start(&htim14,TIM_CHANNEL_1);
while (1)
{
if(pwmVal< 500)
{
pwmVal++;
__HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmVal);
HAL_Delay(1);
}
if(pwmVal<=500)
{
pwmVal--;
__HAL_TIM_SetCompare(&htim14, TIM_CHANNEL_1, pwmVal);
HAL_Delay(1);
}
HAL_Delay(200);
}
}
|