不同的芯片可以支持的节点数不同,MAX3085支持256个节点,MAX487支持128个节点。
一、项目内容
十通道MCU的工装利用UM3085E(英联)芯片,通过485总线与PC进行通信。设计两种通信方案:1、一主多从,PC作为主机,十个MCU设备作为从机;主机通过“设备ID+指令”与十个MCU进行通信;2、十个MCU作为主机,直接将所测的结果上传给主机,但是注意每台设备上传数据之间要有足够的时间间隔,否则会造成总线冲突。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1kMnpnTxkkaOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3ITN2QTOzkTMzEzMwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
调试过程中遇到的问题:
1、串口输出乱码;
解决方法:出现乱码用的是正点原子的串口调试助手,后来换了友善的串口调试助手后,乱码的问题没有出现。
2、串口输出会在固定的位置多一个字符b;
void strip_in_check(void)
{
uint32_t i;
uint8_t vpb2;
vpb2 = GPIO_devRead(gpiob,2);
//UM3085_EN;加的;导致程序跑死了-20200310
//打开UM3085E的发送使能脚,将插卡测试的信息发送给上位机进行显示
UM3085_EN
delay_ms(1000);
switch (vpb2)
{
case 0:
printf("device_ID:%d\r\n",device_ID);
break;
case 1:
break;
default:
break;
}
UM3085_DIS
}
将UM3085_EN位置放在 ==vpb2 = GPIO_devRead(gpiob,2); ==语句前面,发现b变成了:,于是怀疑是UM3085_EN时序的问题导致串口输出多了字符。
解决办法:1、只使能UM3085_EN,不关闭UM3085的使能脚;
2、在主循环中加延时;
总结:遇到问题多思考,不要着急,记住着急也没用,事情还是要你一点点解决。
20200320:
接上面文章内容,上面的成功只是单方面验证了发送的功能;后面几天在调试接收功能上面又遇到了问题,最后发现是因为电路设计的时候把RE(接收使能脚)拉低导致的问题。
接收功能调试中遇到的问题:
1、程序不能连续的进行工作;
原因是UM3085_DIS使用前没有合适的延时时间;
2、发送和接收会有冲突;
出现这个问题就是因为RE使能脚一直处于有效,会一直占用485总线;导致发送的时候,总线上也会有接收到的数据。
原理图更改为:
更改后,程序能循环发送接收,功能正常。