generated from hulk/gd32f4xx_template_cmake_vscode
RS485 send: disable RX during tx + drain/clear after (anti-loopback); COM_DEBUG on with RX byte trace
This commit is contained in:
+12
@@ -63,6 +63,10 @@ void rs485_init(void) {
|
||||
}
|
||||
|
||||
void rs485_send(const uint8_t *data, uint16_t len) {
|
||||
/* 半双工防冲突:发送期间暂停 RX 中断(若收发器 RE 独立使能,
|
||||
自己发出的字节会回环进 USART,既污染接收缓冲也可能与本方解析交错) */
|
||||
usart_interrupt_disable(RS485_PHY, USART_INT_RBNE);
|
||||
|
||||
/* 进入发送态 */
|
||||
gpio_bit_set(RS485_DE_PORT, RS485_DE_PIN);
|
||||
|
||||
@@ -76,6 +80,14 @@ void rs485_send(const uint8_t *data, uint16_t len) {
|
||||
|
||||
/* 回到接收态 */
|
||||
gpio_bit_reset(RS485_DE_PORT, RS485_DE_PIN);
|
||||
|
||||
/* 丢弃发送期间挤入/回环进接收通道的残留字节(读 DATA 清 RBNE/ORE),
|
||||
并清空接收环形缓冲,避免垃圾字节污染后续协议帧 */
|
||||
(void)usart_data_receive(RS485_PHY);
|
||||
rs485_rx_clear();
|
||||
|
||||
/* 恢复接收 */
|
||||
usart_interrupt_enable(RS485_PHY, USART_INT_RBNE);
|
||||
}
|
||||
|
||||
uint8_t rs485_rx_available(void) {
|
||||
|
||||
Reference in New Issue
Block a user