RS485切换到发送模式后要等待一段时间再发数据,否则数据发出的是错误的,这个问题如何解决

2019-07-20 22:37发布

本帖最后由 天山狐狸 于 2016-4-26 14:50 编辑

如题,按照原子的代码,用串口1操作485,发送一个字节时,如果485切换到发送模式不等待50us,发出去的数据变成了0XFF。等待50us后再发送数据,数据就正确了。


原子的例程中怎么没有等待可以发送呢,我的怎么就必须等待呢?

谢谢


附:我用stm32f407芯片,168M频率

[mw_shl_code=applescript,true]void USART_SendByte(uint8_t Data)
{
  Enable_485Tx;//使能485发送
  delay_us(50);

  USART1->DR = (Data & (uint16_t)0x01FF);
  while (!(USART1->SR & 0x0040));//等待发送完成
  Enable_485Rx;//默认到485接收
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
天山狐狸
1楼-- · 2019-07-22 07:33
365mcu 发表于 2016-4-26 15:22
时序问题

这个该如何解决
天山狐狸
2楼-- · 2019-07-22 10:42
lvehe 发表于 2016-4-26 15:22
485要保证通讯正确率,最好延时,因为RS485转换芯片从接收切换到发送要时间的。如果是加了光耦隔离的,可能 ...

以前用没有加都工作正常,以前是max3485,现在换成ADM2483,看手册,切换时间2483要比3485短很多,怎么却这样呢?

jermy_z
3楼-- · 2019-07-22 15:33
 精彩回答 2  元偷偷看……
天山狐狸
4楼-- · 2019-07-22 15:47
 精彩回答 2  元偷偷看……
kaiyuan123
5楼-- · 2019-07-22 19:31
我还没懂怎么485通讯,楼主能不看看你的代码或者发下原子哥的关于485通讯的代码。
天山狐狸
6楼-- · 2019-07-23 00:38
kaiyuan123 发表于 2016-4-26 15:37
我还没懂怎么485通讯,楼主能不看看你的代码或者发下原子哥的关于485通讯的代码。

我的发送代码已经在楼主位了。。

下面是原子的发送代码
[mw_shl_code=applescript,true]//RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
void RS485_Send_Data(u8 *buf,u8 len)
{
        u8 t;
        RS485_TX_EN=1;                        //设置为发送模式
          for(t=0;t<len;t++)                //循环发送数据
        {
                while((USART2->SR&0X40)==0);//等待发送结束                  
                USART2->DR=buf[t];
        }         
        while((USART2->SR&0X40)==0);//等待发送结束       
        RS485_RX_CNT=0;          
        RS485_TX_EN=0;                                //设置为接收模式       
}[/mw_shl_code]

一周热门 更多>