STM32CubeMX系列 | 定时器中断

发布者:学海飘香最新更新时间:2023-03-21 来源: elecfans关键字:STM32CubeMX系列  定时器中断  预分频器 手机看文章 扫描二维码
随时随地手机看文章

1. 定时器中断简介

STM32的定时器功能十分强大,有高级定时器(TIM1和TIM8)、通用定时器(TIM2~TIM5)和基本定时器(TIM6和TIM7);本实验主要介绍难度适中的通用定时器,通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。 使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。 每个定时器都是完全独立的,没有互相共享任何资源。


通用TIMx (TIM2、TIM3、TIM4和TIM5)定时器功能包括:

  • 16位向上、向下、向上/向下自动装载计数器

  • 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65536之间的任意数值

  • 4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出

  • 使用外部信号控制定时器和定时器互连的同步电路

  • 如下事件发生时产生中断/DMA:

-- 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
-- 触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
-- 输入捕获
-- 输出比较
  • 支持针对定位的增量(正交)编码器和霍尔传感器电路

  • 触发输入作为外部时钟或者按周期的电流管理

通用定时器框图

定时器时基部分

2. 硬件设计

本实验通过TIM3的中断来控制D1的亮灭,需要用到的硬件资源

  • D1和D2指示灯

  • 定时器TIM3

3. 软件设计

3.1 STM32CubeMX设置

  • RCC设置外接HSE,时钟设置为72MHz;TIM3的时钟挂载在APB1 Time Clocks上为72MHz

  • PC0/PC1设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平

  • 激活TIM3定时器,时钟源选择为内部时钟,PSC预分频设置为7200-1,向上计数,自动重装载值(ARR)设置为10000-1,在NVIC设置中激活TIM3定时器中断;根据公式可算出:计数器时钟CK_CNT = 72M/7200 = 10000Hz,计时器中断时间为 ARR/10000 = 1s

  • 输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码

3.2 MDK-ARM编程

    在tim.c文件中可以看到定时器的初始化函数

    void MX_TIM3_Init(void){

      TIM_ClockConfigTypeDef sClockSourceConfig = {0};

      TIM_MasterConfigTypeDef sMasterConfig = {0};


      htim3.Instance = TIM3;

      htim3.Init.Prescaler = 7200-1;

      htim3.Init.CounterMode = TIM_COUNTERMODE_UP;

      htim3.Init.Period = 10000-1;

      htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

      htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

      if (HAL_TIM_Base_Init(&htim3) != HAL_OK){

        Error_Handler();

      }

      sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

      if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK){

        Error_Handler();

      }

      sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

      sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

      if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK){

        Error_Handler();

      }

    }

    找到弱符号周期运行回调函数原型,并在tim.c中自定义该回调函数 __weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){

        if(htim == &htim3){

            HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);   //LED1状态每1s翻转一次

        }

    }

    在main函数中编写相关代码,在while中使LED2每500ms翻转一次

    int main(void){

      HAL_Init();

      SystemClock_Config();

      MX_GPIO_Init();

      MX_TIM3_Init();

      /* USER CODE BEGIN 2 */

      HAL_TIM_Base_Start_IT(&htim3);        //启动定时器中断模式计数

      /* USER CODE END 2 */

      while (1){

        HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);   //LED2状态每500ms翻转一次

        HAL_Delay(500);

      }

    }


    4. 下载验证

    编译无误后下载到开发板,可以看到LED1每1s状态翻转一次,LED2每500ms状态翻转一次

    关键字:STM32CubeMX系列  定时器中断  预分频器 引用地址:STM32CubeMX系列 | 定时器中断

    上一篇:STM32CubeMX系列 | 窗口看门狗
    下一篇:STM32CubeMX系列 | PWM输出

    推荐阅读最新更新时间:2024-11-09 15:01

    51单片机中断主要关于计时--定时--计算定时器初值--的简介
    看到的关于中断 计时器定时器的介绍,个人看明白了。 目录: 1、单片机中断简介 2、中断允许寄存器IE 3、中断优先级寄存器IP 4、定时器中断 TMOD:定时器/计数器的工作方式寄存器,确定工作方式和功能。 TCON:控制寄存器,控制T0,T1的启动和停止及设置溢出标志。 工作方式 5、如何计算定时器的初值 6、中断服务程序的写法 7、代码示例 单片机中断简介 52单片机一共有6个中断源,它们的符号,名称以及各产生的条件分别如下: INT0 - 外部中断0,由P3.2端口线引入,低电平或下降沿引起 INT1 - 外部中断1,由P3.3端口线引入,低电平或下降沿引起 T0 - 定时器/计数器0中断, 由
    [单片机]
    51单片机<font color='red'>中断</font>主要关于计时--定时--计算<font color='red'>定时器</font>初值--的简介
    STM32CubeMX系列 | 内部温度传感器
    1. 内部温度传感器简介 STM32F1有一个内部的温度传感器,可以用来测量CPU及周围的温度。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值,温度传感器模拟输入推荐采样时间是17.1us,内部温度传感器支持的温度范围为:-40~125℃,精度为±1.5℃左右 通过读取ADC通道16的值,通过如下计算公式即可算出当前温度: T = { ( V25 - Vsense ) / Avg_Slope } + 25 上式中: V25 = Vsense 在25℃时的数值(典型值为:1.43) Avg_Slope = 温度与 Vsense 曲线的平均斜率(典型值为:4.3 mV/℃) 以上典型值请
    [单片机]
    51单片机中断系统(中断系统原理,外部中断定时器中断,串口通信)
    自己整理的详细知识点,以后配置定时器中断,串口通信不用再东找西找了。直接一文全打尽!!!因为从Word直接复制过来图片上传不了,所以直接截图上传。
    [单片机]
    51单片机<font color='red'>中断</font>系统(<font color='red'>中断</font>系统原理,外部<font color='red'>中断</font>,<font color='red'>定时器</font><font color='red'>中断</font>,串口通信)
    ARM LPC2103定时器中断方式寄存器设置
    定时器查询方式定时器初始化: 1、设置定时器分频数,为(x+1)分频 2、匹配通道X中断并复位TxTC 3、比较值(1S定时值) 4、启动并复位TxTC 如: T1PR = 99; // 设置定时器0分频为100分频,得110592Hz T1MCR = 0x03; // 匹配通道0匹配中断并复位T0TC T1MR0 = 110592/2; // 比较值(1S定时值) T1TCR = 0x03; // 启动并复位T0TC T1TCR = 0x01; 研究了好长一段时间,LPC210X的定时器,查询方式定时很简单如上面,但中断方式要操作好多寄存器,太麻烦,一直是一头雾水。好不容易理出了思路,现将一段例程粘贴备忘。 #include
    [单片机]
    STM32定时器中断配置
    1.使能时钟 定时器时钟 2.配置定时器结构体、使能 3.开启定时器中断,配置中断结构体 配置例子 #include tim.h #include stm32f10x.h void tim_config(void) { TIM_TimeBaseInitTypeDef TIMinitStructure;//定时器结构体 NVIC_InitTypeDef NVICinitStructure;//内核中断结构体 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//中断优先组函数 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM
    [单片机]
    STM32<font color='red'>定时器</font><font color='red'>中断</font>配置
    小广播
    设计资源 培训 开发板 精华推荐

    最新单片机文章
    何立民专栏 单片机及嵌入式宝典

    北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

    换一换 更多 相关热搜器件
    随便看看

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved