×
单片机 > 单片机程序设计 > 详情

stm32下面控制RS485发送有一定概率出错的情况

发布时间:2020-05-19 发布时间:
|

环境:stm32 72M时钟 串口波特率9600 RS485芯片 发送的数据每组16byte 

原程序(未修改):


//RS485 发送len个字节

//buf:发送区首地址

//len:发送的字节数

void RS485SendData(u8 *buf,u8 len)

{

    u8 t;

    RS485_TX_EN=1;          //设置为发送模式

    for(t=0;t

    {          

        while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);   

        USART_SendData(USART2,buf[t]);

    }     

    while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);     

    RS485_RX_CNT=0;

    RS485_TX_EN=0;              //设置为接收模式

}


修改后(串口发送前后都需要延时20us):


//RS485 发送len个字节

//buf:发送区首地址

//len:发送的字节数

void RS485SendData(u8 *buf,u8 len)

{

    u8 t;

    RS485_TX_EN=1;          //设置为发送模式

    for(t=0;t

    {          

        while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);  

        delay_us(20); //延时20us

        USART_SendData(USART2,buf[t]);

        delay_us(20); //延时20us

    }     

    while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);     

    RS485_RX_CNT=0;

    RS485_TX_EN=0;              //设置为接收模式

}


总结:串口发送前和发送后都需要延时20us,不然会出现一定概率数据出错的问题,经过多天分析,一直看不准是发送错误还是接受错误,最后快要放弃的时候主从机都修改了,一直修改程序,最后发现这是主从机都需要配合的问题,搞了这么久,终于解决问题了!



关键字:stm32  RS485发送  出错 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法