From 54293c1e73dd9eebe140ea9b85f50e9fc1edccc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Fri, 23 May 2025 10:36:28 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=85=88=E6=9A=82=E5=AD=98=EF=BC=8C?= =?UTF-8?q?=E5=87=86=E5=A4=87=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cproject | 477 +++++++++++------- ...kspace => ZBF_Master_ch584m.mrs-workspace} | 2 +- .mrs/launch.json | 8 +- .project | 67 ++- .template | 23 + .vscode/settings.json | 5 +- APP/multiCentral.c | 21 +- APP/multiCentral_main.c | 5 +- ZBF_Master_ch584m.launch | 62 +++ ..._CH584M.wvproj => ZBF_Master_ch584m.wvproj | Bin bsp/inc/bsp_uart.h | 12 +- bsp/inc/bsp_valve.h | 52 +- bsp/src/bsp_tim.c | 20 +- bsp/src/bsp_uart.c | 28 +- bsp/src/bsp_valve.c | 49 +- 15 files changed, 561 insertions(+), 270 deletions(-) rename .mrs/{BLE_TYQ_BJQ_CH584M.mrs-workspace => ZBF_Master_ch584m.mrs-workspace} (90%) create mode 100644 ZBF_Master_ch584m.launch rename BLE_TYQ_BJQ_CH584M.wvproj => ZBF_Master_ch584m.wvproj (100%) diff --git a/.cproject b/.cproject index fca4c0a..0a88c5f 100644 --- a/.cproject +++ b/.cproject @@ -1,174 +1,307 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace b/.mrs/ZBF_Master_ch584m.mrs-workspace similarity index 90% rename from .mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace rename to .mrs/ZBF_Master_ch584m.mrs-workspace index d15aa25..9198ead 100644 --- a/.mrs/BLE_TYQ_BJQ_CH584M.mrs-workspace +++ b/.mrs/ZBF_Master_ch584m.mrs-workspace @@ -4,7 +4,7 @@ "path": "." }, { - "name": "BLE_TYQ_BJQ_CH584M", + "name": "ZBF_Master_ch584m", "path": "../" } ], diff --git a/.mrs/launch.json b/.mrs/launch.json index f3acb26..0b07c05 100644 --- a/.mrs/launch.json +++ b/.mrs/launch.json @@ -4,8 +4,8 @@ { "type": "mrs-debugger", "request": "launch", - "name": "BLE_TYQ_BJQ_CH584M", - "cwd": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m", + "name": "ZBF_Master_ch584m", + "cwd": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m", "openOCDCfg": { "useLocalOpenOCD": true, "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", @@ -39,8 +39,8 @@ "additionalCommands": [] }, "loadedFiles": { - "executableFile": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m\\obj\\BLE_TYQ_BJQ_CH584M.elf", - "symbolFile": "d:\\SXDT\\Project\\CH32\\ble_-tyq_-bjq_-ch584-m\\obj\\BLE_TYQ_BJQ_CH584M.elf", + "executableFile": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m\\obj\\ZBF_Master_ch584m.elf", + "symbolFile": "d:\\SXDT\\Project\\HED\\zbf_master_ch584m\\obj\\ZBF_Master_ch584m.elf", "executableFileOffset": 0, "symbolFileOffset": 0 }, diff --git a/.project b/.project index 2aa28b2..47824a0 100644 --- a/.project +++ b/.project @@ -1,37 +1,34 @@ - BLE_TYQ_BJQ_CH584M - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - - - 1602468250279 - - 22 - - org.eclipse.ui.ide.multiFilter - 1.0-name-matches-false-false-*.wvproj - - - - + ZBF_Master_ch584m + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + + + 6 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-*.wvproj + + + + \ No newline at end of file diff --git a/.template b/.template index e69de29..da0444e 100644 --- a/.template +++ b/.template @@ -0,0 +1,23 @@ +Vendor=WCH +Toolchain=RISC-V +Series=CH32L103 +RTOS=NoneOS +MCU=CH32L103C8T6 +Link=WCH-Link +PeripheralVersion=1.0 +Description= +Mcu Type= +Address= +Target Path= +Exe Path= +Exe Arguments= +CLKSpeed=1 +DebugInterfaceMode=0 +Erase All=false +Program=false +Verify=false +Reset=false +SDIPrintf=false +Disable Power Output=false +Clear CodeFlash=false +Disable Code-Protect=false \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 38c6d82..051a531 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,9 +18,9 @@ } ], "files.associations": { + "*.dbclient-js": "javascript", "*.sqlbook": "sql", "*.ndjson": "jsonl", - "*.dbclient-js": "javascript", "config.h": "c", "ch58xble_lib.h": "c", "bsp_uart.h": "c", @@ -37,6 +37,7 @@ "bsp_flash.h": "c", "shell.h": "c", "ch58x_uart.h": "c", - "bsp_tim.h": "c" + "bsp_tim.h": "c", + "ch58x_common.h": "c" } } \ No newline at end of file diff --git a/APP/multiCentral.c b/APP/multiCentral.c index 34a3d8c..30147a7 100644 --- a/APP/multiCentral.c +++ b/APP/multiCentral.c @@ -18,6 +18,7 @@ #define MASTER_DETECT_EVT (0X01 << 3) uint8_t MasterCtrTaskId; +uint8_t bt_conncet_cnt = 0; /********************************************************************* * MACROS @@ -1252,15 +1253,17 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len) return -5; } + // //有效数据长度 size_t data_len = (datalength + 5); ret = data_len; - if (data[index + 1] == kCmdCloseVavle) // 0x02 代表了其是控制阀门响应 + if (data[index + 1] == 0x02) // 0x02 代表了其是控制阀门响应 { - // logDebug("BT 控制阀门响应包"); + logDebug("BT 控制阀门响应包"); + logHexDumpAll(data, len); if (data[index + datalength + 2] == 1) // 响应数据位 { - logInfo("关闭阀门成功"); + logInfo("BT 控制阀门成功"); } else { @@ -1272,8 +1275,14 @@ int BSP_Master_Receive_Data(uint8_t task_id, uint8_t *data, uint16_t len) logDebug("蓝牙从机心跳数据包:"); logHexDumpAll(data, data_len); } + else + { + logDebug("蓝牙从机数据包:"); + logHexDumpAll(data, len); + } // 到这一步说明数据没问题,将接收到的数据通过中心任务发送出去 uint8_t *p_data; + p_data = tmos_msg_allocate(data_len); if (p_data) { @@ -1337,6 +1346,12 @@ uint16_t Master_ProcessEvent(uint8_t task_id, uint16_t events) if (Flash_Get_Valve_Num()) { logDebug("有设备,尝试连接\r\n"); + bt_conncet_cnt++; + if (bt_conncet_cnt > 180) + { + bt_conncet_cnt = 0; + PFIC_SystemReset(); + } tmos_start_task(task_id, MASTER_CONNECT_EVT, 1600); } } diff --git a/APP/multiCentral_main.c b/APP/multiCentral_main.c index 97925fa..0619bfe 100644 --- a/APP/multiCentral_main.c +++ b/APP/multiCentral_main.c @@ -96,15 +96,12 @@ int main(void) logDebug("test log debug\n"); #endif + CH58x_BLEInit(); HAL_Init(); GAPRole_CentralInit(); Central_Init(); - logDebug("get_ticks %d", BSP_Get_Tick()); - DelayMs(2000); - logDebug("get_ticks %d", BSP_Get_Tick()); - BSP_FLASH_Init(); BSP_Valve_Init(); BSP_UART1_Init(); // BT UART diff --git a/ZBF_Master_ch584m.launch b/ZBF_Master_ch584m.launch new file mode 100644 index 0000000..22e6c4b --- /dev/null +++ b/ZBF_Master_ch584m.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BLE_TYQ_BJQ_CH584M.wvproj b/ZBF_Master_ch584m.wvproj similarity index 100% rename from BLE_TYQ_BJQ_CH584M.wvproj rename to ZBF_Master_ch584m.wvproj diff --git a/bsp/inc/bsp_uart.h b/bsp/inc/bsp_uart.h index 4ca0ade..a1cb70e 100644 --- a/bsp/inc/bsp_uart.h +++ b/bsp/inc/bsp_uart.h @@ -13,15 +13,25 @@ #include "CH58x_common.h" +// #define DEVICE_TYPE_TYQ_LY +#define DEVICE_TYPE_FXJB_LY + + #define BT_START_EVT (0X01 << 0) #define BT_REC_EVT (0X01 << 1) #define BT_INFO_UPDATA_EVT (0X01 << 2) #define BT_SEND_EVT (0X01 << 3)// #define BT_REC_EVT_FINISH (0X01 << 4) //接收完成事件 +#ifdef DEVICE_TYPE_TYQ_LY #define UART3_RX_PIN GPIO_Pin_20 //PB20 #define UART3_TX_PIN GPIO_Pin_21 // PB21 - +#endif +#ifdef DEVICE_TYPE_FXJB_LY +/*方形将本是PA4 PA5*/ +#define UART3_RX_PIN GPIO_Pin_4 //PA4 +#define UART3_TX_PIN GPIO_Pin_5 // PA5 +#endif #define BT_UART_TX_PIN GPIO_Pin_9 //PA9 #define BT_UART_RX_PIN GPIO_Pin_8 //PA8 diff --git a/bsp/inc/bsp_valve.h b/bsp/inc/bsp_valve.h index 7f9896b..7526f79 100644 --- a/bsp/inc/bsp_valve.h +++ b/bsp/inc/bsp_valve.h @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-12-09 11:40:04 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-04-22 13:19:22 - * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_valve.h + * @LastEditTime: 2025-05-23 10:34:57 + * @FilePath: \zbf_master_ch584m\bsp\inc\bsp_valve.h * @Description: * @ * @Copyright (c) 2025 by ${git_name_email}, All Rights Reserved. @@ -27,16 +27,27 @@ typedef enum { - kValveCmdCtr = 0X01, - kValveCmdReg, - kValveCmdRem, - kValveCmdRep, - kValveCmdRemAll,//移除所有的阀门地址 - kValveEventStatus,//阀门状态包 - kValveConncetStatus,//阀门状态包 - kValveCmdMax, -} ValveCmdType; + kValveCmdCtr = 0X01, // 控制命令 + kValveCmdReg, // 注册命令 + kValveCmdRem, // 移除命令 + kValveCmdRep, // 替换命令 + kValveCmdRemAll, // 移除所有的阀门地址 + kValveEventStatus, // 阀门状态包 + kValveConncetStatus, // 阀门连接状态 + kValveCmdOverPressure, // 超压关阀 + kValveCmdUnderPressure, // 欠压关阀 + kValveCmdOverCurrent, // 过流关阀 + kValveCmdMicroLeak, // 微漏关阀 + kValveCmdTimer, // 定时关阀 + kValveCmdOpenWithStove, // 开灶开阀 + kValveCmdCloseWithStove, // 关灶关阀 + kValveCmdOverTemperature, // 超温关阀 + kValveCmdDelayClose, // 延时关阀 + kValveCmdManualClose, // 手动关阀 + + kValveCmdMax, // 枚举最大值 +} ValveCmdType; typedef enum { WirelessValveClose = 0x01, @@ -57,6 +68,16 @@ typedef enum kCmdCloseVavle, kCmdOpenVavle, kCmdData, + kValveCmdOverPressure, // 超压关阀 + kValveCmdUnderPressure, // 欠压关阀 + kValveCmdOverCurrent, // 过流关阀 + kValveCmdMicroLeak, // 微漏关阀 + kValveCmdTimer, // 定时关阀 + kValveCmdOpenWithStove, // 开灶开阀 + kValveCmdCloseWithStove, // 关灶关阀 + kValveCmdOverTemperature, // 超温关阀 + kValveCmdDelayClose, // 延时关阀 + kValveCmdManualClose, // 手动关阀 } TeFrameCmd; /* @@ -69,7 +90,7 @@ typedef enum 无线调压阀出口压力 无线调压阀大气压 */ -struct __attribute__((packed)) valve_data +typedef struct __attribute__((packed)) { uint8_t valve_id; uint8_t valve_mac[6]; @@ -80,12 +101,15 @@ struct __attribute__((packed)) valve_data uint32_t valve_out_pressure; uint32_t valve_atm_pressure; uint8_t valve_type; -}; + uint8_t valve_bat; + uint8_t valve_hum;//阀门湿度 + int8_t valve_rssi;//阀门rssi +}valve_data; typedef struct valve_data_list { uint8_t valve_num; - struct valve_data valve_data[MAX_VALVE_NUM]; + valve_data valve_data[MAX_VALVE_NUM]; } valve_data_list_t; extern valve_data_list_t valve_list; diff --git a/bsp/src/bsp_tim.c b/bsp/src/bsp_tim.c index 3582b35..7c782bb 100644 --- a/bsp/src/bsp_tim.c +++ b/bsp/src/bsp_tim.c @@ -11,7 +11,7 @@ #include "bsp_tim.h" #include "HAL.h" -volatile uint32_t tick_1ms_cnt = 0; +// volatile uint32_t tick_1ms_cnt = 0; /** * @description: @@ -25,15 +25,15 @@ uint32_t BSP_Get_Tick(void) } -__INTERRUPT -__HIGH_CODE -void SysTick_Handler() -{ - static uint8_t cnt_ms = 0; +// __INTERRUPT +// __HIGH_CODE +// void SysTick_Handler() +// { +// static uint8_t cnt_ms = 0; - SysTick->SR = 0; - tick_1ms_cnt++; +// SysTick->SR = 0; +// tick_1ms_cnt++; - cnt_ms++; -} +// cnt_ms++; +// } diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c index 2fd4294..5b1618f 100644 --- a/bsp/src/bsp_uart.c +++ b/bsp/src/bsp_uart.c @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-12-06 16:52:30 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-04-22 15:16:57 - * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c + * @LastEditTime: 2025-05-23 10:35:36 + * @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c * @Description: * * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. @@ -167,11 +167,11 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) switch (data[index + 2]) { case kValveCmdCtr: - logDebug("recv cmd: 0x01, 执行的动作是关闭阀门"); + ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength); break; case kValveCmdReg: - logDebug("recv cmd: 0x02, 执行的动作是注册阀门"); + ret = BSP_Bt_Register_Valve(&data_buf[0], datalength); if (ret == 0) { @@ -237,7 +237,6 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t pRawData->buf[1] = src_len; tmos_memcpy(&pRawData->buf[2], p_src, src_len); - // 从帧起始符开始到校验码之前所有字节的和的模256 // ,即各字节不计超过255的溢出值的二进制算术和。 pRawData->buf[pRawData->len - 2] = _CheckSum(&pRawData->buf[0], pRawData->len - 2); @@ -308,6 +307,7 @@ uint16_t BSP_Send_Process(uint8_t *pdata) BSP_Bt_Valve_Resp(kValveCmdCtr, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); break; case kCmdOpenVavle: + BSP_Bt_Valve_Resp(kValveCmdCtr, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); break; case kCmdData: valve_list.valve_data[0].valve_connct_status = 1; @@ -324,8 +324,10 @@ uint16_t BSP_Send_Process(uint8_t *pdata) BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE); } break; + //TODO:待完成从机的一些主动上报信息解析 + case default: - logError("不支持的命令: %d", master_rx_buf[1]); + logError("不支持的从机命令: %d", master_rx_buf[1]); break; } @@ -369,7 +371,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events) } else if (events & BT_REC_EVT) { - logDebug("BT_REC_EVT"); + // logDebug("BT_REC_EVT"); if (bt_recv_end_flag) { bt_recv_end_flag = 0; @@ -420,12 +422,22 @@ void BSP_UART1_Init(void) /*调试接口*/ void BSP_UART3_Init(void) { - GPIOPinRemap(ENABLE, RB_PIN_UART3); +#ifdef DEVICE_TYPE_TYQ_LY + GPIOPinRemap(ENABLE, RB_PIN_UART3); /* 配置串口3:先配置IO口模式,再配置串口 */ GPIOB_SetBits(UART3_TX_PIN); GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入 GPIOB_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平 +#endif +#ifdef DEVICE_TYPE_FXJB_LY + /* 配置串口3:先配置IO口模式,再配置串口 */ + GPIOA_SetBits(UART3_TX_PIN); + GPIOA_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入 + GPIOA_ModeCfg(UART3_TX_PIN, GPIO_ModeOut_PP_5mA); // TXD-配置推挽输出,注意先让IO口输出高电平 +#endif + UART3_DefInit(); + UART3_BaudRateCfg(460800); UART3_ByteTrigCfg(UART_1BYTE_TRIG); // 中断方式接收数据 diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c index 648e8e6..08d74c1 100644 --- a/bsp/src/bsp_valve.c +++ b/bsp/src/bsp_valve.c @@ -51,10 +51,10 @@ uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const u return 0; } -int BSP_Valve_Close(uint8_t valve_id) +int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd) { uint8_t num = Flash_Get_Valve_Num(); - uint8_t valve_ctr_valve = WirelessValveClose; + uint8_t valve_ctr_valve = cmd; if ((valve_id > 8) && (num == 0)) { logError("BSP_Valve_Close: valve id error"); @@ -63,13 +63,20 @@ int BSP_Valve_Close(uint8_t valve_id) } logDebug("BSP_Valve_Close: valve id: %d", valve_id); // TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应,如果接收到响应是关闭状态0x01,则返回成功,否则失败 - - Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1); + if (cmd == kCmdCloseVavle) + { + Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1); + } + else + { + Valve_GenerateRawFrame(&valve_frame_data, kCmdOpenVavle, &valve_ctr_valve, 1); + } + return BSP_Master_Send(centralConnList, CONNECT0_ITEM, &valve_frame_data.buf[0], valve_frame_data.len); } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), - BSP_Valve_Close, BSP_Valve_Close, "valve_id:CONNECT0_ITEM = 0"); + BSP_Valve_Ctr, BSP_Valve_Ctr, "valve_id: 0, close: 0x01, open :0x02"); /*用于控制阀门的状态 * id: 1-8 @@ -95,13 +102,25 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len) return -2; } - /*如果到这里了,说明ID和MAC地址对应没问题,则关闭对应阀门*/ - return BSP_Valve_Close(data[0]); + /*如果到这里了,说明ID和MAC地址对应没问题,则控制对应阀门*/ + if (data[7] == WirelessValveClose) + { + logDebug("recv cmd: 0x01, 执行的动作是关闭阀门"); + return BSP_Valve_Ctr(data[0], kCmdCloseVavle); + } + else if (data[7] == WirelessValveOpen) + { + logDebug("recv cmd: 0x02, 执行的动作是打开阀门"); + return BSP_Valve_Ctr(data[0], kCmdOpenVavle); + } + logDebug("data[7] = %#x", data[7]); + return -1; } /*注册阀门信息*/ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len) { + logDebug("recv cmd: 0x02, 执行的动作是注册阀门"); uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0}; if ((data[0] >= 1) && (data[0] <= 8)) @@ -266,8 +285,7 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len) void BSP_Bt_Valve_Updata(void) { uint8_t cnt = 0; - __attribute__((aligned(4))) - uint8_t mac[6] = {0}; + uint8_t mac[6] = {0}; uint8_t num = Flash_Get_Valve_Num(); logInfo("BSP_Bt_Valve_Updata num: %d ", num); @@ -275,7 +293,6 @@ void BSP_Bt_Valve_Updata(void) { return; } - tmos_memset(&valve_list, 0, sizeof(valve_data_list_t)); for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来 @@ -305,11 +322,11 @@ void BSP_Bt_Valve_Updata(void) } -//蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态吗,具体参考对应的case +//蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态码,具体参考对应的case int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) { uint8_t ret = 0; - BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(struct valve_data)); + BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(valve_data)); ptr->cmd = cmd; switch (cmd) { @@ -319,16 +336,16 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) case kValveCmdRep: ptr->buf[0] = id; tmos_memcpy(&ptr->buf[1], mac_addr, 6); - ptr->buf[7] = state; - BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9); + ptr->buf[26] = state; + BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 28); break; case kValveCmdRemAll: ptr->buf[0] = state; BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 2); break; case kValveEventStatus: - tmos_memcpy(&ptr->buf[0], &valve_list.valve_data[id - 1], sizeof(struct valve_data)); - BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, sizeof(struct valve_data)); + tmos_memcpy(&ptr->buf[0], &valve_list.valve_data[id - 1], sizeof(valve_data)); + BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, sizeof(valve_data)); break; case kValveConncetStatus: ptr->buf[0] = id; From 4742154d0e81b7fa7fa2ffc69ae0de5d7520717a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Fri, 23 May 2025 11:11:18 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=86=99=E4=BA=86=E8=87=AA=E9=97=AD?= =?UTF-8?q?=E5=8F=91=E7=9A=84=E4=B8=80=E4=BA=9B=E4=BA=8B=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/inc/bsp_valve.h | 30 ++++++++--------- bsp/src/bsp_uart.c | 82 +++++++++++++++++++++++++++++++++------------ bsp/src/bsp_valve.c | 64 +++++++++++++++++++---------------- 3 files changed, 111 insertions(+), 65 deletions(-) diff --git a/bsp/inc/bsp_valve.h b/bsp/inc/bsp_valve.h index 7526f79..f66ceb5 100644 --- a/bsp/inc/bsp_valve.h +++ b/bsp/inc/bsp_valve.h @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-09 11:40:04 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-05-23 10:34:57 + * @LastEditTime: 2025-05-23 11:01:23 * @FilePath: \zbf_master_ch584m\bsp\inc\bsp_valve.h * @Description: * @ @@ -65,19 +65,19 @@ typedef enum typedef enum { kCmdCfg = 0X01, - kCmdCloseVavle, - kCmdOpenVavle, - kCmdData, - kValveCmdOverPressure, // 超压关阀 - kValveCmdUnderPressure, // 欠压关阀 - kValveCmdOverCurrent, // 过流关阀 - kValveCmdMicroLeak, // 微漏关阀 - kValveCmdTimer, // 定时关阀 - kValveCmdOpenWithStove, // 开灶开阀 - kValveCmdCloseWithStove, // 关灶关阀 - kValveCmdOverTemperature, // 超温关阀 - kValveCmdDelayClose, // 延时关阀 - kValveCmdManualClose, // 手动关阀 + kCmdCloseVavle, //关阀 + kCmdOpenVavle,//开阀 + kCmdData,//命令数据(心跳数据) + kRespOverPressure, // 超压关阀 + kRespUnderPressure, // 欠压关阀 + kRespOverCurrent, // 过流关阀 + kRespMicroLeak, // 微漏关阀 + kRespTimer, // 定时关阀 + kRespOpenWithStove, // 开灶开阀 + kRespCloseWithStove, // 关灶关阀 + kRespOverTemperature, // 超温关阀 + kRespDelayClose, // 延时关阀 + kRespManualClose, // 手动关阀 } TeFrameCmd; /* @@ -121,6 +121,6 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len); int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len); void BSP_Bt_Valve_Updata(void); int BSP_Bt_Remove_All_Valve(void); -int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state); +int BSP_Bt_Valve_Resp(ValveCmdType cmd, uint8_t id, uint8_t *mac_addr, uint8_t state); #endif // ! __BSP_VALVE_H__ diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c index 5b1618f..b4115c0 100644 --- a/bsp/src/bsp_uart.c +++ b/bsp/src/bsp_uart.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-06 16:52:30 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-05-23 10:35:36 + * @LastEditTime: 2025-05-23 11:05:49 * @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c * @Description: * @@ -30,7 +30,7 @@ #define UART3_TX_BUFFER_LENGTH 2048U uint8_t bt_recv_start_flag = 0; -uint8_t bt_recv_end_flag = 0; +uint8_t bt_recv_end_flag = 0; lwrb_t uart1_rx_t; lwrb_t uart1_tx_t; uint8_t uart1_tx_buf[UART1_TX_BUFFER_LENGTH] = {0}; @@ -167,11 +167,11 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) switch (data[index + 2]) { case kValveCmdCtr: - + ret = BSP_Bt_Valve_Ctr(&data_buf[0], datalength); break; case kValveCmdReg: - + ret = BSP_Bt_Register_Valve(&data_buf[0], datalength); if (ret == 0) { @@ -183,7 +183,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) } break; case kValveCmdRem: - logDebug("recv cmd: 0x03, 执行的动作是移除阀门"); + logDebug("recv cmd: 0x03, 移除阀门"); ret = BSP_Bt_Remove_Valve(&data_buf[0], datalength); if (ret == 0) { @@ -195,7 +195,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) } break; case kValveCmdRep: - logDebug("recv cmd: 0x04, 执行的动作是更换阀门"); + logDebug("recv cmd: 0x04, 更换阀门"); ret = BSP_Bt_Replace_Valve(&data_buf[0], datalength); if (ret == 0) { @@ -207,7 +207,7 @@ int BSP_Bt_Process(uint8_t *data, uint16_t len) } break; case kValveCmdRemAll: - logDebug("recv cmd: 0x04, 执行的动作是移除所有阀门信息"); + logDebug("recv cmd: 0x04, 移除所有阀门信息"); ret = BSP_Bt_Remove_All_Valve(); if (ret == 0) { @@ -257,7 +257,7 @@ uint8_t BT_GenerateRawFrame(BTFrameData *pRawData, const uint8_t *p_src, uint8_t uint16_t BSP_Send_Process(uint8_t *pdata) { int8_t ret = 0; - __attribute__((aligned(4))) uint8_t master_rx_buf[64] = {0}; + uint8_t master_rx_buf[64] = {0}; uint8_t found_frame_start = 0; uint8_t *frame_start = NULL; @@ -312,26 +312,66 @@ uint16_t BSP_Send_Process(uint8_t *pdata) case kCmdData: valve_list.valve_data[0].valve_connct_status = 1; tmos_memcpy(&valve_list.valve_data[0].valve_switch_status, &master_rx_buf[3], master_rx_buf[2]); - + if ((bt_connect_flag != 1) && (valve_list.valve_data[0].valve_connct_status == 1)) { bt_connect_flag = 1; logDebug("阀门连接成功"); - BSP_Bt_Valve_Resp(kValveConncetStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE);//表示连接成功 + BSP_Bt_Valve_Resp(kValveConncetStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE); // 表示连接成功 } else { BSP_Bt_Valve_Resp(kValveEventStatus, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, TRUE); } break; - //TODO:待完成从机的一些主动上报信息解析 - case + // TODO:待完成从机的一些主动上报信息解析 + case kRespOverPressure: + logDebug("阀门超压关阀"); + BSP_Bt_Valve_Resp(kValveCmdOverPressure, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespUnderPressure: + logDebug("阀门欠压关阀"); + + BSP_Bt_Valve_Resp(kValveCmdUnderPressure, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespOverCurrent: + logDebug("阀门过流关阀"); + BSP_Bt_Valve_Resp(kValveCmdOverCurrent, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespMicroLeak: + logDebug("阀门微漏关阀"); + BSP_Bt_Valve_Resp(kValveCmdMicroLeak, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespTimer: + logDebug("阀门定时关阀"); + BSP_Bt_Valve_Resp(kValveCmdTimer, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespOpenWithStove: + logDebug("开灶关阀"); + BSP_Bt_Valve_Resp(kValveCmdOpenWithStove, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespCloseWithStove: + logDebug("关灶关阀"); + BSP_Bt_Valve_Resp(kValveCmdCloseWithStove, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespOverTemperature: + logDebug("阀门超温关阀"); + BSP_Bt_Valve_Resp(kValveCmdOverTemperature, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespDelayClose: + logDebug("阀门延时关闭"); + BSP_Bt_Valve_Resp(kValveCmdDelayClose, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; + case kRespManualClose: + logDebug("阀门手动关闭"); + BSP_Bt_Valve_Resp(kValveCmdManualClose, valve_list.valve_data[0].valve_id, valve_list.valve_data[0].valve_mac, master_rx_buf[3]); + break; default: logError("不支持的从机命令: %d", master_rx_buf[1]); break; } - - return 0; + + return 0; } uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events) @@ -363,7 +403,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events) if (bt_recv_start_flag) { bt_recv_start_flag = 0; - bt_recv_end_flag = 1; + bt_recv_end_flag = 1; tmos_start_task(task_id, BT_REC_EVT, 100); } tmos_start_task(task_id, BT_REC_EVT_FINISH, 50); @@ -375,7 +415,7 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events) if (bt_recv_end_flag) { bt_recv_end_flag = 0; - int len = lwrb_get_full(&uart1_rx_t); + int len = lwrb_get_full(&uart1_rx_t); if (len > 0) { __attribute__((aligned(4))) uint8_t buf[256] = {0}; @@ -423,7 +463,7 @@ void BSP_UART1_Init(void) void BSP_UART3_Init(void) { #ifdef DEVICE_TYPE_TYQ_LY - GPIOPinRemap(ENABLE, RB_PIN_UART3); + GPIOPinRemap(ENABLE, RB_PIN_UART3); /* 配置串口3:先配置IO口模式,再配置串口 */ GPIOB_SetBits(UART3_TX_PIN); GPIOB_ModeCfg(UART3_RX_PIN, GPIO_ModeIN_PU); // RXD-配置上拉输入 @@ -468,10 +508,10 @@ void UART1_IRQHandler(void) break; } case UART_II_RECV_RDY: - case UART_II_RECV_TOUT: // 接收数据 - if ((bt_recv_start_flag == 0)&&(bt_recv_end_flag == 0))//用于检测是否是开始接收数据 + case UART_II_RECV_TOUT: // 接收数据 + if ((bt_recv_start_flag == 0) && (bt_recv_end_flag == 0)) // 用于检测是否是开始接收数据 { - bt_recv_start_flag = 1; + bt_recv_start_flag = 1; } while (R8_UART1_RFC) { @@ -583,7 +623,7 @@ int reboot(void) { PFIC_SystemReset(); - return 0; + return 0; } SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC), reboot, reboot, "reboot"); diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c index 08d74c1..44eae44 100644 --- a/bsp/src/bsp_valve.c +++ b/bsp/src/bsp_valve.c @@ -2,8 +2,8 @@ * @Author: mbw * @Date: 2024-12-09 11:40:10 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-04-22 15:15:24 - * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c + * @LastEditTime: 2025-05-23 11:08:46 + * @FilePath: \zbf_master_ch584m\bsp\src\bsp_valve.c * @Description: * * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. @@ -14,7 +14,6 @@ #include "bsp_uart.h" #include "multiCentral.h" - /* 接收的蓝牙从机info: 接收数据帧格式: 帧头 + 命令 + 数据长度 + 心跳数据包 + 校验码 + 帧尾 @@ -29,7 +28,6 @@ valve_data_list_t valve_list = {0}; BTFrameData valve_frame_data = {0}; - uint8_t Valve_GenerateRawFrame(BTFrameData *pRawData, const uint8_t cmd, const uint8_t *p_src, uint8_t src_len) { pRawData->len = src_len + 5; @@ -62,7 +60,6 @@ int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd) return -1; } logDebug("BSP_Valve_Close: valve id: %d", valve_id); - // TODO:检查是否连接, 如果连接,则发送数据,将关闭阀门指令发送过去,然后等待数据接收响应,如果接收到响应是关闭状态0x01,则返回成功,否则失败 if (cmd == kCmdCloseVavle) { Valve_GenerateRawFrame(&valve_frame_data, kCmdCloseVavle, &valve_ctr_valve, 1); @@ -71,7 +68,6 @@ int BSP_Valve_Ctr(uint8_t valve_id, const uint8_t cmd) { Valve_GenerateRawFrame(&valve_frame_data, kCmdOpenVavle, &valve_ctr_valve, 1); } - return BSP_Master_Send(centralConnList, CONNECT0_ITEM, &valve_frame_data.buf[0], valve_frame_data.len); } @@ -105,7 +101,7 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len) /*如果到这里了,说明ID和MAC地址对应没问题,则控制对应阀门*/ if (data[7] == WirelessValveClose) { - logDebug("recv cmd: 0x01, 执行的动作是关闭阀门"); + logDebug("recv cmd: 0x01, 执行的动作是关闭阀门"); return BSP_Valve_Ctr(data[0], kCmdCloseVavle); } else if (data[7] == WirelessValveOpen) @@ -156,8 +152,8 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len) return 3; } else - { - uint8_t num = Flash_Get_Valve_Num(); + { + uint8_t num = Flash_Get_Valve_Num(); Flash_Set_Valve_Num(num + 1); BSP_Bt_Valve_Updata(); // 更新阀门信息 } @@ -176,7 +172,7 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) { size_t i = 0; uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0}; - if ((data[0] >= 1) && (data[0] <= 8))// 判断是否是正确的ID + if ((data[0] >= 1) && (data[0] <= 8)) // 判断是否是正确的ID { Flash_Get_Mac_Addr(mac_addr, data[0]); } @@ -186,10 +182,10 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) logHexDumpAll(data, len); return -1; } - if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) != TRUE)// 判断是否是相同的MAC地址 + if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) != TRUE) // 判断是否是相同的MAC地址 { logError("mac addr error"); - logHexDumpAll(data, len); + logHexDumpAll(data, len); return -2; } else @@ -198,10 +194,10 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) if (Flash_Set_Mac_Addr(mac_addr, data[0]) != 0) // 清空掉对应位置MAC数据 { logError("移除阀门信息失败"); - logHexDumpAll(data, len); + logHexDumpAll(data, len); return -2; } - uint8_t num = Flash_Get_Valve_Num(); + uint8_t num = Flash_Get_Valve_Num(); if (Flash_Set_Valve_Num(num - 1) != 0) // 移除一个阀门 { logError("移除阀门信息失败"); @@ -219,8 +215,8 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) int BSP_Bt_Remove_All_Valve(void) { uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0}; - uint8_t num = Flash_Get_Valve_Num(); - if(num == 0) + uint8_t num = Flash_Get_Valve_Num(); + if (num == 0) { logError("没有找到任何阀门信息"); return 0; @@ -248,7 +244,7 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len) uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0}; logDebug("更换阀门信息:"); logHexDumpAll(data, len); - if ((len == 0) || (len < 13))//新旧MAC地址长度加id 6 + 6 + 1 = 13至少要大于12 + if ((len == 0) || (len < 13)) // 新旧MAC地址长度加id 6 + 6 + 1 = 13至少要大于12 { logError("data len error"); return -1; @@ -269,14 +265,14 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len) } else { - //新阀门数据在前 + // 新阀门数据在前 if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0) { logError("阀门注册写入flash 错误"); return 3; } BSP_Bt_Valve_Updata(); // 更新阀门信息 - Master_DisConnect();//更新后先断联接 + Master_DisConnect(); // 更新后先断联接 } return 0; } @@ -285,16 +281,16 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len) void BSP_Bt_Valve_Updata(void) { uint8_t cnt = 0; - uint8_t mac[6] = {0}; + uint8_t mac[6] = {0}; - uint8_t num = Flash_Get_Valve_Num(); + uint8_t num = Flash_Get_Valve_Num(); logInfo("BSP_Bt_Valve_Updata num: %d ", num); if (num == 0) { return; } tmos_memset(&valve_list, 0, sizeof(valve_data_list_t)); - + for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来 { if (Flash_Get_Mac_Addr(valve_list.valve_data[cnt].valve_mac, i) == 0) // 说明有MAC数据 @@ -319,11 +315,10 @@ void BSP_Bt_Valve_Updata(void) } } Flash_Set_Valve_Num(valve_list.valve_num); - } -//蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态码,具体参考对应的case -int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) +// 蓝牙主机对报警器的响应函数。 state表示此对应的项目,可能是执行成功与否,可能是蓝牙连接状态码,具体参考对应的case +int BSP_Bt_Valve_Resp(ValveCmdType cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) { uint8_t ret = 0; BtData_t *ptr = (BtData_t *)tmos_msg_allocate(sizeof(valve_data)); @@ -334,6 +329,16 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) case kValveCmdReg: case kValveCmdRem: case kValveCmdRep: + // TODO:待完成从机的一些主动上报信息解析 + case kValveCmdOverPressure: + case kValveCmdUnderPressure: + case kValveCmdOverCurrent: + case kValveCmdMicroLeak: + case kValveCmdTimer: + case kValveCmdOpenWithStove: + case kValveCmdCloseWithStove: + case kValveCmdOverTemperature: + case kValveCmdDelayClose: ptr->buf[0] = id; tmos_memcpy(&ptr->buf[1], mac_addr, 6); ptr->buf[26] = state; @@ -350,10 +355,11 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) case kValveConncetStatus: ptr->buf[0] = id; tmos_memcpy(&ptr->buf[1], mac_addr, 6); - ptr->buf[7] = state; //0表示断开,1表示连接 - logDebug("连接状态:%d", ptr->buf[7]); - BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9); + ptr->buf[7] = state; // 0表示断开,1表示连接 + logDebug("连接状态:%d", ptr->buf[7]); + BT_GenerateRawFrame(&valve_frame_data, (uint8_t *)ptr, 9); break; + default: break; } @@ -367,7 +373,7 @@ int BSP_Bt_Valve_Resp(uint8_t cmd, uint8_t id, uint8_t *mac_addr, uint8_t state) return -1; } - + void BSP_Valve_Init(void) { logDebug("BSP_Valve_Init"); From b359ca31ba23eac16a4689edfc57bbc833547ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC=5F666?= <13089258+pony-six-hundred-and-sixty-six@user.noreply.gitee.com> Date: Fri, 23 May 2025 11:11:21 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/src/bsp_uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c index b4115c0..eaa647d 100644 --- a/bsp/src/bsp_uart.c +++ b/bsp/src/bsp_uart.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-06 16:52:30 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2025-05-23 11:05:49 + * @LastEditTime: 2025-05-23 11:11:18 * @FilePath: \zbf_master_ch584m\bsp\src\bsp_uart.c * @Description: *