[STM8] 为什么我的定时器2不能工作?求解

[复制链接]
2508|12
 楼主| xxiao6130 发表于 2013-8-28 20:04 | 显示全部楼层 |阅读模式
下面是我配置的定时器2,大家看一下有没有错,定时为20us,使用的是查询法,谢谢帮忙啊!void Init_TIM2(void)
{
        CLK_CKDIVR= 0x00;
        TIM2_IER=0X00;
        TIM2_EGR=0X01;
        TIM2_PSCR=0X01;
        TIM2_ARRH=0x00;
        TIM2_ARRL=0xa0;
        TIM2_CNTRH=0x00;
        TIM2_CNTRL=0xa0;
        TIM2_CR1=0X01;
}

查询的函数为:void time(void)
{
        if(TIM2_SR1==1)
        {
                TIM2_SR1=0;
                tim2++;
        }
}
thebearontree 发表于 2013-8-28 21:55 | 显示全部楼层
用查询法可能用不到这句 TIM2_EGR=0X01;
新手勿喷
yuanquanquan 发表于 2013-8-28 22:30 | 显示全部楼层
没试过  不过感觉2楼是对的   我明天要去试一下   楼主调试好了 别忘了分享
thebearontree 发表于 2013-8-28 23:16 | 显示全部楼层
不要用if判断定时标志,应该用while不停判断直到置1,用if判断一次就跳过了
乌月明星稀 发表于 2013-8-28 23:51 | 显示全部楼层
你查看一下,你那个TIM2_ARR是否真的送进去了。你应该先配置ARR,CNTR,PSCR后再配置TIM2_EGR!!!配置顺序有误。
乌月明星稀 发表于 2013-8-28 23:53 | 显示全部楼层
thebearontree 发表于 2013-8-28 23:16
不要用if判断定时标志,应该用while不停判断直到置1,用if判断一次就跳过了

他的这个问题跟这个没关系。只是会有时间误差。
乌月明星稀 发表于 2013-8-28 23:56 | 显示全部楼层
thebearontree 发表于 2013-8-28 21:55
用查询法可能用不到这句 TIM2_EGR=0X01;
新手勿喷

不管你是不是用查询法,配置TIM2_EGR是跟你TIM1_CR1的BIT7位有关。如果你ARR是带缓存的,那你必须在配置完ARR、PSCRS时用TIM1_EGR|=1;
1849097455 发表于 2013-8-29 09:10 | 显示全部楼层
昨天我试了,还真的是定时器没起作用!求解?
yuanquanquan 发表于 2013-8-29 10:11 | 显示全部楼层
楼主 今天一试 我找到原因了 其实很简单  只要把TIM2_SR1==1  改成 TIM2_SR1&&0x01==1 亲测 成功!
1849097455 发表于 2013-8-29 11:11 | 显示全部楼层
yuanquanquan 发表于 2013-8-29 10:11
楼主 今天一试 我找到原因了 其实很简单  只要把TIM2_SR1==1  改成 TIM2_SR1&&0x01==1 亲测 成功! ...

你是不是写错了TIM2_SR1&&0x01==1
应该是TIM2_SR1&0x01==1吧!

评论

确实是这样的  发表于 2013-8-30 14:44

评分

参与人数 1威望 +3 收起 理由
xxiao6130 + 3 很给力!

查看全部评分

yuanquanquan 发表于 2013-8-29 15:04 | 显示全部楼层
1849097455 发表于 2013-8-29 11:11
你是不是写错了TIM2_SR1&&0x01==1
应该是TIM2_SR1&0x01==1吧!

&和&&都可以  
 楼主| xxiao6130 发表于 2013-8-30 11:35 | 显示全部楼层
yuanquanquan 发表于 2013-8-29 15:04
&和&&都可以

&和&&是有区别的,而在这里可以是情况特殊。
 楼主| xxiao6130 发表于 2013-8-30 13:36 | 显示全部楼层
thebearontree 发表于 2013-8-28 21:55
用查询法可能用不到这句 TIM2_EGR=0X01;
新手勿喷

呵呵,这句是必要的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

676

帖子

2

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