在STM32CubeMX系列(4)–定时器实现PWM控制LED的基础上,实现用DMA+PWM的方式实现普通LED灯的呼吸灯效果,只需要再开启一下DMA通道即可:
选择后,会自动开启中断:
在main.c中定义数组:
#define LEN 20
uint16_t pwm_buf[LEN] = {0};
在main函数中对上面的数组赋值
for(int i=0;i<LEN;i++)
{
pwm_buf[i]= 30*(i+1); /* 设置不同的占空比 */
}
在while中调用HAL库函数
HAL_Delay(200);
HAL_TIM_PWM_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t*)pwm_buf,LEN);
重写中断回调函数:
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
HAL_TIM_PWM_Stop_DMA(&htim1, TIM_CHANNEL_1);
}