天天看点

485总线调试问题总结

不同的芯片可以支持的节点数不同,MAX3085支持256个节点,MAX487支持128个节点。

一、项目内容

十通道MCU的工装利用UM3085E(英联)芯片,通过485总线与PC进行通信。设计两种通信方案:1、一主多从,PC作为主机,十个MCU设备作为从机;主机通过“设备ID+指令”与十个MCU进行通信;2、十个MCU作为主机,直接将所测的结果上传给主机,但是注意每台设备上传数据之间要有足够的时间间隔,否则会造成总线冲突。

485总线调试问题总结

调试过程中遇到的问题:

1、串口输出乱码;

解决方法:出现乱码用的是正点原子的串口调试助手,后来换了友善的串口调试助手后,乱码的问题没有出现。

2、串口输出会在固定的位置多一个字符b;

485总线调试问题总结
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时序的问题导致串口输出多了字符。

485总线调试问题总结

解决办法:1、只使能UM3085_EN,不关闭UM3085的使能脚;

2、在主循环中加延时;

485总线调试问题总结

总结:遇到问题多思考,不要着急,记住着急也没用,事情还是要你一点点解决。

20200320:

接上面文章内容,上面的成功只是单方面验证了发送的功能;后面几天在调试接收功能上面又遇到了问题,最后发现是因为电路设计的时候把RE(接收使能脚)拉低导致的问题。

接收功能调试中遇到的问题:

1、程序不能连续的进行工作;

原因是UM3085_DIS使用前没有合适的延时时间;

2、发送和接收会有冲突;

出现这个问题就是因为RE使能脚一直处于有效,会一直占用485总线;导致发送的时候,总线上也会有接收到的数据。

原理图更改为:

485总线调试问题总结

更改后,程序能循环发送接收,功能正常。