HAL库教程11:定时器的缓冲功能与影子寄存器

2019-05-30来源: eefocus关键字:HAL库  定时器  缓冲功能  影子寄存器

  在STM32的定时器中,TIMx_PSC、 TIM_ARR两个寄存器加上捕捉比较模块中TIMX_CCR寄存器,它们都可以动态修改。不过他们的修改和生效可能不在同一个时刻,或者说,修改过后立即生效的话可能会带来潜在问题,这里便引入了预装寄存器及影子寄存器的概念。要记住一点,真正在TIMER模块中起作用的是影子寄存器。(中文手册P393)


  实际上,STM32定时器中,CNT与ARR或CCR的比较,都是比较是否相等,而不是大小!!比如此时CNT已经到了5,ARR 本来是9,现在突然变成4了,就没有相等了,CNT会数到最大值,2^32 或 2^16次方,再从零开始。

在这里插入图片描述

  默认情况下,影子寄存器用户没有办法直接读取或修改,用户只能操作预装寄存器。以ARR为例,用户需要操作ARR寄存器时,其实操作的都是ARR的预装载寄存器,然后由预装载寄存器把值更新给影子寄存器。


  更新的时机是可以操作的。默认情况下,当操作ARR的预装载寄存器时,立即把操作更新给影子寄存器。这种情况下,可以认为没有预装载寄存器没有缓冲功能。


  另一种情况是,在发生特定事件(UEV)的时候,把操作更新给影子寄存器。实际发挥作用的影子寄存器的值没有立即更新,即ARR的预装载寄存器有缓冲功能。什么时候会发生事件呢?通常在CNT等于ARR或CCR的时候,即中断溢出或输出状态翻转时。

在这里插入图片描述

  ARR的预装载寄存器可以由TIMX_CR1寄存器的ARPE位使能。

在这里插入图片描述

  我在HAL库里没有找到操作CR1,或者ARPE的函数。只好操作寄存器,修改代码如下:


//main.c

static void MX_TIM2_Init(void)

{

  /* USER CODE BEGIN TIM2_Init 2 */

  htim2.Instance->CR1 |= TIM_CR1_ARPE;//使能ARR寄存器的缓冲

  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

  /* USER CODE END TIM2_Init 2 */

}


  理论上来讲,CCR是不是也要使能缓冲功能?不需要。HAL库中CCR的初始化里,已经使能了预装载寄存器。HAL_TIM_PWM_ConfigChannel>>htim->Instance->CCMR1 |= TIM_CCMR1_OC1PE;


关键字:HAL库  定时器  缓冲功能  影子寄存器

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic463315.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:HAL库教程12:ADC与DMA采集多路AD值
下一篇:HAL库教程10:定时器的PWM模式应用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

,比如采样率)。此外,在其他时候,可以使用这个种连接将嵌入式装置上的数据下载到PC中。全双工:在一个全双工的串行通信系统中,一般要求至少有三根线(信号线A,信号线B和地线)。信号线A将传输一个方向上的数据,同时信号线B传送另一个方向上的数据。29.3 串口的HAL库用法串口的HAL库用法其实就是几个结构体变量成员的配置和使用,然后配置GPIO、时钟,并根据需要配置NVIC、中断和DMA。下面我们逐一展开为大家做个说明。29.3.1 串口寄存器结构体USART_TypeDefUSART相关的寄存器是通过HAL库中的结构体USART_TypeDef定义的,在stm32h743xx.h中可以找到这个类型定义:typedef struct
发表于 2019-08-26
【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

32.1 初学者重要提示  学习定时器外设推荐从硬件框图开始了解基本的功能特性,然后逐步深入了解各种特性,这种方式方便记忆和以后查阅。  STM32H7的定时器输出100MHz方波是完全没问题。http://forum.armfly.com/forum.php?mod=viewthread&tid=86434 。  STM32H7定时器进出中断的速度能跑到12.5MHz,所有程序在TCM和Flash运行没差别。http://forum.armfly.com/forum.php?mod=viewthread&tid=90836 。  STM32H7的定时器输入捕获可以实现
发表于 2019-08-26
【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API

【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

12.1 初学者重要提示  学习使用HAL库前,有必要对他们的基本设计框架有所了解,然后深入学习,效果更好。 为了方便调用,HAL库为各种外设基本都配了三套API,查询,中断和DMA。12.2 HAL库的配置文件HAL库有一个专门的配置文件叫stm32h7xx_hal_conf.h,这个文件里面有一个很重要的参数,就是HSE_VALUE,大家所设计板子使用的实际晶振大小一定要与这个数值一致。比如V7的外置晶振是25MHz,那么这里就务必配置宏定义为:#define HSE_VALUE    ((uint32_t)25000000)完整的代码如下
发表于 2019-08-26
【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

STM32测量甲醛(HAL库)

设计介绍现在大三,在学校附近找了一家实习公司做STM32开发,做了一个小的设计:使用STM32测量甲醛。用到的模块有STM32C8T6最小系统板,一个LCD1602液晶显示屏,一个ZE08-CH2O甲醛模组,还有蜂鸣器、按键、指示灯等。可以通过按键调整甲醛超标的阈值,当测量的甲醛值超过设置的阈值时,蜂鸣器会报警,相应的指示灯也会闪烁。因为公司要求使用HAL库,就又学习了一下HAl库,发现STM32CobeMX这个软件再配合上HAL库用顺手之后还挺好用的。在学校实验室的时候一直使用的是ST官方的标准库,到公司了之后才接触HAl库。/* Includes
发表于 2019-08-26
STM32测量甲醛(HAL库)

STM32 HAL库 printf输出重定向

STM32 HAL库串口输出函数为 HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF)#ifdef __GNUC__/* With GCC, small printf (option LD Linker->Libraries->Small printf   set to 'Yes') calls __io_putchar() */#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch
发表于 2019-08-26

使用stm32的HAL库完成pwm输入模式测量频率和占空比的详细教程

。 然后使能TIM2的中断接下来添加代码:main.c 中开启捕获中断    /* USER CODE BEGIN 2 */    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);//如果不需要占空比和频率数据就只开通道2即可。第一次的数据是不正确的,实际工作中要将第一次的数据丢弃    /* USER CODE END 2 */      
发表于 2019-08-21
使用stm32的HAL库完成pwm输入模式测量频率和占空比的详细教程

小广播

何立民专栏

单片机及嵌入式宝典

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

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