美文网首页
2018-10-22 使用SN75176(RS485)通讯与S

2018-10-22 使用SN75176(RS485)通讯与S

作者: 酝锦 | 来源:发表于2019-02-20 17:38 被阅读0次

        项目中使用STM32 UART连接SN75176与外界实现485通讯,通过一个单独GPIO管脚控制485 传输方向(DE/RE),UART设置为波特率9600,数据位8,停止位1,校验位0。

        通讯过程中发现向串口输出一组数据后,UART中断总会接收到一个字节0x00,而上位机并未发送任何数据。

        示波器追踪信号发现当SN75176发送数据时,即DE(PIN3)有效时,R(PIN1)端为低电平,当发送完成切换为RE(PIN2)有效时,同时R(PIN1)由低电平转换为高电平。

        根据UART传输协议,空闲时保持高电平,如果传输一个字节0x00,在上述设置下,波形表现为9个bit的低电平。

        根据波形猜测UART将R(PIN1)端的最后一部分识别为一个字节0x00。

        解决办法:由于RS485本来就是半双工通讯,在发送时不可能有数据接收,因此需要在发送数据时关闭UART接收中断,直到发送完成,DE切换为RE有效,做一次读数操作以清除中断标志位(该数据舍弃),然后打开UART接收中断。程序示意如下:

    void USART3_send(uint8_t *p,uint32_t len)

    {

             uint32_t i;

             uint8_t Giveup;                                  //读数缓冲

             USART_ITConfig(USART3, USART_IT_RXNE,DISABLE);   //关闭中断

             GPIO_SetBits(GPIOB , GPIO_Pin_12);                //切换DE有效

             ……

            发送数据

            ……

             GPIO_ResetBits(GPIOB , GPIO_Pin_12);              //切换RE有效

             Giveup=USART3->DR;                            //被舍弃的读数

             Giveup=Giveup;                                 //避免编译器报警

             USART_ITConfig(USART3, USART_IT_RXNE,ENABLE);   //打开中断

    }

    相关文章

      网友评论

          本文标题:2018-10-22 使用SN75176(RS485)通讯与S

          本文链接:https://www.haomeiwen.com/subject/uhzhyqtx.html