OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3869|回复: 3

关于定时器的一个隐藏错误。请各位大神分析

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-10-6
在线时间
0 小时
发表于 2013-12-28 21:34:39 | 显示全部楼层 |阅读模式
             定时器开启后立刻就跳入了中断(CNT没有溢出,配置的是更新中断)
这时正常的时序:
QQ截图20131228201406.png


这时在程序中出现的实际时序:(为了表达的准确性,这张图是我PS的)
111图20131228201946.png
后附上代码(我查询和好几个人的例程(包括李想和原子的例程),貌似他们都没注意到这个问题)
定时器配置程序:
void TIM_Config()
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
nvic.NVIC_IRQChannel=TIM6_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority=2;
nvic.NVIC_IRQChannelSubPriority=2;
nvic.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&nvic);
TIM6->ARR=10000;
TIM6->SC=7199;
TIM6->CR1|=1<<3;//单脉冲模式
TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);//这里没有使能定时器,使能代码在外部中断服务函数中
}


void EXTI9_5_IRQHandler()  //用外部中断使能定时器
{
if(EXTI_GetFlagStatus(EXTI_Line5))
{
  TIM_Cmd(TIM6,ENABLE);
  TIM6->CNT=0;
  EXTI_ClearFlag(EXTI_Line5);
  }
}


void TIM6_IRQHandler()
{
if(TIM_GetFlagStatus(TIM6,TIM_FLAG_Update)//触发更新中断
{
  led(1);
  TIM_ClearFlag(TIM6,TIM_FLAG_Update);
  }
}


应有的实验现象:通过按键触发外部中断以后定时器被使能,定时器计数器开始自加,延时一秒,定时器更新中断被触发,led灯被点亮。

实际的实验现象:开机后还没按键(没有开启定时器),定时器被使能程序立刻就跑进了定时器断服务函数。且CNT寄存器没有发生上溢(我是用的向上计数),但是清除标志位退出中断函数后,后边的的定时器工作就能正常延时了


附:我后来在配置函数的的最后添上了一句更新事件标志位清除函数但没有作用。最后不得已在中断服务函数中添加了一句计数器值的判断语句:
if(TIM_GetFlagStatus(TIM6,TIM_FLAG_Update)&TIM6->CNT==10000)
{
  led(1);
  TIM_ClearFlag(TIM6,TIM_FLAG_Update);
  }
之后就一切正常。
但我还是很好奇为什么会造成这种现象。我都把寄存器手册翻来覆去看了几遍但还是没有找出结症所在。
请各位大神解答。小弟感激不尽!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2013-10-6
在线时间
0 小时
 楼主| 发表于 2013-12-28 21:46:01 | 显示全部楼层
我知道了问题出在哪里。。。
 中断控制器(NVIC)一定要在语句的最后。
 要不然就会出现上述的错误
 这个问题在大多数教程里都没有提到,请大家注意!
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2013-12-28 22:32:32 | 显示全部楼层
回复【2楼】天空之鱼5141:
---------------------------------
中断放最后配置,一直习惯这样。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-12-29 21:01:21 | 显示全部楼层
回复【2楼】天空之鱼5141:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 09:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表