发现STM8S定时器硬件bug一处
novakon2014/12/22电子技术 IP:广东
型号: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;
}
来自:电子信息 / 电子技术
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
novakon
学者 机友 笔友
文章
1256
回复
8386
学术分
16
2008/03/29注册,2年11个月前活动

已走,勿送

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}