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-21 18:09
jermy_z 发表于 2016-4-26 14:55
按照你的代码,发个数据得累死,一个字节变一次

那怎么弄,我默认是接收,发送时才切换到发送的。。

这个函数只是发送一个字节的,发多个字节不用这个函数。
天山狐狸
2楼-- · 2019-07-21 20:38
jermy_z 发表于 2016-4-26 14:54
不需要发每个字节都需要等待,你只需要转换方向的时候,等待就好

以前在stm32f103上没有这个等待时间都好好的,关键是原子的代码中也没有等待。。。
jermy_z
3楼-- · 2019-07-21 23:12
天山狐狸 发表于 2016-4-26 14:57
那怎么弄,我默认是接收,发送时才切换到发送的。。

这个函数只是发送一个字节的,发多个字节不用这个 ...

如果需要发数据,则

1、将数据方向转为发送,等待50us
2、发送全部需要发送的数据
3、将数据方向切为接收
jermy_z
4楼-- · 2019-07-22 01:48
 精彩回答 2  元偷偷看……
天山狐狸
5楼-- · 2019-07-22 03:07
jermy_z 发表于 2016-4-26 15:01
反正我写的时候都有延迟一小会,硬件切换需要时间的

哦,最新测试情况:

我在while1中不延时,发送一个字节没有问题。但是在串口中断中接收到一个字符后,马上发出去,这时数据就不对了。
365mcu
6楼-- · 2019-07-22 04:08
天山狐狸 发表于 2016-4-26 15:07
哦,最新测试情况:

我在while1中不延时,发送一个字节没有问题。但是在串口中断中接收到一个字符后, ...

时序问题

一周热门 更多>