初学者请教STM32的几个问题,望好汉们不吝赐教!!

siguang   2009-3-30 19:27 楼主
1、ST例程NVIC/Example2中,用TIM2、TIM3、TIM4分别实现1S、2S、3S的定时 周期,采用的ARR值分别为4AFH,95FH,E0FH,预分频数都是EA5FH,更新时产生中断。照我的算法,定时周期是4AFH/(36MHZ/EA5FH)=2S,TIM3,TIM4分别是3S和4S,哪里算错了?
2、ARR和CCR都有预加载寄存器,很多时候预加载寄存器是禁能的,而书上说,影子寄存器的改变都是通过对预加载寄存器的读写实现的,请问,预加载禁能的时候影子寄存器的值是怎么变化的,当ARR预加载寄存器禁能后,更新事件发生时,影子寄存器从哪里自动加载。还有很多时候通过TIM_Setcomparex(TIMX,capture+CCRx_VAL)来实现等时间间隔的定时,此时CCR的预加载也被禁能,更新时间发生时,定时器计数器清零,CCR怎么回到初值,继续在下个周期实现等时间间隔的定时。

回复评论 (5)

关于第1个问题请看我的博客,关于第2个问题请说明哪个书说

关于第2个问题你最好参考STM32的手册。

博客文章:STM32中定时器的时钟源
点赞  2009-3-30 20:56

手册上也是这么讲啊

                                 中文版224面最下面有句“读写过程仅操作预加载寄存器”
点赞  2009-3-30 23:13

ARR和CCR都有预加载寄存器,真正起作用的是其影子寄存器

                                 当预加载寄存器被禁止时,写入ARR或CCR的数值会直接传送到对应的影子寄存器;如果使能预加载寄存器,则写入ARR或CCR的数值会在更新事件时,才会从预加载寄存器传送到对应的影子寄存器。
点赞  2009-3-31 09:22

哦,这样啊,2个问题都解决了,谢谢版主

                                  
点赞  2009-3-31 12:30

香主说的对!

                                 具体点是,如果使能预加载寄存器,则将预加载寄存器的内容送到一个缓冲器中,等到更新事件或EGR寄存器的末位为1时,再从缓冲器将值送到对应的影子寄存器。
点赞  2009-5-12 12:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复