【话说定时器系列】之四:STM32定时器更新事件及案例分享

发布者:HarmoniousCharm最新更新时间:2023-09-02 来源: zhihu关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

我们知道,STM32定时器中的四个带影子特性的寄存器组,每组寄存器分别由 影子寄存器【即实际控制寄存器】和预装寄存器组成。其中,影子寄存器是真正起作用的控制寄存器,用户访问不到它。而预装寄存器是用户访问的为实际影子寄存器准备数据或指令的寄存器。它们分别是:


TIMx_PSC 分频寄存器 TIMx_ARR 自动重装载寄存器


TIMx_CCR 捕捉寄存器 TIMx_RCR 重复计数寄存器[高级定时器有】


其中,ARR、CCR寄存器带预装载使能控制位,即它们的预装功能可以软件开启或关闭。


TIMx_ARR 带预装载使能控制位 ARPE@TIMx_CR1


TIMx_CCR 带预装载使能控制位 OCxPE@TIMx_CCMR


当相应预装使能位置1时,即开启预装功能时,此时影子寄存器的数据更新必须且只能通过更新事件实现从预装寄存器到影子寄存器的数据拷贝。


当相应预装使能位置0时,即关闭预装功能时,用户修改预装寄存器的数据后会立即被拷贝进影子寄存器【实际寄存器】。也就是说,此时我们用户操作预装寄存器就相当于访问实际影子寄存器。


那另外的PSC、RCR寄存器是不带预装使能控制位的,也就是说,二者的影子寄存器的预装功能始终开启,所以对于PSC/RCR影子寄存器的数据更新就只能通过更新事件唯一途径实现从预装寄存器到影子寄存器的数据拷贝更新。







那么有哪些操作可以产生更新事件呢?或者有哪些更新事件源呢?

这里把更新操作跟更新事件区别开来,以便于概念上的理解。


更新操作是一种动作,是更新事件的源头,即事件源;


更新事件是基于更新操作所导致的后续影响或结果。


可能的更新操作【事件源】有3类:


1、核心计数器的溢出【上溢或下溢】

2、软件复位操作【对UG@TIMX_EGR置位】

3、工作在复位模式下的定时器收到触发信号【即复位触发信号】

【特别提醒,对于高级定时器必须发生RCR+1次溢出动作后才可以产生更新事件。对于通用或基本定时器,每溢出一次都可以产生更新事件。】


那么更新操作何时可以升级为更新事件呢?


这里涉及到一个控制寄存器的控制位,UDIS@TIMx_CR1.


当该控制位UDIS@TIMx_CR1为0时,更新操作升级为更新事件,更新事件会产生如下影响或效果:


1、实现从预装寄存器的数据到影子寄存器的内容拷贝,即完成影子寄存器的内容更新;

2、实现计数器【预分频计数器、核心计数器、重复计数器】的重新初始化;

3、置位状态寄存器的UIF@TIMx_SR,并可以触发定时器更新中断或触发DMA请求;

当该控制位UDIS@TIMx_CR1为1时,更新操作不能升级为更新事件,其相应的结果或影响:

仅限于计数器的重新初始化,不做影子寄存器的更新;

无更新标志的置位,不触发中断或DMA请求


那么发生更新操作时计数器的重新初始化具体是指什么呢?


1、分频计数器重装为0,然后重新开始计数;

2、重复计数器重装为RCR寄存器里的值,然后重新递减计数;

3、核心计数器的初始化由计数模式来定,如果是向上计数或中心对齐计数模式,CNT归0;如果是向下计数器模式,CNT重装为ARR,然后重新向下计数;


发生更新事件时,影子寄存器的更新与计数器的重装有先后顺序问题吗?


有!影子寄存器【ARR/CCR….】的更新操作在前,计数器的重装操作在后!

因为这样可以保障计数器的重装值使用更新过的数据。该个细节要特别注意!


最后,不妨做个基于更新事件的案例分享:


问题描述:TIMER初始化阶段,经常有人反馈,不管定时器周期的长短,只要一使能更新中断,就立即进中断服务程序?令人不解,往往给开发带来些困扰,原因可能是什么?如何解决?


我们知道,定时器应用的初始化时,往往需要对有关时基寄存器进行些基本的数据赋值。


比方对ARR/PSC/RCR这些寄存器赋予初始值。结合前面的介绍,这些寄存器都是些带预装功能的寄存器,我们用户操作的寄存器都是预装寄存器,还不是实际起作用的影子寄存器。对于ARR寄存器倒还好,因为芯片复位后默认状态下,ARR寄存器的预装功能时关闭的【CCR寄存器的预装载功能默认条件下也是关闭的】,那么我们用户给ARR赋值就相当于给其实际影子寄存器赋值了。


但PSC/RCR寄存器是不带预装控制位的,它们两个的影子寄存器的更新必须借助于更新事件。所以,在定时器的时基参数的初始代码里,为了让用户写进预转寄存器的数据生效,就用到了上面提到过的软件复位操作,即对UG@TIMx_EGR进行置位而产生更新事件,从而完成影子寄存器的数据更新。


在STM32标准库里的TIM_TimeBaseInit( )函数里都有这句代码:

TIMx->EGR = TIM_PSCReloadMode_Immediate;

在Cube库里的HAL_TIM_Base_Init( )函数里的 函数有这句代码:

TIMx->EGR = TIM_EGR_UG;


结合前面的介绍,这两行代码使用到了前面提到的软件更新操作,触发了更新事件,它不仅仅实现了影子寄存器的数据更新,同时呢,还置位了状态寄存器的更新中断标志位UIF@TIMx_SR。那么,如果在这之后,我们使能定时器更新中断的话,进入更新中断服务程序的话就再自然不过了。为了规避这个问题,我们在时基参数初始化完成之后、使能定时器更新中断之前,可以先做更新中断标志的清除操作。


基于这个案例,我们可以对定时器的预装特性以及不同影子寄存器的特性差异有进一步的了解。总的来讲,STM32定时器的寄存器预装载特性也是其一特色,定时器的更新事件也是非常重要的事件,更新事件本身及相关中断或DMA功能也是STM32开发应用中常用的工具,切实掌握这些将十分有助于STM32的产品开发。


关键字:STM32 引用地址:【话说定时器系列】之四:STM32定时器更新事件及案例分享

上一篇:【STM32学习笔记】SPI不够用? USART来帮忙
下一篇:【STM32安全技术导论之二】加解密技术

推荐阅读最新更新时间:2024-11-10 00:29

STM32的四种输入方式
STM32的四种输入方式 1、上拉输入(GPIO_Mode_IPU) 上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平; 2、下拉输入(GPIO_Mode_IPD) 下拉输入就是信号进入 芯片后加了一个下拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为低电平; 3、模拟输入(GPIO_Mode_AIN) 信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。比如传送给ADC模块,由ADC采集电压信号。所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。虽然我也知道这样表达不准确。 4、浮空输入(GPIO
[单片机]
STM32通用定时器TIM实现PWM波配置步骤
//1、开启定时器时钟和需要用到的IO口 void Clock_Init(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);//因为准备把PB5口作为输出端口,所以接下来AFIO使能,如果使用默认的PA7 输 //出则不用使能AFIO,但需要使能GPIOA } //2、IO口并重映射TIM3 void GPIO_Out_Init(void) { GPIO_InitTypeDef GPIO_Init
[单片机]
有关STM32外设配置的几个常见问题
在做STM32开发应用的过程中,常常会遇到这样那样的问题,其中相当部分问题是与各外设及相关GPIO的配置有关的。就这方面的问题,这里一起总结交流下。 目前的STM32芯片是基于ARM内核的可编程微处理器,我们可以简单地把内核以外的东西统称为外设,比方 TIMER、UART、SPI、USB、I2C、存储器等功能模块。以32F427芯片功能框图为例,那些红圈上的都是。 好,我们直接切入主题。围绕外设的配置,我们遇到的问题,大致可以分为两大类。 一、时钟问题,就这方面的问题又可以细分为几小点。 1.1 时钟没打开就使用。 这个不难理解,就是相关外设的时钟没有打开。比如UART5的时钟没有打开,SPI的时钟没打开
[单片机]
有关<font color='red'>STM32</font>外设配置的几个常见问题
学习STM32笔记3 GPIO设置
/******************************************************************************* 设置GPIO基本参数 *******************************************************************************/ void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 GPIO_InitStructure.GPIO_Pin = GPIO_P
[单片机]
STM32中用到的Cortex-M3寄存器说明
在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 1)、NVIC寄存器组 STM32的固件库中有如下定义: typedefstruct { vu32ISER ; u32RESERVED0 ; vu32ICER ; u32RSERVED1 ; vu32ISPR ; u32RESERVED2 ; vu32ICPR ; u32RESERVED3 ; vu32IABR ; u32RESERVED4 ; vu32IPR ; }NVIC_TypeDef; 它们对应ARM手册中的名称为 ISER=InterruptSet-EnableRegisters ICER=Interr
[单片机]
STM32串口多机通信
从设备采用漏极开路方式级联,从设备的串口TX必须配置为漏极开路,不能是推挽方式,如果配置成推挽方式,会导致灌电流过大,低电平低不下去问题 STM32 的UART数据寄存器是9位,数据传输先传低位(LSB) --实际应用发现9位数据大时候有丢包错包问题?? 利用USART可以进行多机处理器通信,其原理就是使从机处于静默模式,由主机在需要的时候发送指令唤醒从机,并传输数据。STM32静默模式特点:1、所有接收状态位都不会被设置;2、所有的接收中断都被禁止;3、USART_CR1寄存器中的RWU位被置1,RUW可以硬件自动控制或者在某些条件下由软件写。 连接方法很简单,主机的TX输出与从机的RX端口直接相连,从机TX端口要经过与
[单片机]
STM32之PVD电压检测
如果VDD或者VDDA电压高于或低于PVD设定阈值都产生中断,表现为每中断一次,LED1就亮变灭或者灭变亮。 /******************************************************************************** * @file PWR/PVD/main.c * @author MCD Application Team * @version V3.4.0 * @date 10/15/2010 * @brief Main program body. *********************************************
[单片机]

推荐帖子

Modbus转EtherCAT:优化半导体生产设备的网络架构
将Modbus转换为EtherCAT旨在提高实时性能(低延迟、高带宽)、简化网络架构(灵活拓扑、易于扩展)、增强系统集成性(无缝集成Modbus设备)、提升数据处理能力(复杂操作、增强诊断)及适应未来需求(技术进步、灵活性和可扩展性)。Modbus是什么?Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。目的是为了简化不同设备之间的数据交换。Modbus协议支持多种通信方式,包括串行通信和以太网通信,使其
Bliiot—Peter 工控电子
LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试
LOTO任意波形发生器SIG82模拟输出继电器吸合断开的信号波形用于算法调试继电器吸合的电流变化过程是如图这样的波形,0到2的时间大约为17毫秒,2到3的时间大约38毫秒。批量继电器产品吸合是否满足产品标准的时候,不能靠人操作和判断,效率太低了也容易出错。通常要设计软件自动用算法计算0和2之间的时间差。做电流波形采集和自动计算时间差算法不能每次都到现场调试工装和开机测试。如果有个可以调整的足够真实的信号来模拟继电器吸合和断开过程的波
LOTO2018 测试/测量
泰克的 CMD80 中文使用手册
由于工作需要希望那位大哥、大姐有泰克的CMD80中文使用手册的可不可以给我发来让我学习一下泰克的CMD80中文使用手册
guan123 测试/测量
想用MSP430,求助开发板,仿真器,仿真软件等信息
想用MSP430,求助开发板,仿真器,仿真软件等信息。大家用的都是神马的,哪里买的。有具体型号最好,我要最全功能的。想用MSP430,求助开发板,仿真器,仿真软件等信息淘宝上蛮多的,个人感觉LT-1B还不错啦,仿真器都大同小易,仿真软件IARforMSP430网上也很多。
seven561 微控制器 MCU
C6000DSP的堆(heap)和栈(stack)
stack-又称系统栈(systemstack),用于:保存函数调用后的返回地址;给局部变量分配存储空间;传递函数参数;保存临时结果;heap-编译器提供的运行时支持库的一些函数(如malloc/calloc/realloc),允许运行时为变量动态分配存储器。这些存储器就放置在.system段的全局池(globalpool)或堆(heap)中。这个动态存储池的大小仅仅受限与系统中实际的存储容量。这2个选项都可以在project-buildoptions的连接器
fish001 DSP 与 ARM 处理器
导热界面材料对降低接触热阻的影响分析
随着电子设备功率密度的增加,系统的热管理变得越来越重要。导热界面材料(TIMs)在降低接触热阻、提高热量传递效率方面发挥着关键作用。本文分析了导热界面材料的工作原理及其对接触热阻的影响,并通过实验数据验证了其有效性。一、引言在电子设备中,接触热阻(TCR)是影响散热性能的重要因素。接触热阻的存在会导致热量传递路径受阻,使得热量无法有效从发热元件传递到散热部件,进而造成局部过热和系统性能下降。为了改善这一现象,导热界面材料(TIMs)被广泛应用于电子设备中,以降低接触热阻,提高热量传
aoqi PCB设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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