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

[复制链接]
6028|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 | 显示全部楼层
没有理解楼主  所遇到的问题   帮楼主顶一个吧
airwill 发表于 2013-9-23 20:17 | 显示全部楼层
定时器CNT的值在第一次更新之前,完全乱跳啊。  

其实根本不是乱跳,  是预分频寄存器海没有起效. 这时候的实际预分频寄存器还是0呢, 所以计数器变化很快. 看起来象是 "乱跳"!
 楼主| czyniy 发表于 2013-9-25 10:27 | 显示全部楼层
问题已经找到了,确实预分频器PSC和自动重装载值ARR没有起作用,可以软件UG或者先设置PSC和ARR,再开启使能自动重装载:ARPE=1。就能够保证第一次计数结果是正确的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部