打印
[STM32F1]

STM32F103ZE的串口接收端需要上拉吗?

[复制链接]
8249|32
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
    最近在调试一个STM32F103ZET6做的板子,用了串口3给一个串口屏发送数据,刚开始没加屏幕调试串口功能的时候,发现了一个奇怪的问题。
    过程很麻烦,简单总结就是,我只要使用串口发送端发送了数据,在这个时候,我用示波器的探头碰一下接收端,STM32F就死机了。如果不使用串口,碰接收端就不会死机。
    发现了这个现象以后,我想示波器探头碰到接收端,就相当于对接收端进行了下拉。为了解决这个问题,我就对接收端进行了上拉,上拉以后,这个问题消失了。
    但是,我手头还有别人做的一个东西,也是用的这个芯片,接收端也没有上拉。
    是不是这个芯片的串口接收端必须上拉,这种要求还真是挺奇怪的,有人碰到过类似的吗?
沙发
orangelxlf|  楼主 | 2017-4-27 10:18 | 只看该作者
补充实验,为了防止是哪里没设置对,我在串口发送数据和不发送数据的时候都做了实验,结果是不管什么时候用探头接触接收端,都会死机

使用特权

评论回复
评论
zhaoyu2005 2017-4-28 11:10 回复TA
明显不是上拉的问题,还是看看标志位吧。好像是溢出,这是个坑,这个位不清就一直进入中断 
板凳
yklstudent| | 2017-4-27 10:22 | 只看该作者
你就没确认程序死在哪里了

使用特权

评论回复
地板
wozaihuayu| | 2017-4-27 10:48 | 只看该作者
这种情况,不要用探头去碰触接收端!在板子上电启动之前,先把示波器探头给连接到接收端脚上!然后上电启动系统!看死不死!

使用特权

评论回复
5
orangelxlf|  楼主 | 2017-4-27 11:05 | 只看该作者
yklstudent 发表于 2017-4-27 10:22
你就没确认程序死在哪里了

一进入发送数据的那个库函数就死了,就是USART_SendData()那个函数,然后看编译器的光标指到了一个位置,这个位置是.s那个文件的,这一行就一个B的字母

使用特权

评论回复
6
orangelxlf|  楼主 | 2017-4-27 11:38 | 只看该作者
本帖最后由 orangelxlf 于 2017-4-27 11:43 编辑

就是这个位置
文件是stm32f10x.s

IMG_20170427_113620.jpg (120.54 KB )

IMG_20170427_113620.jpg

IMG_20170427_114016.jpg (147.71 KB )

IMG_20170427_114016.jpg

使用特权

评论回复
7
orangelxlf|  楼主 | 2017-4-27 11:39 | 只看该作者
wozaihuayu 发表于 2017-4-27 10:48
这种情况,不要用探头去碰触接收端!在板子上电启动之前,先把示波器探头给连接到接收端脚上!然后上电启动 ...

按你说的不会死机,很正常。

使用特权

评论回复
8
yklstudent| | 2017-4-27 12:42 | 只看该作者
orangelxlf 发表于 2017-4-27 11:39
按你说的不会死机,很正常。

你串口接收中断和发送中断都开启了?

使用特权

评论回复
9
mmuuss586| | 2017-4-27 12:44 | 只看该作者
加上拉,还不如串个电阻;
再加LC滤波,L用磁珠

使用特权

评论回复
10
orangelxlf|  楼主 | 2017-4-27 15:02 | 只看该作者
yklstudent 发表于 2017-4-27 12:42
你串口接收中断和发送中断都开启了?

开了接收中断,没开发送中断。发送的时候,稍微等一会,发送完成了再退出去

使用特权

评论回复
11
orangelxlf|  楼主 | 2017-4-27 15:03 | 只看该作者
mmuuss586 发表于 2017-4-27 12:44
加上拉,还不如串个电阻;
再加LC滤波,L用磁珠


串了个120的电阻,问题是我觉得不应该出这种状况。

使用特权

评论回复
12
CHLDZKJ| | 2017-4-27 15:57 | 只看该作者
学习一下

使用特权

评论回复
13
wkshengren| | 2017-4-28 08:47 | 只看该作者
没接上拉的是不是配内部上拉了,理论上串口都要上拉的

使用特权

评论回复
14
lihui567| | 2017-4-28 10:21 | 只看该作者
我一般都是串电阻,上拉没用过

使用特权

评论回复
15
orangelxlf|  楼主 | 2017-4-28 12:05 | 只看该作者
wkshengren 发表于 2017-4-28 08:47
没接上拉的是不是配内部上拉了,理论上串口都要上拉的

有道理,下午去查查

使用特权

评论回复
16
orangelxlf|  楼主 | 2017-4-28 14:53 | 只看该作者
wkshengren 发表于 2017-4-28 08:47
没接上拉的是不是配内部上拉了,理论上串口都要上拉的


配置成上拉输入没问题了,不用外接上拉电阻。不过它能不能正常接收数据还没试。倒是很奇怪,我查了以前的几个东西,有一个是103RB用的是浮空输入,没问题,另一个是103ZE也用的是浮空输入,也没问题。我看网上初始化串口的程序,大多数也是浮空输入。为什么单单这个片子需要上拉输入?

使用特权

评论回复
17
wkshengren| | 2017-4-28 16:24 | 只看该作者
一般从可靠性角度考虑,串口都需要上拉,浮空可以的情况有可能是因为对面有上拉,或者对方是推挽输出,但是这个属于赌,所以从可靠性上考虑,还是要加上拉

使用特权

评论回复
18
orangelxlf|  楼主 | 2017-4-28 20:52 | 只看该作者
wkshengren 发表于 2017-4-28 16:24
一般从可靠性角度考虑,串口都需要上拉,浮空可以的情况有可能是因为对面有上拉,或者对方是推挽输出,但是 ...

但是,不上拉也不至于会死机

使用特权

评论回复
19
戈卫东| | 2017-4-28 21:35 | 只看该作者
估计是某个错误信号没有得到处理/清除,程序不停地进入ISR

使用特权

评论回复
20
wkshengren| | 2017-5-2 09:33 | 只看该作者
死机可能是因为你写的串口接收程序不够强壮,对错误处理不完善导致的,在程序中加入对错误寄存器的处理,以及丢掉错误帧的处理

使用特权

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

本版积分规则

25

主题

265

帖子

0

粉丝