打印

STM32F205RE芯片的TIM2-CNT的值在第一次更新之前,完全乱跳

[复制链接]
5309|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czyniy|  楼主 | 2013-9-23 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近使用STM32F205芯片遇到一个奇怪的问题。将TIM2当做普通定时器使用,系统时钟120M,PCLK1:30M,定时器TIM2_INT默认60M,预分频1KHz:PSC=60000-1,定时时间1分钟:ARR=60000,使能自动重装载:ARPE=1,只允许更新中断:URS=1。问题就来了,定时器CNT的值在第一次更新之前,完全乱跳啊。  配置程序如下:
  NVIC_SetPriority(TIM2_IRQn,NVIC_TIM2_PRIO); //TIM2优先级设置
  NVIC_EnableIRQ(TIM2_IRQn);                  //启用TIM2中断通道
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;         //使能定时器2时钟
  
  TIM2->CR1  = TIM_CR1_ARPE | TIM_CR1_URS;    //使能重装载寄存器,仅允许更新中断
  TIM2->CR2  = 0x00;                          //主模式为复位模式
  TIM2->DIER = TIM_DIER_UIE;                  //只使能更新中断请求
  /* 由于APB1PRESC = 4,因此硬件自动设置从APB1到定时器的时钟CK_INT = PCLK1 * 2
     即,输入TIM2预分频器的时钟为60MHz*/
  TIM2->PSC  = 60000 - 1;                     //预分频 CK_CNT = 1K
  TIM2->ARR  = 60000;                          //自动重装载寄存器
  TIM2->CR1 |= TIM_CR1_CEN;        //使能定时器
观察到CNT的值有点像PSC和ARR在第一次溢出(从0XFFFFFFFF到0x00000000)之前没有起到作用,第一次溢出之后,或者软件设置UG之后,CNT就正常了。请问有人遇到这个问题了吗?PSC和ARR除了设置UG之外,还有别的办法立即生效吗?前提是需要开启自动重装载预装载寄存器。
沙发
czyniy|  楼主 | 2013-9-23 16:08 | 只看该作者
一直没人么?

使用特权

评论回复
板凳
wxweipot| | 2013-9-23 16:16 | 只看该作者
没看懂lz的意思

使用特权

评论回复
地板
zeluo| | 2013-9-23 19:03 | 只看该作者
没有理解楼主  所遇到的问题   帮楼主顶一个吧

使用特权

评论回复
5
airwill| | 2013-9-23 20:17 | 只看该作者
定时器CNT的值在第一次更新之前,完全乱跳啊。  

其实根本不是乱跳,  是预分频寄存器海没有起效. 这时候的实际预分频寄存器还是0呢, 所以计数器变化很快. 看起来象是 "乱跳"!

使用特权

评论回复
6
czyniy|  楼主 | 2013-9-25 10:27 | 只看该作者
问题已经找到了,确实预分频器PSC和自动重装载值ARR没有起作用,可以软件UG或者先设置PSC和ARR,再开启使能自动重装载:ARPE=1。就能够保证第一次计数结果是正确的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝