OpenEdv-开源电子网

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

TIM3中断函数跑死到串口中断去了,。。。HELP!

[复制链接]

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
发表于 2013-4-1 21:09:04 | 显示全部楼层 |阅读模式
      TIM3计数脉冲数,用的外部时钟模式2,直接发送到串口调试助手。就是在主函数while(1)里面一直打印。脉冲数满了预装载值又从0开始。一切正常。其中,我在串口里面只用了发数据,没有用收数据。
      后来,我想着加个TIM3中断,以便等脉冲记数加到预装载值时进入更新中断,等函数写好后编译也没报错和警告,但是运行发现串口里面不见脉冲计数了。单步调试时,发现


到光标那行(中断优先级初始化那行代码)时,程序就就死在那了。
   点击halt小红叉,跳到


这是什么原因呀?
      帮帮我解决这个问题吧。。
提问前我加了单片机的串口接收和串口中断代码试验,程序死活不肯动,就是卡在原处,根本不往后面走,所以后面的白加了。我想了想,又删掉修改,回到解放前。
然后我把出问题那行“NVIC_Init(&NVIC_InitStructure);//中断优先级初始化”注释掉,编译,一个小警告, 无视它,脉冲在数,但是程序没意义了。不进中断。不是我想要的结果。。。
大虾们帮帮我吧!
    
有进步就好!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-1 21:11:45 | 显示全部楼层
有进步就好!
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-4-1 22:14:28 | 显示全部楼层
你这个看不到图片
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-1 22:14:33 | 显示全部楼层
回复【楼主位】caoyicheng626:
---------------------------------
是不是没有中断服务函数?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 10:44:44 | 显示全部楼层
回复【4楼】正点原子:
回复【楼主位】caoyicheng626: --------------------------------- 是不是没有中断服务函数?
---------------------------------
   中断函数有。最开始的单步执行也没点对,应该是到有问题的地方点单步运行。这样一来发现真正出问题的地方是:函数死在中断处理函数里面的pritf函数那。
   后来我想了想,看了例说STM32书。一开始,我觉得串口只向调试助手发送 而不接收数据就不会用中断,看了书才知道。不管是收还是发抖会用中断。
   而串口的中断优先级比TIM3的优先级低,我却在TIM3中断处理函数里面用printf。这样串口在等TIM3中断完成再打印(因为中断优先级比TIM3的低),而TIM3中断处理函数里就是要打印,这样一来互相在等,就死在那不动了。
     原子哥,我的分析对不对呀??
有进步就好!
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 10:46:30 | 显示全部楼层
回复【3楼】Admin:
你这个看不到图片
---------------------------------
后来又编辑了一下,这会可以看到了。
有进步就好!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-2 10:49:46 | 显示全部楼层
回复【5楼】caoyicheng626:
---------------------------------
我们的串口发送函数没有用到中断啊...
你是不是没有初始化串口啊...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 10:51:53 | 显示全部楼层
回复【4楼】正点原子:
回复【楼主位】caoyicheng626: --------------------------------- 是不是没有中断服务函数?
---------------------------------
原子老师,还有个问题:串口是用了中断,我没有像你的教学例程里讲的那样用串口接收数据,所以我没配置串口中断优先级,是不是它默认就比TIM3中断的低?
还有就是为啥片子不接收调试助手数据,仅发送时不用配置NVIC优先级也能打印呢?就是这个误导我 觉得没开中断呢。。
有进步就好!
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 10:55:14 | 显示全部楼层
回复【7楼】正点原子:
回复【5楼】caoyicheng626: --------------------------------- 我们的串口发送函数没有用到中断啊... 你是不是没有初始化串口啊...
---------------------------------
初始化  用了的。
老师回答得比我问得还快。。呵呵,第二个问题还没问完你就答了。
有进步就好!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-2 12:36:03 | 显示全部楼层
回复【8楼】caoyicheng626:
---------------------------------
必须配置,否则是关闭的啊....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 14:34:06 | 显示全部楼层
回复【10楼】正点原子:
回复【8楼】caoyicheng626: --------------------------------- 必须配置,否则是关闭的啊....
---------------------------------
您说的意思是,不管用串口向调试助手发送数据还是接收数据,也不管开不开其他任何中断(比如定时器之类的中断)。只要用了串口,不管开不开中断都得在串口初始化函数中配置中断优先级?
   但是我不配置串口中断优先级,向助手发数据的时候,也能向串口打印数据的呀。。只是我加了定时器中断时候,问题就很多了。
有进步就好!
回复 支持 反对

使用道具 举报

22

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
金钱
213
注册时间
2012-8-24
在线时间
0 小时
 楼主| 发表于 2013-4-2 16:17:20 | 显示全部楼层
搞了好几天,现在程序终于按自己思路跑了。特来结一下贴。很感谢原子老师的回答以及论坛里的和群里的大虾们的帮助!
之前是一些原因导致的,1.我把中断处理函数写成void TIM3_IRQnHandler(void)了,本应该是void TIM3_IRQHandler(void)。(我也不知道我咋就多写了个n,这里多谢群里的花花哥的指正);2.中断函数里面清除标置位的函数写错了,括号打错地方了,我后来才看出来的。
    中间有很多很傻的地方,问题比较低级,没啥技术含量。但是对于菜鸟的我还是在进步!高手们不要见笑!
    为了避免误导新人,误导出现类似问题的人。在这里也说一些地方,也是自我总结于反思:1.原子老师的例程,串口向调试助手发数据但不接收数据的时候是不使用串口中断的,所以也不用配置中断优先级。2.写代码认真点,一个字母、半边括号都会使程序跑不对,特别是编译器识别不了的错误。
有进步就好!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 06:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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