欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STM32开发,HAL函数实现按键中断/定时器/PWM功能

程序员文章站 2022-03-13 17:19:05
...

1 概述

1.1 资源概述

开发板:正点原子STM32F103 Nano开发板
CUBEMX版本:1.3.0
MDK版本:5.23
主控芯片型号:STM32F103RBT6
STM32开发,HAL函数实现按键中断/定时器/PWM功能

1.2 实现功能

1,LED0通过Button按键实现翻转,Button按键采用中断方式输入;
2,LED1采用定时器方式实现翻转,当计数达到时,状态进行翻转;
3,LED3采用while函数和Hal_delay函数实现,固定时长;
4,LED6采用PWM进行驱动,PWM设置一个固定的周期和占空比。

1.3 PWM边沿对齐和中心对齐

1.3.1 边沿对齐模式

下图为边沿对齐模式,其中ARR通过cubemx的counter period设置,决定PWM的周期,CCR通过pulse设置,决定占空比。PWM模式1和PWM模式2,为互补的波形,PWM模式1+极性低等效于PWM模式2+极性高。
PWM模式1- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。
PWM模式2- 在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平;在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
STM32开发,HAL函数实现按键中断/定时器/PWM功能

1.3.2 *对齐模式

*对齐模式如下图,对于高级定时器产生互补带死区的双路输出时非常有用,很方便设置死区时间。
STM32开发,HAL函数实现按键中断/定时器/PWM功能

2 软件开发

2.1 CUBEMX配置

1,中断分组设置,抢占优先级设为0,子优先级设为1,2,3。
STM32开发,HAL函数实现按键中断/定时器/PWM功能
2,TIM2设置,设置为向上计数,一个计数的时间为
1/72000000*(35999+1)*(999+1)=0.5S
STM32开发,HAL函数实现按键中断/定时器/PWM功能
定时器2对应的时序图如下
STM32开发,HAL函数实现按键中断/定时器/PWM功能
3,TIM3设置,采用内部时钟,PWM模式1,CH极性为1。这里频率为
72000000/(35999+1)/(3999+1)=0.5Hz,占空比为(249+1)/(3999+1)=6.25%
STM32开发,HAL函数实现按键中断/定时器/PWM功能
4,GPIO设置,其中Button设置为中断模式。
STM32开发,HAL函数实现按键中断/定时器/PWM功能

2.2 软件代码

使用CUBEMX生成代码后,会自动对GPIO口以及定时器等进行初始化
我们需要在Main函数中开始定时器和PWM

 HAL_TIM_Base_Start_IT(&htim2);//timer2 on 开启定时器2
 
 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);// timer3 on  PWM ON开始PWM

在While(1)增加LED3灯的操作

  HAL_Delay(4000);
  HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);//使用HAL函数进行LED灯的等时间亮灭

在main函数外边设置按键中断回调函数

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//按键中断,当检测到按键被按下时,翻转LED0的状态
{
if(GPIO_Pin==Button_Pin)//检测按键
	HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
}

增加计数器回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)//Timer2的定时器中断,当计时结束后翻转灯LED1的状态
{
if(htim->Instance==htim2.Instance)//检测定时器2
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);	
	}
}

程序编写结束

3,实验结果

3.1 仿真结果

LED1(采用定时器)和LED6(采用PWM)的仿真波形如下,时间不太对,但是没关系,不深究,硬件实现的时间是对的。
STM32开发,HAL函数实现按键中断/定时器/PWM功能

3.2 实物运行结果

实验结果与预期相符
STM32开发,HAL函数实现按键中断/定时器/PWM功能