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

[复制链接]
6251|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 | 显示全部楼层
这个很难猜到,你可以试着把这个变量注释掉,然后看看程序中在哪里还在使用,这样试试能不能找到问题所在!
mmuuss586 发表于 2014-6-9 08:52 | 显示全部楼层

程序跟踪下看看;
应该你自己定义有问题,自己没发现而已;
icecut 发表于 2014-6-9 09:24 | 显示全部楼层
我也猜不到.
gxliu08 发表于 2014-6-9 09:47 | 显示全部楼层
STM32F103应该算是比较成熟了,BUG也不多,你说的这个不像芯片的问题,没有遇到过这种问题,最好跟踪调试一下。
 楼主| chejun86 发表于 2014-6-9 09:51 | 显示全部楼层
suiyy 发表于 2014-6-8 22:22
你要说的详细点,你的变量是干什么用的,很串口通信有什么关系?
一般来说不可能出现这种情况,在如果2者完 ...

我定义的变量其实和串口工作没任何关系的,刚又调试了下,如果把这个变量在当前文件中的位置做改变,程序有时又能正常工作。所以我是怀疑是不是涉及到内存分配的问题,至于串口的问题只是问题的表象而已...而看变量在内存中的地址又看不出什么所以然来
 楼主| chejun86 发表于 2014-6-9 09:55 | 显示全部楼层
ticomi 发表于 2014-6-9 08:18
这个很难猜到,你可以试着把这个变量注释掉,然后看看程序中在哪里还在使用,这样试试能不能找到问题所在! ...

我调整这个变量在文件中的定义位置,程序有时又能正常工作。所以我是怀疑这个变量是不是编译器在分配内存的时候影响到串口相关变量的赋值或者清0之类。至于我说的串口不正常只是问题的表象而已...
 楼主| chejun86 发表于 2014-6-9 09:56 | 显示全部楼层
gxliu08 发表于 2014-6-9 09:47
STM32F103应该算是比较成熟了,BUG也不多,你说的这个不像芯片的问题,没有遇到过这种问题,最好跟踪调试一 ...

你说的跟踪调试是用仿真器单步调试吗?不过貌似单步不了吧...
wenunit 发表于 2014-6-9 09:57 | 显示全部楼层
问题大多都是低级的,弱智的,
不然就不是能力和认识了.

先找上边的,实在不行,再想下边的..
gxliu08 发表于 2014-6-9 09:58 | 显示全部楼层
可以单步,你用什么调试工具?
 楼主| chejun86 发表于 2014-6-9 09:58 | 显示全部楼层
mmuuss586 发表于 2014-6-9 08:52
程序跟踪下看看;
应该你自己定义有问题,自己没发现而已;

怎么跟踪法?我所有的变量定义都是一类格式,应该不是定义的问题吧
 楼主| chejun86 发表于 2014-6-9 10:00 | 显示全部楼层
gxliu08 发表于 2014-6-9 09:58
可以单步,你用什么调试工具?

STLink    STM8还可以单步,但是STM32单步不了
ticomi 发表于 2014-6-9 12:11 | 显示全部楼层
chejun86 发表于 2014-6-9 09:55
我调整这个变量在文件中的定义位置,程序有时又能正常工作。所以我是怀疑这个变量是不是编译器在分配内存 ...

你的这个变量是不是指针,或者含有指针?如果是最好把指针定义时赋值,这样避免野指针。一般这样偶尔正常偶然不正常的问题,多有此引发。
 楼主| chejun86 发表于 2014-6-9 12:46 | 显示全部楼层
ticomi 发表于 2014-6-9 12:11
你的这个变量是不是指针,或者含有指针?如果是最好把指针定义时赋值,这样避免野指针。一般这样偶尔正常 ...

就是一个简单的8位变量,不是指针之类的
wangbao619 发表于 2014-6-9 14:09 | 显示全部楼层
应该可以单步调试的吧
guangbiao 发表于 2014-6-9 14:11 | 显示全部楼层
看看是不是你定义的缓冲区变量溢出了。。。
但就算溢出了也不会影响到中断哦!!!!
莫名其妙的。。。好好查查吧。。。
ZhangStudy 发表于 2014-6-9 16:31 | 显示全部楼层
一般是你的其他地方使用了没有赋初值的指针(俗称野指针);或者是使用某个数组越界了,也就是定义了四个元素的数组,你却使用了第五个元素。 估计,你这个变量放在某个位置时,编译器恰好把它放在你定义的数组之后。

你检查一下,在能正常运行的情况下,这个变量的前面是否定义了数组,如果定义了,请仔细检查使用这个数组的代码。(这只是一种猜测,也可能是别的原因)
通宵敲代码 发表于 2014-6-9 17:16 | 显示全部楼层
未声明,先使用??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

66

帖子

1

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