【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)

这篇具有很好参考价值的文章主要介绍了【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 外部中断的程序设计

传统STM32外部中断的设计步骤:
 (1)将GPIO初始化为输入端口。
 (2)配置相关I/O引脚与中断线的映射关系。
 (3)设置该I/O引脚对印的中断触发条件。
 (4)配置NVIC,并使能中断。
 (5)编写中断服务函数。
基于STM32CubeMX的外部中断设计步骤
 (1)在STM32CubeMX中指定引脚,配置中断初始化参数。
 (2)重写该I/O引脚对应的中断回调函数。

二. 使用STM32CubeMX实现定时器中断

  打开STM32CubeMX,如何新建一个工程就不赘述了。
  设置高速外部时钟HSE,选择外部时钟源

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机
stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

  这里使用PB4引脚(我的开发板上LED灯接在PB4引脚),设置为推挽输出模式,默认输出高电平

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

  接下来配置定时器TIM2及其参数

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

  开启TIM2的全局中断

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

  接下来是一个重点,关于设置定时器的参数以及计算定时公式
这里暂时先将Prescaler设置为7199,Counter Period设置为9999
stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机
Counter Settings(计数器设置)
Prescaler(定时器分频系数):7199
Counter Mode(计数器模式):up(这里选择向上计数模式) down(向下计数模式)/ Certer Aligned mode(中央对齐模式)
Counter Period(自动重装载值):9999
Internal Clock Division(时钟分频因子):No Division(这里选择不分频) Division by 2(二分频)/ Division by 4(四分频)
auto-reload preload(自动重装载):使能
TRGO Parameters 定时器触发信号(TRGO)参数 这里暂时不需要用
Master/Slave Mode(主从模式):禁用
Trigger Event Selection(触发事件选择):复位

在这里我将Prescaler(psc)与Counter Period(arr)的分别设置为了7199和9999,Tclk为72Mhz。
根据STM32定时器时间计算公式:Tout = ((arr+1)(psc+1))/ Tclk;
将数值带入到公式中 Tout = ((9999+1)(7199+1))/ 72000000 = 1s;就可以算成这个是1s触发一次定时器中断;
公式的由来:

  1. 定时器的时钟频率是Tclk:当Prescaler为psc时,时钟频率被分频了psc+1;那么此时定时器的最终频率为Tclk/(psc+1);由此可知定时器计数值加1所需要的时间是(psc+1)/Tclk;
  2. 当装载值设置为arr时,定时器从0计数到arr时清零;
  3. 所以定时时间公式为:Tout = ((arr+1)(psc+1))/ Tclk;
    注意:若将72MHz换算代入公式的话,则计算出的结果单位就是s,反之,就是us。

配置好之后生成工程,打开工程后先全局编译。

三. STM32F103定时器中断有关HAL库函数

 开启定时器TIM中断

/**
  * @brief  在中断模式下启动TIM Base生成。
  * @param  htim TIM基本句柄
  * @retval HAL status
  */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim){
	/*
	...
	*/
}

 触发定时器中断的非阻塞中断回调函数。在定时器触发中断后,就会进入定时器中断,退出定时器中断后就会调用定时器中断回调函数

/**
  * @brief  在非阻塞模式下经过的周期回调
  * @param  htim TIM handle
  * @retval 空
  */
__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(htim);

  /*注意:这个函数不应该被修改,当需要回调时,
	HAL_TIM_PeriodElapsedCallback可以在用户文件中实现
  */
}

 关于定时器计数器参数配置在tim.c文件的MX_TIM2_Init()初始化函数下
stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

四. 实现STM32F103定时器中断

 在main.c文件中的main函数中开启定时器中断的初始化

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

 在main.c文件中的main函数中的USER CODE BEGIN PFP注释对中添加定时器中断回调函数。在之前设置的定时器计数器的参数设置中,将Prescaler设置为7199,Counter Period设置为9999,Tclk为72Mhz。根据公式计算得出定时时间为1s触发。也就是说,按以下代码的写法,定时器每一秒都会触发一次定时器中断,退出定时器中断后进入中断回调函数判断是否是定时器TIM2触发的中断,若是,则翻转PB4的电平状态,不是,则不做处理。

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

 HAL_TIM_PeriodElapsedCallback中断回调函数在stm32fxx_hal_tim.c文件中

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

 在stm32fxx_hal_tim.c中找到HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)回调函数

stm32 tim2,STM32_hal库  笔记,stm32,笔记,单片机

下载到板子上运行,会发现PB4引脚口所接的LED灯每隔一秒开关状态翻转。

若想要使得LED灯以每隔500ms开关状态翻转,则可以找到MX_TIM2_Init()初始化函数,将该函数中的htim2.Init.Period = 9999;数值设置为4999,此时Prescaler设置为7199,Counter Period设置为4999,Tclk为72Mhz。根据公式计算得出定时时间为0.5s触发。文章来源地址https://www.toymoban.com/news/detail-829785.html

到了这里,关于【STM32笔记】STM32的定时器开发基础(二)(基于STM32CubeMX实现定时器中断)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】学习笔记(TIM定时器)

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发

    2024年02月09日
    浏览(19)
  • STM32笔记----5、TIM定时器

    时基单元:由自动重装载寄存器、预分频器、计数器组成。 来自RCC的TIMxCLK:一般是系统的主频,72MHz。 预分频器(16位):对进来的频率进行分频,写0,不分频,输出72MHz。写1,2分频,输出36MHz。以此类推。 计数器(16位):对预分频器后的计数时钟进行计数。 自动重装载

    2024年01月22日
    浏览(23)
  • stm32——hal库学习笔记(定时器)

    使用纯软件(CPU死等)的方式实现定时(延时)功能 使用精准的时基,通过硬件的方式,实现定时功能 递增计数模式实例说明 中心对齐模式实例说明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中断使能寄存器(TIMx_DIER) TIM6 和TIM7 状态寄存器(TIMx_SR) TIM6 和TIM7 计数器(TIMx_CNT)

    2024年02月21日
    浏览(29)
  • stm32学习笔记-6TIM定时器

    注:笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库。 定时器是STM32中功能最强大、结构最复杂的一个外设。定时器将包括四部分8小节: 第一部分主要讲定时器基本定时的功能,也就是指定一个时间,让

    2024年02月15日
    浏览(21)
  • 基于STM32的定时器--定时中断(HAL库)

    本文旨在介绍如何使用STM32CubeMX配置+KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器是STM32微控制器中非常重要的功能模块之一,用于计时、生成精确的时间延迟、触发事件等。STM32微控制器通常具有多个定时器模块,包括通用定时

    2024年02月14日
    浏览(24)
  • FreeRTOS软件定时器 基于STM32

    文章目录 一·、软件定时器的基本概念 二、软件定时器应用场景 三、软件定时器的精度 四、软件定时器的运作机制 五、软件定时器函数接口讲解 1.软件定时器创建函数 xTimerCreate() 2.软件定时器启动函数 xTimerStart()  3.软件定时器停止函数  xTimerStop()  4.软件定时器任务 5.软件

    2024年02月11日
    浏览(24)
  • 【STM32】学习笔记(TIM定时器)-江科大

    定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发

    2024年02月10日
    浏览(25)
  • STM32笔记----6、TIM定时器其他功能

    CCR(Capture Compare Register):输出捕获寄存器 使用PWM波形,可以在数字系统等效输出模拟量。 上图输出比较通道(通用)相当于下图的红框那部分电路: 输出模式控制器见下表: 蓝色线:CNT值 黄色线:ARR值 红色线:CCR值 PWM频率等于计数器CNT更新频率 (1)开启外部时钟 (2

    2024年02月21日
    浏览(45)
  • 正点原子--STM32基本定时器学习笔记(1)

    目录 1. 定时器概述 1.1 软件定时原理 1.2 定时器定时原理 1.3 定时器分类 1.4 定时器特性表 1.5 基本、通用、高级定时器的功能整体区别 2. 基本定时器简介 3. 基本定时器框图 时钟树分析 这部分是笔者对基本定时器的理论知识进行学习与总结!主要记录学习过程中遇到的重难点

    2024年02月19日
    浏览(24)
  • 江科大stm32视频学习笔记——TIM定时中断&定时器外部时钟

    目录 一、TIM(Timer)定时器简介  1.1 定时器类型 摘要 1.1.1 基本定时器 1.1.2 通用定时器 1.1.3 高级定时器  1.2 定时中断基本结构 1.2.1 结构框图 1.2.2 时序图 二、定时器定时中断定时器外部时钟 2.1 内部时钟闹钟代码 2.1.1 Timer.c 2.1.2 Buzzer.c加入间隔发声函数 2.1.3 main.c 2.1.4 实验视频

    2024年01月23日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包