定时器中断_PWM输出_STM32第三课

2023-06-25,,

1、TIM2中断,需求:实现LED间隔0.5秒闪烁

1、使用CubeMX设置系统时钟、RCC、LED灯、时钟树等基础操作。

2、配置TIMER2,使能为全局变量,设置优先级。并生成代码。

3、代码编写

main.c中开启timer2中断

/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */

打开HAL_TIM_Base_Start_IT(&htim2);的实现代码,下图可以看到最终调用 HAL_TIM_PeriodElapsedCallback(htim);

继续查看HAL_TIM_PeriodElapsedCallback(htim)实现代码,发现是一个弱函数,需要用户实现。

那么在tim.c中重写HAL_TIM_PeriodElapsedCallback(htim),当发生回调函数时,翻转LED状态。

/* USER CODE BEGIN 1 */
//发生回调函数时,翻转LED
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if(htim==&htim2){
HAL_GPIO_TogglePin(REDLED_GPIO_Port, REDLED_Pin);
}
}
/* USER CODE END 1 */

2、PWM输出LED呼吸灯,需求:LED呼吸灯

PWM即脉冲宽度调制。当LED快速闪烁人眼无法识别时,亮度会介入最亮和熄灭之间。

比较值x=t/T,当x在(0,重装载值)之间线性增加或线性减少时,就会呈现亮度线性增加或减少。

查原理图可知,PB5需要设置为TIM3第二通道,在Tim3 GPIO settings 设置

main.c文件

/* USER CODE BEGIN PV */
uint16_t pwm_value = 0;
/* USER CODE END PV */ /* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
/* USER CODE END 2 */ void main(){
while (1) {
while (pwm_value < 500) {
pwm_value++;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwm_value); //修改比较值,修改占空比
HAL_Delay(1);
}
while (pwm_value) {
pwm_value--;
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, pwm_value); //修改比较值,修改占空比
HAL_Delay(1);
}
HAL_Delay(200);
}
}

定时器中断_PWM输出_STM32第三课的相关教程结束。

《定时器中断_PWM输出_STM32第三课.doc》

下载本文的Word格式文档,以方便收藏与打印。