首页 > 其他分享 >HAL库教程11:定时器的缓冲功能与影子寄存器

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

时间:2023-01-11 12:32:09浏览次数:49  
标签:11 ARR 定时器 HAL 预装 CCR TIM 寄存器


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

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

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


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

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

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

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


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

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


  我在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;​


标签:11,ARR,定时器,HAL,预装,CCR,TIM,寄存器
From: https://blog.51cto.com/u_12001544/6002135

相关文章

  • HAL库教程10:定时器的PWM模式应用
      本节通过定时器的PWM模式驱动无源蜂鸣器,来演奏一段音乐。本博客在掌机的系列教程中介绍过蜂鸣器的驱动原理,感兴趣的可以参考​​电子琴​​无源蜂鸣器驱动电路  蜂鸣......
  • 解决最新版W11无法跳过欢迎页面
    之前在安装Win11最新版系统时发现没有网卡驱动,也无法跳过引导页面,无奈只能安装Win10再升级到Win11,现在提供解决方法。按下Shift+F10,输入OOBE\BypassNRO.com并回......
  • 2023-01-11 小程序 Empty file is NOT a valid json file
    问题描述:wepy小程序预览时报错,说我的一个json文件是空文件,就是没代码,空的。原因:不详,我估计是微信开发者工具的问题。解决方案:删掉dist包,重新npmrunbuild打包,然后在微信......
  • 2.11 Ajax请求
     -----------------------------------------------------------------------------------------------------------------------------------------------页面滚动的......
  • android11 keymaster4 和 keymaster3 接口差异点
    最近在尝试升级optee的keymaster3实现到keymaster4。记录下升级过程中的方法和一些坑,便于回溯。keymaster源码:https://github.com/linaro-swg/kmgk基于这份源码,basedan......
  • debian11 配置samba服务 linux
    一、安装软件包sudoapt-yinstallsambasamba-common二、linux系统添加samba需要用的账户,创建需要共享的文件夹,并配置好权限。(注意共享文件夹最好不要是当前用户主......
  • 1.11回忆一段悲伤的往事
    1.11,凌晨0:53我在听这张专辑枸杞原浆味道有点像蜂蜜在我上中学的时候我爸爸经常泡蜂蜜水给我喝,喝着枸杞原浆突然回想起了那时候的生活高二开始我一直很抑郁,爸妈也因为......
  • 230110_50_RPC底层原理
    最终版本,利用hessian实现rpc调用HessianUtilpackagecom.bill.rpc10;importcom.caucho.hessian.io.Hessian2Input;importcom.caucho.hessian.io.Hessian2Output;......
  • Day11:数组基础知识
    packagecom.dfyfhqsgclxry.array;publicclassArrayDemo08{publicstaticvoidmain(String[]args){//1.创建一个二维数组11*11,0:没有棋子1:黑棋2:白棋int[......
  • 成功运行Pedestron,在Ubuntu 20.04.1 LTS, CUDA11.1
    condacreate-npedestronpython=3.8-ycondaactivatepedestron注意,必须安装python3.8或更高版本。之后安装pytorch1.10.0pipinstalltorch==1.10.0+cu111torch......