打印
[STM32F1]

STM32遇到一个很棘手的问题,不知道有相同遭遇的没...

[复制链接]
5353|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chejun86|  楼主 | 2014-6-8 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用STM32F103开发一个项目,遇到一件很奇怪的事。当我在一个文件里面定义变量时,工作正常,串口2也正常输出。但当我把这个变量定义在另一个文件中时,却发现程序进不了串口中断。我查看了串口控制寄存器的值,发现两种情况下在加载好数据启动发送前寄存器的值都一样,搞不明白为什么变量定义在不同的文件下却会影响到串口的工作?都没什么头绪...
沙发
戈卫东| | 2014-6-8 22:03 | 只看该作者
猜不到。。。。。。

使用特权

评论回复
板凳
suiyy| | 2014-6-8 22:22 | 只看该作者
你要说的详细点,你的变量是干什么用的,很串口通信有什么关系?
一般来说不可能出现这种情况,在如果2者完全独立的情况。

使用特权

评论回复
地板
ticomi| | 2014-6-9 08:18 | 只看该作者
这个很难猜到,你可以试着把这个变量注释掉,然后看看程序中在哪里还在使用,这样试试能不能找到问题所在!

使用特权

评论回复
5
mmuuss586| | 2014-6-9 08:52 | 只看该作者

程序跟踪下看看;
应该你自己定义有问题,自己没发现而已;

使用特权

评论回复
6
icecut| | 2014-6-9 09:24 | 只看该作者
我也猜不到.

使用特权

评论回复
7
gxliu08| | 2014-6-9 09:47 | 只看该作者
STM32F103应该算是比较成熟了,BUG也不多,你说的这个不像芯片的问题,没有遇到过这种问题,最好跟踪调试一下。

使用特权

评论回复
8
chejun86|  楼主 | 2014-6-9 09:51 | 只看该作者
suiyy 发表于 2014-6-8 22:22
你要说的详细点,你的变量是干什么用的,很串口通信有什么关系?
一般来说不可能出现这种情况,在如果2者完 ...

我定义的变量其实和串口工作没任何关系的,刚又调试了下,如果把这个变量在当前文件中的位置做改变,程序有时又能正常工作。所以我是怀疑是不是涉及到内存分配的问题,至于串口的问题只是问题的表象而已...而看变量在内存中的地址又看不出什么所以然来

使用特权

评论回复
9
chejun86|  楼主 | 2014-6-9 09:55 | 只看该作者
ticomi 发表于 2014-6-9 08:18
这个很难猜到,你可以试着把这个变量注释掉,然后看看程序中在哪里还在使用,这样试试能不能找到问题所在! ...

我调整这个变量在文件中的定义位置,程序有时又能正常工作。所以我是怀疑这个变量是不是编译器在分配内存的时候影响到串口相关变量的赋值或者清0之类。至于我说的串口不正常只是问题的表象而已...

使用特权

评论回复
10
chejun86|  楼主 | 2014-6-9 09:56 | 只看该作者
gxliu08 发表于 2014-6-9 09:47
STM32F103应该算是比较成熟了,BUG也不多,你说的这个不像芯片的问题,没有遇到过这种问题,最好跟踪调试一 ...

你说的跟踪调试是用仿真器单步调试吗?不过貌似单步不了吧...

使用特权

评论回复
11
wenunit| | 2014-6-9 09:57 | 只看该作者
问题大多都是低级的,弱智的,
不然就不是能力和认识了.

先找上边的,实在不行,再想下边的..

使用特权

评论回复
12
gxliu08| | 2014-6-9 09:58 | 只看该作者
可以单步,你用什么调试工具?

使用特权

评论回复
13
chejun86|  楼主 | 2014-6-9 09:58 | 只看该作者
mmuuss586 发表于 2014-6-9 08:52
程序跟踪下看看;
应该你自己定义有问题,自己没发现而已;

怎么跟踪法?我所有的变量定义都是一类格式,应该不是定义的问题吧

使用特权

评论回复
14
chejun86|  楼主 | 2014-6-9 10:00 | 只看该作者
gxliu08 发表于 2014-6-9 09:58
可以单步,你用什么调试工具?

STLink    STM8还可以单步,但是STM32单步不了

使用特权

评论回复
15
ticomi| | 2014-6-9 12:11 | 只看该作者
chejun86 发表于 2014-6-9 09:55
我调整这个变量在文件中的定义位置,程序有时又能正常工作。所以我是怀疑这个变量是不是编译器在分配内存 ...

你的这个变量是不是指针,或者含有指针?如果是最好把指针定义时赋值,这样避免野指针。一般这样偶尔正常偶然不正常的问题,多有此引发。

使用特权

评论回复
16
chejun86|  楼主 | 2014-6-9 12:46 | 只看该作者
ticomi 发表于 2014-6-9 12:11
你的这个变量是不是指针,或者含有指针?如果是最好把指针定义时赋值,这样避免野指针。一般这样偶尔正常 ...

就是一个简单的8位变量,不是指针之类的

使用特权

评论回复
17
wangbao619| | 2014-6-9 14:09 | 只看该作者
应该可以单步调试的吧

使用特权

评论回复
18
guangbiao| | 2014-6-9 14:11 | 只看该作者
看看是不是你定义的缓冲区变量溢出了。。。
但就算溢出了也不会影响到中断哦!!!!
莫名其妙的。。。好好查查吧。。。

使用特权

评论回复
19
ZhangStudy| | 2014-6-9 16:31 | 只看该作者
一般是你的其他地方使用了没有赋初值的指针(俗称野指针);或者是使用某个数组越界了,也就是定义了四个元素的数组,你却使用了第五个元素。 估计,你这个变量放在某个位置时,编译器恰好把它放在你定义的数组之后。

你检查一下,在能正常运行的情况下,这个变量的前面是否定义了数组,如果定义了,请仔细检查使用这个数组的代码。(这只是一种猜测,也可能是别的原因)

使用特权

评论回复
20
通宵敲代码| | 2014-6-9 17:16 | 只看该作者
未声明,先使用??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

66

帖子

1

粉丝