generated from hulk/gd32f4xx_template_cmake_vscode
50 lines
1.4 KiB
C
50 lines
1.4 KiB
C
#ifndef RS485_H
|
|
#define RS485_H
|
|
|
|
#include "gd32f4xx.h"
|
|
#include "board_config.h"
|
|
|
|
/* RS485 接收环形缓冲区容量(单位:字节),采用"预留一格"区分空/满策略 */
|
|
#define RS485_RX_BUFFER_SIZE 128
|
|
|
|
/**
|
|
* @brief 初始化 RS485 接口(USART0 PA9/PA10 + DE PA8)。
|
|
* @details 配置 GPIO 复用、DE 引脚推挽输出(默认接收态)、USART 参数、
|
|
* 接收非空中断(RBNE)与独立接收环形缓冲区。
|
|
*/
|
|
void rs485_init(void);
|
|
|
|
/**
|
|
* @brief RS485 阻塞发送。
|
|
* @details DE 置位进入发送态 → 逐字节发送(等待 TBE)→ 等待发送完成(TC)→
|
|
* DE 清零回到接收态。
|
|
* @param[in] data 待发送数据指针
|
|
* @param[in] len 发送字节数
|
|
*/
|
|
void rs485_send(const uint8_t *data, uint16_t len);
|
|
|
|
/**
|
|
* @brief RS485 主循环处理(拉通阶段:原样回显)。
|
|
* @details 从接收环形缓冲取字节并回发到 RS485,同时转发到 debug 串口。
|
|
* 在主循环中周期调用。
|
|
*/
|
|
void rs485_process(void);
|
|
|
|
/**
|
|
* @brief 获取当前 RS485 接收环形缓冲区可读字节数。
|
|
*/
|
|
uint8_t rs485_rx_available(void);
|
|
|
|
/**
|
|
* @brief 从 RS485 接收环形缓冲区读取一个字节。
|
|
* @return 读取到的字节(0..255),或 -1 表示缓冲区为空。
|
|
*/
|
|
int rs485_rx_get(void);
|
|
|
|
/**
|
|
* @brief USART0 接收中断处理(由 gd32f4xx_it.c 的 USART0_IRQHandler 调用)。
|
|
*/
|
|
void rs485_irq_handler(void);
|
|
|
|
#endif // RS485_H
|