STM32CubeMX——定时器配置

基于STM32CubeMX的定时器配置

  • 说明
  • 定时器简介
    • 基本定时器功能(TIM6、TIM7):
    • 通用定时器(TIM2~TIM5)的主要功能:
    • 高级定时器(TIM1,TIM8)的主要功能:
  • STM32CubeMX配置
    • 新建工程
    • 设置时钟源RCC
    • 设置时钟
    • 设置定时器
    • 项目文件设置
  • 代码部分
  • 引用

说明

本文将会以STM32F103C8T6为例配置定时器2定时5 ms

定时器简介

SMT32F1系列共有8个定时器:

基本定时器(TIM6、TIM7)
通用定时器(TIM2、TIM3、TIM4、TIM5)
高级定时器(TIM1、TIM8)

基本定时器功能(TIM6、TIM7):

  1. 16位向上、向下、向上/下自动装载计数器
  2. 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为 1~65535之间的任意数值
  3. 触发DAC的同步电路 注:此项是TIM6/7独有功能.
    位于APB1总线上

通用定时器(TIM2~TIM5)的主要功能:

  1. 16位向上、向下、向上/下自动装载计数器
  2. 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值
  3. 4 个独立通道(TIMx_CH1~4)可以用作:
  • 测量输入信号的脉冲长度( 输入捕获)
  • 输出比较
  • 单脉冲模式输出
  • PWM输出(边缘或中间对齐模式)
  1. 支持针对定位的增量(正交)编码器和霍尔传感器电路
  • 如下事件发生时产生中断/DMA:
    • 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    • 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
    • 输入捕获
    • 输出比较
  1. 位于总线APB1上

高级定时器(TIM1,TIM8)的主要功能:

  • 高级定时器具有基本,通用定时器的所有的功能,
    还具有控制交直流电动机所有的功能,
    输出6路互补带死区的信号,刹车功能等等
  • 位于APB2总线上
    需要具体了解请看原文,链接如下。
    原文链接:lihttps://blog.csdn.net/lcp0633/article/details/111145199nk

STM32CubeMX配置

新建工程

  • 搜索芯片型号(此处使用STM32F103C8T6)
  • 选择芯片
  • 开始工程
    STM32CubeMX——定时器配置_第1张图片

设置时钟源RCC

  • 选择高速时钟源为外部陶瓷晶体振荡器
  • 选择低速时钟源为外部陶瓷晶体振荡器
    STM32CubeMX——定时器配置_第2张图片

设置时钟

  • 选择时钟设置界面
  • 将HCLK配置到72MHz,系统自动配置各个时钟
  • 此时单片机时钟配置为72MHz,后面将采用该时钟频率配置定时器
    STM32CubeMX——定时器配置_第3张图片

设置定时器

STM32CubeMX——定时器配置_第4张图片

STM32CubeMX——定时器配置_第5张图片

  • 选择定时器(TIM2)
  • 选择定时器时钟来源(内部时钟)
    • Clock Source(时钟来源)
  • 定时器设置
    • Prtscaler (定时器预分频系数):72-1
    • Counter Mode(计数模式) : Up(向上计数模式)
    • Counter Period(自动重装载值) : 5000-1
    • CKD(时钟分频因子) : No Division 不分频 (可以选择二分频和四分频 )
    • auto-reload-preload(自动重装载) : Enable 使能
  • 计数器周期计算公式
    T = (psc+1)(arr+1)/Tclk
    • psc:定时器预分频系数
    • arr:自动重装载值
    • Tclk:系统时钟频率
  • 计算举例
    1/[72/(71+1)]*(4999+1)=5ms

项目文件设置

  • 设置项目名称
  • 选择所用IDE
    STM32CubeMX——定时器配置_第6张图片
  • 选择为每个功能生成一个.c和.h文件
  • 生成代码
    STM32CubeMX——定时器配置_第7张图片

代码部分

找到main函数,里面关于TIM2初始化的函数 MX_TIM2_Init(),进入初始化函数,查看源码STM32CubeMX——定时器配置_第8张图片
从上面代码可以看到,先定义了一个htim2的结构体
然后是对结构体的初始化,就是我们图形化的配置

再找到stm32f1xx_it.c文件
STM32CubeMX——定时器配置_第9张图片
上面的代码是如果TIM2中断,则调用 HAL_TIM_IRQHandler(&htim2);
进入HAL_TIM_IRQHandler(&htim2)函数,这里面的代码很长,就是不同的中断类型,进入不同的中断回调函数,这里找到 HAL_TIM_PeriodElapsedCallback(htim);
STM32CubeMX——定时器配置_第10张图片
进入这个回调函数,我们看到是个虚函数,需要我们重写,在这个函数里面,就是我们需要实现的功能,但在这之前,需要在main函数里使能中断 HAL_TIM_Base_Start_IT(&htim2)

所以使用的代码如下:
下面展示一些 内联代码片

// An highlighted block
HAL_TIM_Base_Start_IT(&htim2); //使用定时器的时候调用这个函数启动
HAL_TIM_Base_Stop_IT(&htim2);  //停止定时器的时候调用这个函数关闭
/* 定时器回调函数 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM2)
  {
    //编写回调逻辑,即定时器2定时5MS后的逻辑
  }
}

引用

最好,将本文所引用的链接放在这里,以供参考
STM32CubeMX——定时器之定时功能:https://blog.csdn.net/lcp0633/article/details/111145199
STM32 Cubemx 配置定时器定时1mS:
https://www.cnblogs.com/xingboy/p/9897500.html

你可能感兴趣的:(STM32CubeMX教程,stm32,单片机,嵌入式硬件)