跳转到主要内容

STM32调试485(sp3485)技术总结

cathy 提交于

1.首先说明一下本人这次使用的STM32芯片是STM32F103RB,使用的资源是片内的USART1。

<strong>2.下面是我的电路连接图:</strong>
<center><img src="http://mouser.eetrend.com/files/2018-06/%E5%8D%9A%E5%AE%A2/100012119-43…; alt=“” width="600"></center>

注:电路可以稍做修改更好,在B和A分别接下拉电阻到地和上拉电阻到5v,阻值选择为10K即可,这是为了在没有进行数据传输时保证两条数据线的状态为确定值。

<strong>做一下简单的说明:</strong>

(1)PA8是sp3485的发送/接收使能端,sp3485只能支持半双工的通信,所以这个引脚就是来控制这个芯片到底是收数据还是发数据的。

(2)在有些电路连接中,sp3485的A和B端会一个被连接一个上拉电阻到3.3V,另一个会连接一个下拉电阻到GND,这样做的目的是当本sp3485不参与通信时不会影响网络的稳定性。

<strong>3.本次调试方式</strong>

PC机——USB转232转换头——RS232/RS485双向转换头——sp3485——STM32,因为是第一次调试sp3485芯片,所以当然没有太大意,先拿电脑调试,调试通了再看板子和板子之间的通信了。

<strong>4.本次试验的代码:</strong>

main函数:
<center><img src="http://mouser.eetrend.com/files/2018-06/博客/100012119-43006-x2.jpg&quot; alt=“” width="800"></center>

注:在用STM32的串口做485通信的时候,发送数据的时候,检测到最后一个数据发送后的标志位已经置位,但是还不能立即失能485芯片的发送引脚,因为虽然标志位已经置位,485芯片的数据还没有完全发送出去,这个时候需要ms级别的延时,一般2个毫秒左右基本就没有问题了。

RCC设置函数:
<center><img src="http://mouser.eetrend.com/files/2018-06/博客/100012119-43007-x3.jpg&quot; alt=“” width="800"></center>

GPIO设置函数:
<center><img src="http://mouser.eetrend.com/files/2018-06/博客/100012119-43008-x4.jpg&quot; alt=“” width="800"></center>

USART设置函数:
<center><img src="http://mouser.eetrend.com/files/2018-06/博客/100012119-43009-x5.png&quot; alt=“” width="800"></center>

NVIC设置函数:
<center><img src="http://mouser.eetrend.com/files/2018-06/博客/100012119-43010-x6.png&quot; alt=“” width="600"></center>

<strong>5.实验结果</strong>

不成功,找了很久的原因,首先请检查sp3485与232/485双向转换头的连接线,我得到的最终的正确的连接办法是sp3485的A连接到T/R+,而sp3485的B连接到T/R-。

更改连接顺序之后还是出现了很奇怪的现象,每次上电之后PC的串口调试助手都会接收到04 03 00,都要多一个00(十六进制),还有更奇怪的现象,当在PC机上输入十个数据,点击发送之后,返回来居然是20个数据,前10个数据是错误的,后10个才是我发送过去的数据。。。

这个现象非常奇怪,将程序反复修改,还是不能解决问题,甚至一度怀疑sp3485坏掉了,最后弄了一整天,将sp3485A和B引脚之间的120欧姆的电阻去掉,一切恢复正常了!

说明一下:我的sp3485和232/485互转器之间的距离20cm左右,所以这个距离应该是不用接120欧姆的匹配电阻的。

本文转载自:<a href="https://blog.csdn.net/laoniu_c/article/details/19701435">梦想与坚持的博客</a&gt;
声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有,如涉及侵权,请联系小编邮箱:cathy@eetrend.com 进行处理。