STMCU小助手
发布时间:2022-4-14 10:31
|
项目背景* ~" w3 q) F) q 笔者在进行某项目开发时,需要实时调节定时器的周期,以控制定时器下次更新中断的时间。6 k6 h" Q" [- }/ W 9 X: b: a# N. R; V' |1 T4 G 预装载寄存器 自动重装载寄存器 ARR 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器)。% G+ w% y1 Q* G6 s3 Y# a 在图中可以看到auto-reload register这个框有一个阴影,有些其它寄存器也有用阴影表示,如我用蓝色标出的Capture/Compare寄存器;有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preload register(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadow register(影子寄存器);正如手册上的14.3.1节所说,根据TIMx_CR1寄存器中APRE位的设置,preload register的内容可以随时传送到shadow register,即两者是连通的(permanently),或者在每一次更新事件(UEV)时才把preload register的内容传送到shadow register。* e* X! q. W, Z) {/ T9 e$ ]3 \
实现方法/ W" l% h2 N, r9 ~, o/ _6 k 禁用预装载寄存器,修改ARR的值(TIM_Period)会直接操作影子寄存器,新的ARR值将立即生效: " e. q9 h$ }, \0 A7 `; t4 @
使能预装在寄存器,修改ARR的值(TIM_Period)会操作预装载寄存器,直到更新事件后,ARR预装载寄存器的值才会被拷贝到影子寄存器中: ! Z, p; B' L+ t( n9 K; J- f
TIM_ARRPreloadConfig函数的定义如下:1 H2 ^) ~% r$ N" ` {6 e
) e {* E8 L% R6 V |
【经验分享】STM32语音识别的智能蓝牙音箱(源程序+原理图+PCB+设计说明书+PPT)
想找个ST芯片
[GPIO] 使用新型抽象开始C++嵌入式编程,从GPIO开始
技术手册stm32f1xx中的一个小问题
【经验分享】STM32 HAL库移植FreeModbus详细步骤
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
实战经验 | Keil工程使用NEAI库的异常问题
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
微信公众号
手机版