你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32开发,HAL函数实现按键中断/定时器/PWM功能

[复制链接]
STMCU小助手 发布时间:2022-5-5 17:47
1 概述
1.1 资源概述

开发板:正点原子STM32F103 Nano开发板
CUBEMX版本:1.3.0
MDK版本:5.23
主控芯片型号:STM32F103RBT6

2Y}%6@6@UTOKY9M4$DF6Y]U.png

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为有效电平,否则为无效电平。 (WPD]IYX%T4Q4V}BZ{_V3OM.png


1.3.2 中央对齐模式
中央对齐模式如下图,对于高级定时器产生互补带死区的双路输出时非常有用,很方便设置死区时间。

C@JK$C8BO{}REZAMT}7S$HI.png

2 软件开发
2.1 CUBEMX配置

1,中断分组设置,抢占优先级设为0,子优先级设为1,2,3。

20200411080943989.png

2,TIM2设置,设置为向上计数,一个计数的时间为
1/72000000*(35999+1)*(999+1)=0.5S

AD%R5Z)G$H]{%S05X)7J{EX.png

定时器2对应的时序图如下

BVNPQ6MSM4%(XDE4~75V6{I.png

3,TIM3设置,采用内部时钟,PWM模式1,CH极性为1。这里频率为
72000000/(35999+1)/(3999+1)=0.5Hz,占空比为(249+1)/(3999+1)=6.25%

1N}}2ECADX7`K{99NPY}]`8.png

4,GPIO设置,其中Button设置为中断模式。

20200411080702480.png

2.2 软件代码

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

  1. HAL_TIM_Base_Start_IT(&htim2);//timer2 on 开启定时器2

  2. HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);// timer3 on  PWM ON开始PWM
复制代码

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

  1.   HAL_Delay(4000);
  2.   HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);//使用HAL函数进行LED灯的等时间亮灭
复制代码

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

  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//按键中断,当检测到按键被按下时,翻转LED0的状态
  2. {
  3. if(GPIO_Pin==Button_Pin)//检测按键
  4.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
  5. }
复制代码

增加计数器回调函数

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

程序编写结束

3,实验结果
3.1 仿真结果

LED1(采用定时器)和LED6(采用PWM)的仿真波形如下,时间不太对,但是没关系,不深究,硬件实现的时间是对的。

6$GFE6}U((S7G7EN~QNHH60.png

3.2 实物运行结果
实验结果与预期相符

20200411085718598.gif


收藏 评论0 发布时间:2022-5-5 17:47

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版