stm32通过hal库使用定时器

文章目录

  • 实验目的
  • 实验材料
  • 硬件
  • 软件
  • 原理
  • 项目制作
  • CubeMX配置
  • 1、时钟配置
  • 2、配置GPIO
  • 3、配置定时器
  • 4、配置串口
  • 5、按图配置好路径,生成项目
  • 代码编写
  • 1、开启定时器
  • 2、编写中断函数
  • 实验现象
  • 总结
  • 参考资料
  • 实验目的

    设置定时器,每隔5秒向串口助手发送Hello World,每隔两秒闪烁LED灯。

    实验材料

    硬件

  • 面包板一块
  • CH340模块
  • STM32F103C8T6最小开发版
  • 杜邦线若干
  • LED灯一个
  • 软件

  • KEIL5
  • STM32CubeMX
  • 原理

    在STM32芯片中不同数量的定时器,分为系统定时器,高级定时器,通用定时器以及基本定时器。

    本实验使用到的是通用定时器。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可

    以定时,可以输出比较,可以输入捕捉。

    下面是野火的零基础玩转STM32中的资料,介绍了定时器的原理:

    项目制作

    CubeMX配置

    1、时钟配置

    点击SystemCore -> RCC,配置HSE。

    再点击Clock Configuration,按下图进行操作,将APB2频率配置为72MHz。

    2、配置GPIO

    根据实验要求,需要使用定时器控制LED灯,因此要使用一个GPIO口来控制LED灯。

    按下图进行配置即可,有什么不懂的可以看看这篇文章

    3、配置定时器

    C8T6板子里面有高级定时器TIM1以及通用定时器TIM2-4,这里使用基本定时器即可。

    因为既要控制LED,又要发数据,为了区分功能,我使用两个定时器来实现。

    点击Timers -> TIM2,将Clock Source设定为Internal Source。

    下面Prescaler设定为71,计数设置为2000,启动自动重载。

    分频系数那里虽然写的是71,但系统处理的时候会自动加上1,所以实际进行的是72分频。由于时钟我们一般会配置为72MHZ,所以72分频后得到1MHZ的时钟。1MHZ的时钟,记一次数是0.001ms,这里写成2000就是2ms触发一次中断。软件层面再通过代码,每触发1000次中断闪烁一次LED灯,也就是2s。

    记得点击NVIC Setting开启中断,以及点击SystemCore -> NVIC ->Code Generation生成优先级函数,这里忘了截图。

    再用同样的方法配置Tim3用于串口通信,因为频率是5s,所以计数要设置为5000,也是每触发1000次中断才发送数据。

    4、配置串口

    按图配置即可,有不懂的可以看看这里

    5、按图配置好路径,生成项目

    代码编写

    1、开启定时器

    HAL_TIM_Base_Start_IT(&htim2);
    HAL_TIM_Base_Start_IT(&htim3);
    

    2、编写中断函数

    无论是哪个定时器触发中断都会执行HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)函数,这个函数的参数表示是哪一个定时器触发了中断。

    写两个静态变量记录两个定时器触发中断的次数。前面已经说过,TIM2每2ms触发一次中断,因为LED闪烁时间间隔要求是2s;TIM3是5ms触发一次中断,因为发送数据的时间间隔是5s。每触发一次中断,根据定时器的不同来把不同的变量+1。

    当某个变量达到1000时,就执行对应的操作。

    实验现象

    烧录到单片机后,LED每2s闪烁一次,串口助手每5s收到数据:

    总结

    定时器在被启动后,会根据设置的计数个数开始计数,并且计数完毕后触发中断。用户可以在中断内编写想要执行的操作。

    最经典的定时器案例,其实应该是控制蜂鸣器播放音乐。笔者以前使用51单片机实现过,但是实现过程比较复杂,要考虑音调的频率,延音与抬手,以及bpm设置。因此在stm32还没有尝试过。日后笔者会尝试。

    参考资料

    《零基础玩转STM32F103指南者》

    http://www.mcublog.cn/stm32/2021_01/stm32cubemx-dingshiqi-led/

    物联沃分享整理
    物联沃-IOTWORD物联网 » stm32通过hal库使用定时器

    发表评论