From 29bfea488dbc10f7fc39bfbeb9ca3e75fe2591a9 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: Thu, 2 Jan 2025 13:42:24 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E4=BA=86=E5=92=8C=E6=8A=A5?= =?UTF-8?q?=E8=AD=A6=E5=99=A8=E7=AB=AF=E7=9A=84=E4=BA=A4=E4=BA=92=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/multiCentral.c | 2 -- bsp/inc/bsp_uart.h | 3 ++- bsp/src/bsp_flash.c | 25 +++++++++++-------------- bsp/src/bsp_uart.c | 41 +++++++++++++++++++++++++++++++---------- bsp/src/bsp_valve.c | 37 +++++++++++++++++++++++-------------- 5 files changed, 67 insertions(+), 41 deletions(-) diff --git a/APP/multiCentral.c b/APP/multiCentral.c index b915645..f9bde8c 100644 --- a/APP/multiCentral.c +++ b/APP/multiCentral.c @@ -1148,10 +1148,8 @@ int BSP_Master_Send(centralConnItem_t *centralConnList, uint8_t id, uint8_t *Dat if (centralConnList[id].state == BLE_STATE_CONNECTED) // 检查连接状态是否为连接状态 { - logDebug("BLE_STATE_CONNECTED"); if (centralConnList[id].procedureInProgress == FALSE) { - logDebug("FALSE"); req.cmd = FALSE; req.sig = FALSE; req.handle = centralConnList[id].charHd3; diff --git a/bsp/inc/bsp_uart.h b/bsp/inc/bsp_uart.h index dada383..0d032f9 100644 --- a/bsp/inc/bsp_uart.h +++ b/bsp/inc/bsp_uart.h @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-06 16:52:29 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-14 14:51:37 + * @LastEditTime: 2025-01-02 11:22:39 * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\inc\bsp_uart.h * @Description: * @ @@ -17,6 +17,7 @@ #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) //接收完成事件 #define UART3_RX_PIN GPIO_Pin_20 //PB20 #define UART3_TX_PIN GPIO_Pin_21 // PB21 diff --git a/bsp/src/bsp_flash.c b/bsp/src/bsp_flash.c index d783e6b..4d9ec29 100644 --- a/bsp/src/bsp_flash.c +++ b/bsp/src/bsp_flash.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-06 14:49:21 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-17 09:36:33 + * @LastEditTime: 2025-01-02 13:18:15 * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_flash.c * @Description: 主要用于对一些MAC地址等关键信息进行保存和读取操作 * @@ -36,7 +36,7 @@ int Flash_Write_ConfigInfo(uint8_t *page_buf) int Flash_Set_Mac_Addr(uint8_t *mac_addr, uint8_t number) { uint8_t page_buf[DATA_FLASH_PAGE_SIZE] = {0}; - uint8_t in_page_offset = ((FLASH_MAC_1_ADDR + number * FLASH_MAC_INFO_LEN) - FLASH_MAC_INFO_START_ADDR); + uint8_t in_page_offset = ((FLASH_MAC_INFO_START_ADDR + (number - 1) * FLASH_MAC_INFO_LEN) - FLASH_MAC_INFO_START_ADDR); if ((mac_addr == NULL)||( number > MAX_VALVE_NUM)) { return -1; @@ -53,17 +53,9 @@ int Flash_Set_Mac_Addr(uint8_t *mac_addr, uint8_t number) int Flash_Get_Mac_Addr(uint8_t *mac_addr, uint8_t number) { __attribute__((aligned(4))) - uint8_t data[FLASH_MAC_INFO_LEN + 2]; // 读写buf需要4字节对齐 - EEPROM_READ((FLASH_MAC_INFO_START_ADDR + number * FLASH_MAC_INFO_LEN), data, FLASH_MAC_INFO_LEN); - if (tmos_isbufset(data, 0xFF, FLASH_MAC_INFO_LEN)) - { - logDebug("MAC地址为空,请先配网"); - tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN); - return -1; - } - - tmos_memcpy(mac_addr, data, FLASH_MAC_INFO_LEN); - + uint8_t data[FLASH_MAC_INFO_LEN]; // 读写buf需要4字节对齐 + EEPROM_READ((FLASH_MAC_INFO_START_ADDR + (number - 1) * FLASH_MAC_INFO_LEN), mac_addr, FLASH_MAC_INFO_LEN); + DelayMs(2); return 0; } @@ -75,14 +67,17 @@ int Flash_Set_Valve_Num(uint8_t valve_num) uint8_t in_page_offset = (FLASH_MAC_NUM_ADDR - FLASH_INFO_ADDR); Flash_ErasePage_ReadConfigInfo(page_buf); page_buf[in_page_offset] = valve_num; + return Flash_Write_ConfigInfo(page_buf); } + /*获取无线调压器数量*/ uint8_t Flash_Get_Valve_Num(void) { uint8_t num; EEPROM_READ(FLASH_MAC_NUM_ADDR, &num, FLASH_MAC_NUM_LEN); + DelayMs(2); if (num != 0xFF) { return num; @@ -91,18 +86,20 @@ uint8_t Flash_Get_Valve_Num(void) { return 0; } - } void BSP_FLASH_Init(void) { uint32_t flash_write_flag = 0; EEPROM_READ(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN); + DelayMs(2); if (flash_write_flag != FLASH_INFO_WRITE_FLAG_VAL) // 用以防止刷掉写入的数据 { flash_write_flag = FLASH_INFO_WRITE_FLAG_VAL; // 擦除数据 EEPROM_ERASE(FLASH_INFO_ADDR, DATA_FLASH_PAGE_SIZE); // 擦除待写区 + DelayMs(2); EEPROM_WRITE(FLASH_INFO_WRITE_FLAG_ADDR, &flash_write_flag, FLASH_INFO_WRITE_FLAG_LEN); + DelayMs(2); } } diff --git a/bsp/src/bsp_uart.c b/bsp/src/bsp_uart.c index 5b12461..7f323de 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: 2024-12-17 14:17:49 + * @LastEditTime: 2025-01-02 11:38:30 * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_uart.c * @Description: * @@ -29,6 +29,8 @@ #define UART3_RX_BUFFER_LENGTH 1024U #define UART3_TX_BUFFER_LENGTH 2048U +uint8_t bt_recv_start_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}; @@ -324,24 +326,39 @@ uint16_t BT_ProcessEvent(uint8_t task_id, uint16_t events) { lwrb_reset(&uart1_rx_t); lwrb_reset(&uart1_tx_t); - tmos_start_task(task_id, BT_REC_EVT, 800); + tmos_start_task(task_id, BT_REC_EVT_FINISH, 100); return (events ^ BT_START_EVT); } + else if (events & BT_REC_EVT_FINISH) + { + if (bt_recv_start_flag) + { + bt_recv_start_flag = 0; + bt_recv_end_flag = 1; + tmos_start_task(task_id, BT_REC_EVT, 100); + } + tmos_start_task(task_id, BT_REC_EVT_FINISH, 50); + return (events ^ BT_REC_EVT_FINISH); + } else if (events & BT_REC_EVT) { - int len = lwrb_get_full(&uart1_rx_t); - if (len > 0) + logDebug("BT_REC_EVT"); + if (bt_recv_end_flag) { - __attribute__((aligned(4))) uint8_t buf[256] = {0}; - lwrb_read(&uart1_rx_t, buf, len); - ret = BSP_Bt_Process(buf, len); - if (ret != 0) + bt_recv_end_flag = 0; + int len = lwrb_get_full(&uart1_rx_t); + if (len > 0) { - logError("BT 操作失败[%d]", ret); + __attribute__((aligned(4))) uint8_t buf[256] = {0}; + lwrb_read(&uart1_rx_t, buf, len); + ret = BSP_Bt_Process(buf, len); + if (ret != 0) + { + logError("BT 操作失败[%d]", ret); + } } } - tmos_start_task(task_id, BT_REC_EVT, 100); return (events ^ BT_REC_EVT); } else if (events & BT_SEND_EVT) @@ -414,6 +431,10 @@ void UART1_IRQHandler(void) } case UART_II_RECV_RDY: case UART_II_RECV_TOUT: // 接收数据 + if ((bt_recv_start_flag == 0)&&(bt_recv_end_flag == 0))//用于检测是否是开始接收数据 + { + bt_recv_start_flag = 1; + } while (R8_UART1_RFC) { data = R8_UART1_RBR; diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c index 4112380..ebaac60 100644 --- a/bsp/src/bsp_valve.c +++ b/bsp/src/bsp_valve.c @@ -2,7 +2,7 @@ * @Author: mbw * @Date: 2024-12-09 11:40:10 * @LastEditors: mbw && 1600520629@qq.com - * @LastEditTime: 2024-12-17 14:43:12 + * @LastEditTime: 2025-01-02 13:24:41 * @FilePath: \ble_-tyq_-bjq_-ch584-m\bsp\src\bsp_valve.c * @Description: * @@ -81,7 +81,7 @@ int BSP_Bt_Valve_Ctr(uint8_t *data, uint8_t len) uint8_t mac_addr[FLASH_MAC_INFO_LEN] = {0}; if ((data[0] >= 1) && (data[0] <= 8)) { - Flash_Get_Mac_Addr(mac_addr, data[0] - 1); + Flash_Get_Mac_Addr(mac_addr, data[0]); } else { @@ -106,7 +106,7 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len) if ((data[0] >= 1) && (data[0] <= 8)) { - Flash_Get_Mac_Addr(mac_addr, data[0] - 1); + Flash_Get_Mac_Addr(mac_addr, data[0]); } else { @@ -131,7 +131,7 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len) { logDebug("没有数据,全部写入:"); logDebug("写入MAC 地址: %02X %02X %02X %02X %02X %02X", data[1], data[2], data[3], data[4], data[5], data[6]); - if (Flash_Set_Mac_Addr(&data[1], data[0] - 1) != 0) + if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0) { logError("阀门注册写入flash 错误"); return 3; @@ -140,10 +140,10 @@ int BSP_Bt_Register_Valve(uint8_t *data, uint8_t len) { uint8_t num = Flash_Get_Valve_Num(); logDebug("num : %02X ", num); - Flash_Set_Valve_Num(1); - logDebug("写入成功,当前阀门数量为: %d", num); + Flash_Set_Valve_Num(num + 1); + logDebug("写入成功,当前阀门数量为: %d", num + 1); BSP_Bt_Valve_Updata(); // 更新阀门信息 - + } } else @@ -162,7 +162,7 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) uint8_t mac_addr[FLASH_MAC_INFO_LEN + 2] = {0}; if ((data[0] >= 1) && (data[0] <= 8))// 判断是否是正确的ID { - Flash_Get_Mac_Addr(mac_addr, data[0] - 1); + Flash_Get_Mac_Addr(mac_addr, data[0]); } else { @@ -179,12 +179,19 @@ int BSP_Bt_Remove_Valve(uint8_t *data, uint8_t len) else { tmos_memset(mac_addr, 0xFF, FLASH_MAC_INFO_LEN); - if (Flash_Set_Mac_Addr(mac_addr, data[0] - 1) != 0) // 清空掉对应位置MAC数据 + if (Flash_Set_Mac_Addr(mac_addr, data[0]) != 0) // 清空掉对应位置MAC数据 { logError("移除阀门信息失败"); logHexDumpAll(data, len); return -2; } + uint8_t num = Flash_Get_Valve_Num(); + if (Flash_Set_Valve_Num(num - 1) != 0) // 移除一个阀门 + { + logError("移除阀门信息失败"); + logHexDumpAll(data, len); + return -2; + } BSP_Bt_Valve_Updata(); Master_DisConnect(); } @@ -206,21 +213,22 @@ int BSP_Bt_Replace_Valve(uint8_t *data, uint8_t len) } if ((data[0] >= 1) && (data[0] <= 8)) { - Flash_Get_Mac_Addr(mac_addr, data[0] - 1); + Flash_Get_Mac_Addr(mac_addr, data[0]); } else { logError("valve id error"); return -2; } - if (tmos_memcmp(&data[7], mac_addr, FLASH_MAC_INFO_LEN) == TRUE) + if (tmos_memcmp(&data[1], mac_addr, FLASH_MAC_INFO_LEN) == TRUE) { logError("已经注册过了"); // 不需要重复写入 return 0; // 说明已经注册过了 } else { - if (Flash_Set_Mac_Addr(&data[7], data[0] - 1) != 0) + //新阀门数据在前 + if (Flash_Set_Mac_Addr(&data[1], data[0]) != 0) { logError("阀门注册写入flash 错误"); return 3; @@ -235,6 +243,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 num = Flash_Get_Valve_Num(); @@ -246,12 +255,12 @@ void BSP_Bt_Valve_Updata(void) tmos_memset(&valve_list, 0, sizeof(valve_data_list_t)); - for (int i = 0; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来 + for (int i = 1; i < MAX_VALVE_NUM; i++) // 这个循环是为了将数据拷贝到valve_list中, 并且保证id号和flash对应起来 { if (Flash_Get_Mac_Addr(mac, i) == 0) // 说明有MAC数据 { tmos_memcpy(valve_list.valve_data[cnt].valve_mac, mac, 6); // 这样做的目的就是读取方便,只需要根据flash中读取到的数量进行读取前N个值 - valve_list.valve_data[cnt].valve_id = i + 1; + valve_list.valve_data[cnt].valve_id = i; logDebug("updata valve_id: %d, valve_mac: %02X %02X %02X %02X %02X %02X", valve_list.valve_data[cnt].valve_id, valve_list.valve_data[cnt].valve_mac[0],