中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

发现STM8S定时器硬件bug一处 (电子电工)

 693569171

下载贤集网APP入驻自媒体

型号:STM8S003 


bug重现:定时器TIM1或者TIM2,设置prescaler为任意允许值,period设为较大值。编写一段程序:首先通过setcounter函数将计数器(CNTR)清零,然后不断通过getcounter函数轮询计数器寄存器,当计数器大于某个设定值(如10000)的时候,再次setcounter将计数器清零。假设prescaler设为16,主频为16M,则计数器的值每1微秒递增1。故当计时器值大于10000时,可知已经过10毫秒。实际测试发现,循环调用这段程序,每次延时不到1毫秒。且修改prescaler,延时完全没有变化。 


原因定位:通过测试,发现调用setcounter函数设置计数器值,会导致prescaler寄存器清零。 


临时解决办法:在每次调用setcounter之后,重新设置prescaler。 


void setcntr() 

  TIM1_SetCounter(0); 
   
  TIM1->PSCRH = 0; 
  TIM1->PSCRL = 15; 
  TIM1->EGR =TIM1_PSCRELOADMODE_IMMEDIATE; 
}

最新回复

还没有人回复哦,抢沙发吧~

发布回复

为您推荐

热门交流