3.27_433:实验并验证485发送数据透传至RF433模块,并在外部设备成功接收

- 新增协议识别器状态机,实现指令与透传数据的自动识别
This commit is contained in:
2026-03-27 19:58:20 +08:00
parent 268667e335
commit 0eea5c1424
71 changed files with 6051 additions and 2620 deletions

View File

@ -107,6 +107,13 @@ static bool report_enabled = true;
* @brief IO事件回调函数指针
* @note 设置后IO状态变化将通过回调函数上报
* 为NULL时使用默认的UART2_Print_String输出
*
* 回调函数原型:
* void callback(uint8_t channel, uint8_t state, const char *event_msg)
*
* 使用场景:
* - 需要将事件发送到其他端口时设置回调
* - 传入NULL恢复默认UART2输出方式
*/
static io_event_callback_t g_event_callback = NULL;
@ -129,17 +136,18 @@ static uint8_t calc_checksum(const char *data, uint8_t len);
/**
* @brief 发送DI状态变化事件
* @note 构造并发送ASCII格式的状态变化消息至UART2
* @note 构造并发送ASCII格式的状态变化消息
* 消息格式: $DI_EVENT,<channel>,<state>*<checksum>\r\n
* 如果设置了回调函数则通过回调发送否则发送到UART2
*
* @param channel: 通道编号从0开始计数(输入)
* @param state: 通道状态0=低电平1=高电平(输入)
* @return 无返回值
*
* 调用说明:
* - 此函数在状态变化被确认后调用,用于通知上位机或日志系统
* - 内部会调用calc_checksum计算校验和
* - 通过UART2_Print_String发送原始字符串
* 事件路由说明:
* 1. 始终通过MultiUART_SendString发送到UART1(RF433)端口
* 2. 如果设置了回调函数(g_event_callback),也通过回调发送
* 3. UART2仅用于调试日志输出
*/
static void send_di_event(uint8_t channel, uint8_t state);
@ -177,10 +185,10 @@ static uint8_t calc_checksum(const char *data, uint8_t len)
* @param state: 通道状态0=低电平1=高电平(输入)
* @return 无返回值
*
* 调用说明:
* - 此函数在状态变化被确认后调用,用于通知上位机或日志系统
* - 内部会调用calc_checksum计算校验和
* - 如果设置了回调函数则通过回调发送否则通过UART2_Print_String发送
* 事件路由说明:
* 1. 始终通过MultiUART_SendString发送到UART1(RF433)端口
* 2. 如果设置了回调函数(g_event_callback),也通过回调发送
* 3. UART2仅用于调试日志输出
*/
static void send_di_event(uint8_t channel, uint8_t state)
{
@ -198,14 +206,20 @@ static void send_di_event(uint8_t channel, uint8_t state)
/* 输出调试日志到UART2记录状态变化 */
DEBUG_LOG("CH%d -> %s", channel + 1, state ? "HIGH" : "LOW");
/* 向UART1(RF433)发送状态变化事件 */
/*----------------------------------------------------------
* 向UART1(RF433模块)发送状态变化事件
* 这是IO事件的主要路由通道用于无线上报到上位机
*----------------------------------------------------------*/
MultiUART_SendString(PORT_UART1, msg);
/* 输出完整消息到UART2方便调试查看 */
DEBUG_LOG("RF433 TX: \"%s\"", msg);
/* 如果设置了回调函数,也通过回调发送 */
/*----------------------------------------------------------
* 如果设置了回调函数,也通过回调发送
* 用于支持额外的自定义处理逻辑
*----------------------------------------------------------*/
if (g_event_callback != NULL) {
g_event_callback(channel, state, msg);
}