在低波特率下使用RS-485总线的一个小技巧
关注 | 2…
问题说明:
我在STM32F030下使用SP3485接口芯片,配置RS-485总线波特率为1200bps。在使用过程中我发现程序可以接收数据,但无法发送数据。
问题解决方案:
最终我发现问题出在程序的发送部分。
原始发送部分的代码如下:
REDEHIGH;
HAL_UART_Transmit_IT(&huart1,(uint8_t *)&ucMbsBuf,SendLng);
REDELOW;
首先我上拉SP3485的RE_DE引脚以使芯片进入发送模式,接下来进行发送,最后下拉RE_DE引脚进入接收模式。这在逻辑上完全说得通,并且在高波特率下并没有出任何问题。然而在低波特率下,这会直接导致数据发不出去。
出现此问题的原因在于,尽管程序已经执行到REDELOW这一行,但实际上外设并没有完成发送,而程序又强制的拉低了RE_DE引脚致使芯片进入到接收模式。
解决办法我想你们已经知道了。
在1200bps下发送一个bit大约需要830us,发送一个byte需要约6.6ms,我有30个byte要发那么就需要198ms。对于一个主频48MHz的单片机来说,这实在太慢了!