【STM32学习】定时器寄存器配置、功能工作过程详解

这篇具有很好参考价值的文章主要介绍了【STM32学习】定时器寄存器配置、功能工作过程详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零、参考

STM32-定时器详解
STM32个人笔记-定时器

一、引言

本文针对STM32F103系列单片机的定时器进行介绍。
主要是其常用功能的工作流程、以及寄存器的对应配置。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

该图清晰的表明了各种定时器的参数与功能。其中,基础定时器基本上就只有最简单的计数到了然后触发中断的功能;通用和高级定时器,在其基础上还有PWM输出、捕获/比较、刹车、死区设置等功能。图片来源

二、功能以及寄存器说明

1、最基本的定时功能(时基单元)

1.1 框图

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器
stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器
stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

这是截取了参考手册中三种定时器的款图,对于下半部分该功能涉及不到。
对于定时器的始终来源CK_INT,大家可以根据RCC时钟树,查看时钟源频率是多少。
从CK_INT到CK_PSC,三种类型的定时器基本都是一致的;从CK_PSC到最后的中断触发,不同的是高级定时器还有一个重复数据定时器。也就是说高级定时器,并不是当计数器溢出之后就立即触发中断,其还会经过重复计数器的操作才会被触发。

影子寄存器:框图中带有阴影的寄存器,除了自己本体外,还有一个一模一样的影子寄存器。我们可以将本体理解为用来当作缓冲的,影子才是真正起作用的。为什么这样设计呢?比如,当定时器正在运行当中,此时ARR=36,CNT计数到32,就在这时,我们修改ARR为30,如果没有影子,那么CNT此时来说已经溢出了,会直接触发中断,但是很明显,由于我们的修改,怕破坏了当前定时器输出的周期,如果是PWM输出的话,在要求及其严格的场景下,可能会产生某些误差。所以增加了影子寄存器,当我们修改重要寄存器的时候会先放到本体寄存器,然后当当前周期结束时,才会由UEV事件触发,将本体中的设置放到影子中起作用。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

从图中可以看出,当新值写入时,是先写入到本体,并未起作用。当当前运行周期结束后,才会将新值加载到影子中。

1.2 工作流程

对于基本和通用定时器:
PSC预分频器,根据设置的分频数,将CK_INT传递过来的时钟频率分频后,驱动CNT计数器计数。即计一个数的时间t是1/(TIMxCLK/(PSC+1))=(PSC+1)/TIMxCLK;那么将CNT中的数据计完,需要的时间为(ARR+1)*(PSC+1)/TIMxCLK。然后触发中断,ARR会将数据重新装到CNT中,然后执行中断服务函数。

例如,TIMXCLK=72MHz,PSC=7199,ARR=4999。则中断事件为t=(4999+1)*(7199+1)/ 72 * 1000000 = 0.5s,即500ms产生一次中断。注意时间与频率的关系。

而对于高级定时器:
当上述CNT计数溢出之后,并不是直接触发中断,而是触发重复计数器(RCR)计数,当RCR计数溢出之后,才会触发中断服务函数。

1.3 寄存器介绍

根据stm32固件库,我们可以看出,只需要对时基初始化结构体 TIM_TimeBaseInitTypeDef 结构体进行配置能,就能实现最基本的定时器功能。

先看该结构体中有哪些东西:

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

再看初始化函数:

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

不难发现,使用的寄存器有:CR1、PSC、ARR、CNT、RCR、EGR。
其中CNT寄存器,在框图中出现了。

1.3.1 CR1寄存器

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器
stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

位0:计数器使能,必须开启
位1:是否允许中断差触发UEV,进而更新影子寄存器
位2:设置哪些事件能触发中断
位4-位6:5:计数方式的设置
位7:是否使用ARR的影子寄存器

1.3.2 CNT、PSC、ARR寄存器

这三个没什么好说的,知道如何计算中断时间就行。PSC和ARR的范围为1-65535。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

1.3.3 EGR寄存器

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器
stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

对于高级和通用定时器,EGR寄存器还有很多其他功能,但是就对基本的使用来说,仅需设置这一位。

这一位什么意思呢?中断的产生都是硬件自动控制的(溢出等)。而这个是用来通过软件的方式触发中断或者事件更新的,进而将本体寄存器中的值放入到影子寄存器中。

例如,在固件库中,初始化的时候,这一位是设置为1的。即初始化的时候,立马触发一个中断,将该放的数据放到该放的位置。

1.3.4 RCR寄存器

该寄存器只有高级定时器才有。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

所以,当用高级定时器来实现定时功能的时候,该位应该设置为0,否则,定时事件会感觉很长。固件库配置默认为0。

关于其最后两句话,通过下图很好理解。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

1.3.5 DIER寄存器

在定时功能下,只需要设置最后一位。

stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器
stm32定时器寄存器,【STM32重学】,stm32,定时器,寄存器

在库函数中,TIM_ITConfig函数就是用来是遏制允许中断的。文章来源地址https://www.toymoban.com/news/detail-606359.html

到了这里,关于【STM32学习】定时器寄存器配置、功能工作过程详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 野火霸天虎 STM32F407 学习笔记_2 寄存器介绍

    虽然正式编程没有必要用寄存器编程,通常都是库函数或者 hal 库。但是还是有必要学一下原理的。 寄存器映射 芯片视图如下。 丝印:芯片上印的信息。型号,内核,生产批次等。 引脚:左上角是有小圆点的,从左上-左下-右下-右上逆时针看。或者如果没有小圆点,把丝印

    2024年02月06日
    浏览(51)
  • 嵌入式学习笔记——STM32的USART相关寄存器介绍及其配置

    上一篇中,对串口做了个概述,主要是介绍了串口通信的特征,异步串行全双工通信,然后就是结合串口的框图梳理了一下STM32中USART的配置流程以及发送接收数据的流程,本文将接着上篇的内容,对串口的寄存器做个介绍,然后实现一个简单的收发实验。 根据之前GPIO的经验

    2024年02月05日
    浏览(58)
  • stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(48)
  • 【STM32】STM32学习笔记-定时器定时中断 定时器外部时钟(14)

    1.1 TIM_InternalClockConfig 1.2 TIM_TimeBaseInit 1.3 TIM_TimeBaseInitTypeDef 1.4 TIM_ClearFlag 1.5 TIM_ITConfig 1.6 TIM_Cmd 1.7 中断服务函数 参考程序 1.8 TIM_ETRClockMode2Config timer.h timer.c main.c timer.h timer.c main.c 09-定时器定时中断.rar 10-定时器外部时钟.rar 参考: 【STM32】江科大STM32学习笔记汇总

    2024年02月03日
    浏览(56)
  • STM32之寄存器

    在学习STM32之前有必要了解一下ARM架构,以下相关ARM架构的知识来自百度百科​:​ ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的

    2024年02月22日
    浏览(50)
  • STM32萌新学习日志——用GPIO外设寄存器输出点亮LED对比库函数点亮LED——谈学习感悟

            本周学习STM32单片机,由于之前学过51单片机,为了便于切入,先学习了寄存器点亮LED灯的方法,整体思路与51单片机相似。在基本掌握后,尝试自己构建库函数雏形,过程比较困难,后面开始借鉴野火官方库函数。         这里其实建议大家在学会构建库函数后

    2024年03月17日
    浏览(95)
  • STM32寄存器点亮LED灯

     这个灯是 PB5引脚 看原理图可以看出 让GPIOB5输出低电平 就能点亮 那么我们得让 打开控制GPIOB5的时钟 让GPIOB5 输出模式 让GPIOB5低电平 时钟就相当于一个阀门开关,或者理解成水龙头,你打开了 才有水出来,也就是你打开才能工作。 看中文参考手册 系统架构 找到你的GPIO

    2024年02月07日
    浏览(54)
  • STM32 入门 —— 寄存器与 GPIO

    STM32 总线构图: 什么是寄存器 根据百度百科介绍,寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。简单来说,寄存器就是存放东西的东西,存放的东西是指令、数据或地址 存放数据的寄存器最容易理解,不同

    2024年02月04日
    浏览(51)
  • STM32学习--定时器中断

    目录  概述 一、STM32 通用定时器简介 1.1 STM32定时器定时原理  1.2 STM32 通用定时器相关寄存器简介 1.3 定时器功能描述 1.4计数器模式 二、定时器中断库函数 2.1 步骤总结 2.2 库函数讲解 总结:         这一章,我们将向大家介绍如何使用 STM32F1 系列 的通用定时器。 TIM

    2024年02月02日
    浏览(50)
  • 【STM32】定时器详细学习

    定时器介绍 HAL库外设模块设计方法 外设通用接口函数设计 定时/计数功能 时基单元 外部脉冲计数 定时器的核心就是一个计数器模块,可以进行加一或减一计数。每出现一个计数信号,计数器的值就自动加一或减一。当计数值从0递增到最大值或者从最大值递减到0时,定时器

    2024年02月05日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包