文章中若有错误,请在评论区留言,谢谢大家
STM32H7系列教程(4)脉冲宽度调制(PWM)
设置STM32cubeMX
STM32H750的定时器
CNT(计数器当前值)
ARR(自动重装载值)
PSC(设置预分频系数)
计算公式
Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
arr 是计数器值
psc 是预分频值
我的芯片频率设置为Tclk=480MHZ
自动装载值为ARR=999
设置预分频系数PSC=479
pwm频率=480000000/1000*480=1kHz
占空比设置成50%,将获得一个500Hz的频率
同理,将自动装载值ARR设置成499
pwm频率=480000000/500*480=2kHz
占空比设置成50%,将获得一个1kHz的频率
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim12,TIM_CHANNEL_1); //开启PWM对应的通道
/* USER CODE END 2 */
/* USER CODE BEGIN WHILE */
while (1)
{
__HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_1, 250); //修改占空比
/* USER CODE END WHILE */
}
点亮PWM呼吸灯
设置的目标频率:2kHz
Fpwm =Tclk / ((arr+1)*(psc+1))
480000000/500/480=2kHz
/* USER CODE BEGIN PV */
uint16_t pwmval=0; //PWM占空比
/* USER CODE END PV */
/* USER CODE BEGIN WHILE */
while (1)
{
for(pwmval=0;pwmval<=400;pwmval++)
{
__HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_1, pwmval); //修改占空比
HAL_Delay(5);
}
HAL_Delay(200);
for(pwmval=400;pwmval>0;pwmval--)
{
__HAL_TIM_SetCompare(&htim12, TIM_CHANNEL_1, pwmval); //修改占空比
HAL_Delay(5);
}
HAL_Delay(200);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
将代码烧录进开发板
可以看到呼吸灯刚开始占空比的频率逐渐增大