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条回答
lvehe
1楼-- · 2019-07-20 23:00
485要保证通讯正确率,最好延时,因为RS485转换芯片从接收切换到发送要时间的。如果是加了光耦隔离的,可能时间比50us还要长才能保证。
365mcu
2楼-- · 2019-07-21 03:36
原子串口1也是用来操作485的吗?如果物理电路已经成功切换不会发生这种问题的,应该是你控制时序问题
天山狐狸
3楼-- · 2019-07-21 08:00
365mcu 发表于 2016-4-26 14:41
原子串口1也是用来操作485的吗?如果物理电路已经成功切换不会发生这种问题的,应该是你控制时序问题

我用的是自己画的板子,没有用原子的。。

如果是时序问题,为什么加延时后就好了呢
天山狐狸
4楼-- · 2019-07-21 08:57
 精彩回答 2  元偷偷看……
jermy_z
5楼-- · 2019-07-21 14:16
 精彩回答 2  元偷偷看……
jermy_z
6楼-- · 2019-07-21 14:40
按照你的代码,发个数据得累死,一个字节变一次

一周热门 更多>