// RTX.c #include "RTX.h" #include "main.h" #include "usart.h" // 必须引入USART1相关定义 #include "sbus.h" // 全局变量定义(和RTX.h的extern声明对应,只在这里定义一次) uint8_t rx_complete_flag = 0; uint8_t rx_buf[TRANSFER_LEN] = {0}; uint8_t tx_buf[TRANSFER_LEN] = {0}; Data_Type recv_values[DATA_COUNT] = {0}; Data_Type send_values[DATA_COUNT] = {0}; // 移到这里定义,避免main.c重复 extern uint8_t sbus_data_ready; extern uint8_t buf[25]; // 打包:8个uint16_t(0~3000)→ 16字节数组(小端模式,通用) void Pack_Values(Data_Type *values, uint8_t *buf, uint8_t count) { for (uint8_t i=0; i> 8) & 0xFF; // 高8位 } } // 解包:16字节数组 → 8个uint16_t(0~3000) void Unpack_Values(uint8_t *buf, Data_Type *values, uint8_t count) { for (uint8_t i=0; i 3000) values[i] = 3000; if (values[i] < 0) values[i] = 0; } } // DMA接收完成回调(16字节接收完成触发) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART2) { sbus_data_ready = 1; // ±ê??êy?Y?é?a?? // ??D????ˉDMA?óê? HAL_UART_Receive_DMA(&huart2,buf, 25); } }