From 9eb7a8affdab3e67bd0eef1afdd33cf8c7e4d887 Mon Sep 17 00:00:00 2001 From: stark1898y <1658608470@qq.com> Date: Wed, 28 May 2025 19:29:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=982.45V?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mrs/launch.json | 6 +-- APP/peripheral.c | 100 +++++++++++++++++++++---------------- APP/peripheral_main.c | 59 ++++++++++++++-------- BSP/inc/bsp_iwdg.h | 2 +- BSP/inc/bsp_valve.h | 11 ++-- BSP/src/bsp_adc.c | 6 +++ BSP/src/bsp_beep_led_emv.c | 4 +- BSP/src/bsp_iwdg.c | 1 + BSP/src/bsp_key.c | 2 +- BSP/src/bsp_valve.c | 35 +++++++------ 10 files changed, 135 insertions(+), 91 deletions(-) diff --git a/.mrs/launch.json b/.mrs/launch.json index 2de4e41..3ad6b01 100644 --- a/.mrs/launch.json +++ b/.mrs/launch.json @@ -5,7 +5,7 @@ "type": "mrs-debugger", "request": "launch", "name": "BLE_TYQ_CH584M", - "cwd": "f:\\BaiduSyncdisk\\SXDT\\BLE_TYQ\\Firmware\\BLE_TYQ_CH584M", + "cwd": "c:\\Users\\16586\\Desktop\\BLE_TYQ_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": "f:\\BaiduSyncdisk\\SXDT\\BLE_TYQ\\Firmware\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf", - "symbolFile": "f:\\BaiduSyncdisk\\SXDT\\BLE_TYQ\\Firmware\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf", + "executableFile": "c:\\Users\\16586\\Desktop\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf", + "symbolFile": "c:\\Users\\16586\\Desktop\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf", "executableFileOffset": 0, "symbolFileOffset": 0 }, diff --git a/APP/peripheral.c b/APP/peripheral.c index 94c357e..be03c1f 100644 --- a/APP/peripheral.c +++ b/APP/peripheral.c @@ -3,8 +3,8 @@ * Author : WCH * Version : V1.0 * Date : 2018/12/10 - * Description : 外设从机多连接应用程序,初始化广播连接参数,然后广播,连接主机后, - * 请求更新连接参数,通过自定义服务传输数据 + * Description : 澶栬浠庢満澶氳繛鎺ュ簲鐢ㄧ▼搴忥紝鍒濆鍖栧箍鎾繛鎺ュ弬鏁帮紝鐒跺悗骞挎挱锛岃繛鎺ヤ富鏈哄悗锛 + * 璇锋眰鏇存柊杩炴帴鍙傛暟锛岄氳繃鑷畾涔夋湇鍔′紶杈撴暟鎹 ********************************************************************************* * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Attention: This software (modified or not) and binary are used for @@ -91,8 +91,8 @@ void BSP_NoNeeedReplyCMd(void) uint8_t Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing -// 蓝牙广播包的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的。 -// TODO:响应体,名称加上MAC地址 +// 钃濈墮骞挎挱鍖呯殑鏈澶ч暱搴︽槸37涓瓧鑺傦紝鍏朵腑璁惧鍦板潃鍗犵敤浜6涓瓧鑺傦紝鍙湁31涓瓧鑺傛槸鍙敤鐨勩 +// TODO:鍝嶅簲浣擄紝鍚嶇О鍔犱笂MAC鍦板潃 // GAP - SCAN RSP data (max size = 31 bytes) static uint8_t scanRspData[] = { // complete name @@ -217,11 +217,11 @@ void Peripheral_Init() // Setup the GAP Peripheral Role Profile { - // 开启广播使能 + // 寮鍚箍鎾娇鑳 uint8_t initial_advertising_enable = TRUE; - // 最小连接间隔 + // 鏈灏忚繛鎺ラ棿闅 uint16_t desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL; - // 最大连接间隔 + // 鏈澶ц繛鎺ラ棿闅 uint16_t desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL; // Set the GAP Role Parameters @@ -241,8 +241,8 @@ void Peripheral_Init() GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt); // https://www.cnblogs.com/debugdabiaoge/p/17871551.html - // 默认从机在回复扫描请求后,会结束广播事件(默认广播应该是 37 38 39 在 3 个信道轮发) - // 如下使能后,可以保证广播包不受扫描请求的影响 + // 榛樿浠庢満鍦ㄥ洖澶嶆壂鎻忚姹傚悗锛屼細缁撴潫骞挎挱浜嬩欢锛堥粯璁ゅ箍鎾簲璇ユ槸 37 38 39 鍦 3 涓俊閬撹疆鍙戯級 + // 濡備笅浣胯兘鍚庯紝鍙互淇濊瘉骞挎挱鍖呬笉鍙楁壂鎻忚姹傜殑褰卞搷 // uint16_t adv_event_contnue=1<<1; // GAP_SetParamValue(TGAP_ADV_SCAN_REQ_NOTIFY, adv_event_contnue); @@ -370,7 +370,7 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events) } if (events & SBP_PERIODIC_EVT) { - // 防止主机下发指令,从机回复响应的时候,先传的是状态数据 + // 闃叉涓绘満涓嬪彂鎸囦护锛屼粠鏈哄洖澶嶅搷搴旂殑鏃跺欙紝鍏堜紶鐨勬槸鐘舵佹暟鎹 if (periodic_upload_block_flag == false && mtu_flag == 1) { // Perform periodic application task @@ -380,7 +380,7 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events) } else { - // 需要等先回复了下发的指令,1s 之后再尝试回复状态数据 + // 闇瑕佺瓑鍏堝洖澶嶄簡涓嬪彂鐨勬寚浠わ紝1s 涔嬪悗鍐嶅皾璇曞洖澶嶇姸鎬佹暟鎹 tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, MS1_TO_SYSTEM_TIME(1000)); } return (events ^ SBP_PERIODIC_EVT); @@ -480,9 +480,11 @@ static void Peripheral_ProcessTMOSMsg(tmos_event_hdr_t *pMsg) peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU; mtu_flag = 1; logDebug("****mtu exchange: %d****", pMsgEvent->msg.exchangeMTUReq.clientRxMTU); - // TODO:连上之后先给个状态回应 + // TODO锛氳繛涓婁箣鍚庡厛缁欎釜鐘舵佸洖搴 // tmos_set_event(vavle_task_id, VAVLE_UPDATE_EVT); performPeriodicTask(); + // gValveData.bat = BSP_ReadVbat(); + tmos_set_event(led_task_id, CONNECT_BEEP_START_EVT); } break; @@ -530,7 +532,7 @@ static void Peripheral_LinkEstablished(gapRoleEvent_t *pEvent) tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD); // https://www.cnblogs.com/ZYL-FS/p/17759138.html - // 使能通知 + // 浣胯兘閫氱煡 enable_notify(peripheralConnList.connHandle, ENABLE); logDebug("Conn %x - Int %x= %.1fms", event->connectionHandle, event->connInterval, event->connInterval * 1.25); @@ -561,7 +563,7 @@ static void Peripheral_LinkTerminated(gapRoleEvent_t *pEvent) // Restart advertising { - // 三个广播通道全部打开 + // 涓変釜骞挎挱閫氶亾鍏ㄩ儴鎵撳紑 // uint8_t init_adv_channel_map = GAP_ADVCHAN_ALL ; // GAPRole_SetParameter( GAPROLE_ADV_CHANNEL_MAP, sizeof( uint8_t ), &init_adv_channel_map); @@ -658,7 +660,7 @@ static void peripheralStateNotificationCB(gapRole_States_t newState, gapRoleEven Peripheral_LinkEstablished(pEvent); logDebug("Connected.."); - // 在蓝牙建立连接之后,调用 GATT ExchangeMTU 来修改 MTU 的值 + // 鍦ㄨ摑鐗欏缓绔嬭繛鎺ヤ箣鍚庯紝璋冪敤 GATT ExchangeMTU 鏉ヤ慨鏀 MTU 鐨勫 // Update MTU attExchangeMTUReq_t req = { .clientRxMTU = BLE_BUFF_MAX_LEN - 4, @@ -748,22 +750,32 @@ static void performPeriodicTask(void) BSP_NoNeedBoost(); BSP_RequestSleep(); #endif - // 电压过低就关阀 - if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) - { - gValveData.switch_status = kClosed; - tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); - } - else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) - { - tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); - } + // // 濡傛灉鐢靛帇浣庡氨閮戒笉浜伅銆佽渹楦e櫒 + // if (bat_mv <= LOW_VABAT_CLOSE_MV) + // { + // logDebug("浣庡帇鍏抽榾"); + // tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + // } + // if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) + // { + // gValveData.switch_status = kClosed; + // tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + // } + // else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) + // { + // tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); + // } float _humi, _temp; if (BSP_ReadTempHumi(&_humi, &_temp) == 0) { gValveData.temp = (int8_t)_temp; gValveData.humi = (uint8_t)_humi; + if (gValveData.temp >= HIGN_TEMP_CLOSE_C) + { + logDebug("楂樻俯鍏抽榾"); + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + } } else { @@ -864,7 +876,7 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len // tmos_memcpy(newValue, pValue, len); logDebug("CHAR3 Start"); // logHexDumpAll(newValue, len); - // TODO:发送rev数据 + // TODO:鍙戦乺ev鏁版嵁 uint8_t *p_rev_msg; // TsValveMsg *ValveMsg; // ValveMsg = tmos_msg_allocate(len); @@ -886,13 +898,13 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len } else { - logError("内存不足"); + logError("鍐呭瓨涓嶈冻"); } #if 0 TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len); if (HostFrameData != NULL) { - // logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段 + // logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 鏁版嵁娈 // BSP_UART1_TxLoop(); // HR_ProcessData(HostFrameData); switch (HostFrameData->cmd) @@ -900,25 +912,25 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len case kCmdCfg: // uint8_t data_buf[64] = {0}; // tmos_memset(data_buf, 0, sizeof(data_buf)); - // 处理数据帧 + // 澶勭悊鏁版嵁甯 logDebug("kCmdCfg"); break; case kCmdCloseVavle: logDebug("kCmdCloseVavle"); - // TODO:注意这里 + // TODO:娉ㄦ剰杩欓噷 BSP_NeeedReplyCMdFirst(); // EMV_CHARGE EMV_CHARGE_EN; logDebug("EMV_CHARGE_EN"); - // 开始一个定时event,1s后产生,当前语句只会产生一次event - // 可以在event产生后去开启event,可以是别的task的,也可以是当前task的event + // 寮濮嬩竴涓畾鏃秂vent,1s鍚庝骇鐢,褰撳墠璇彞鍙細浜х敓涓娆vent + // 鍙互鍦╡vent浜х敓鍚庡幓寮鍚痚vent,鍙互鏄埆鐨則ask鐨,涔熷彲浠ユ槸褰撳墠task鐨別vent tmos_start_task(vavle_task_id, VAVLE_CLOSE_ACTION_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); // BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1); - // // TODO: 关阀动作 + // // TODO: 鍏抽榾鍔ㄤ綔 // peripheralChar4Notify((uint8_t *)&RawData.buf[0], RawData.len); break; @@ -929,14 +941,14 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len // BSP_UART1_TxLoop(); break; default: - logError("无效的命令"); + logError("鏃犳晥鐨勫懡浠"); // logHexDumpAll(data, len); break; } } else { - logError("数据帧解析失败"); + logError("鏁版嵁甯цВ鏋愬け璐"); } tmos_msg_deallocate((uint8_t *)HostFrameData); HostFrameData = NULL; @@ -954,12 +966,12 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len #if 0 -// TODO:应用加入广播数据更新部分状态数据 -// 动态更新广播数据 -// taskID: 请求更改广播任务的 ID -// adType:TRUE 更改广播数据,FALSE 更改扫描回复数据 -// datalen:数据长度 -// *pAdvertData:数据指针 +// TODO:搴旂敤鍔犲叆骞挎挱鏁版嵁鏇存柊閮ㄥ垎鐘舵佹暟鎹 +// 鍔ㄦ佹洿鏂板箍鎾暟鎹 +// taskID锛 璇锋眰鏇存敼骞挎挱浠诲姟鐨 ID +// adType锛歍RUE 鏇存敼骞挎挱鏁版嵁锛孎ALSE 鏇存敼鎵弿鍥炲鏁版嵁 +// datalen锛氭暟鎹暱搴 +// *pAdvertData锛氭暟鎹寚閽 void Peripheral_UpdateAdvertData(uint8_t adType, uint8_t dataLen, uint8_t *pAdvertData) { GAP_UpdateAdvertisingData(Peripheral_TaskID, adType, dataLen, pAdvertData); @@ -968,12 +980,12 @@ void Peripheral_UpdateAdvertData(uint8_t adType, uint8_t dataLen, uint8_t *pAdve #include "stdio.h" #include "stdarg.h" -// TODO:先不弄,后面改广播名,应用加入广播数据更新部分状态数据 +// TODO:鍏堜笉寮勶紝鍚庨潰鏀瑰箍鎾悕锛屽簲鐢ㄥ姞鍏ュ箍鎾暟鎹洿鏂伴儴鍒嗙姸鎬佹暟鎹 void Peripheral_SetMacName(void) { uint8_t mac_addr[6]; GetMACAddress(mac_addr); - // 手机APP显示是倒序的[5-0],不是[0-5] + // 鎵嬫満APP鏄剧ず鏄掑簭鐨刐5-0],涓嶆槸[0-5] logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", mac_addr[0], mac_addr[1] , mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]); @@ -1005,7 +1017,7 @@ void Peripheral_SetMacName(void) // logDebug("scan_rsp_data:"); logHexDumpAll(scan_rsp_data, len); - // // 更新扫描响应体 + // // 鏇存柊鎵弿鍝嶅簲浣 GAP_UpdateAdvertisingData(Peripheral_TaskID, FALSE, scan_rsp_data, len); } #endif diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c index a18e593..3311c49 100644 --- a/APP/peripheral_main.c +++ b/APP/peripheral_main.c @@ -36,12 +36,13 @@ void app_task_handler(TeAppEvtType app_evt_type) { // FEED_IWDG(); gValveData.bat = BSP_ReadVbat(); - BSP_RequestBoost(); + DelayMs(5); + // BSP_RequestBoost(); BSP_BlockSleep(); BSP_RequestBoost(); logDebug("BSP_RequestBoost"); - DelayMs(5); + // DelayMs(5); #if 1 switch (app_evt_type) @@ -62,16 +63,19 @@ void app_task_handler(TeAppEvtType app_evt_type) { logDebug("LED鏄剧ず鐘舵"); // tmos_set_event(led_task_id, LED_SHOW_START_EVT); - BSP_BlockSleep(); + // BSP_BlockSleep(); // BSP_RequestBoost(); - DelayMs(5); + // DelayMs(5); // ShowLed(); // 鐢靛帇杩囦綆灏卞叧闃 // if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) - if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) + if (bat_mv <= LOW_VABAT_CLOSE_MV) + // if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) { LED_ALL_OFF_DEINIT; LED_Y_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; // BEEP_ON; logDebug("LED_Y_ON"); @@ -80,14 +84,17 @@ void app_task_handler(TeAppEvtType app_evt_type) { LED_ALL_OFF_DEINIT; LED_R_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_R_ON"); } else if (gValveData.switch_status == kOpened) { LED_ALL_OFF_DEINIT; - LED_G_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_G_ON"); } @@ -103,20 +110,23 @@ void app_task_handler(TeAppEvtType app_evt_type) gValveData.switch_status = kOpened; BSP_BlockSleep(); // BSP_RequestBoost(); - DelayMs(5); + // DelayMs(5); // ShowLed(); if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed) { LED_ALL_OFF_DEINIT; LED_R_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_R_ON"); } else if (gValveData.switch_status == kOpened) { LED_ALL_OFF_DEINIT; - LED_G_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_G_ON"); } @@ -132,12 +142,14 @@ void app_task_handler(TeAppEvtType app_evt_type) // tmos_set_event(led_task_id, LED_SHOW_START_EVT); BSP_BlockSleep(); // BSP_RequestBoost(); - DelayMs(5); + // DelayMs(5); // ShowLed(); if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed) { LED_ALL_OFF_DEINIT; LED_R_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_R_ON"); } @@ -146,6 +158,8 @@ void app_task_handler(TeAppEvtType app_evt_type) LED_ALL_OFF_DEINIT; LED_G_ON; + // DelayMs(50); + // LED_ALL_OFF_DEINIT; logDebug("LED_G_ON"); } @@ -232,9 +246,9 @@ int main(void) PWR_DCDCCfg(ENABLE); #endif // 32Mhz/10ppm/10pF - HSECFG_Capacitance(HSECap_18p); + // HSECFG_Capacitance(HSECap_18p); // USE 32Mhz/10ppm/12pF - // HSECFG_Capacitance(HSECap_20p); + HSECFG_Capacitance(HSECap_20p); SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz); #if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE) @@ -259,7 +273,8 @@ int main(void) uint8_t MacAddr[6]; GetMACAddress(MacAddr); // 鎵嬫満APP鏄剧ず鏄掑簭鐨刐5-0],涓嶆槸[0-5] - logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5]); + logDebug("MacAddr: %02X:%02X:%02X:%02X:%02X:%02X", MacAddr[5], MacAddr[4] + , MacAddr[3], MacAddr[2], MacAddr[1], MacAddr[0]); CH58x_BLEInit(); HAL_Init(); @@ -276,9 +291,6 @@ int main(void) BSP_VAVLE_Init(); // DelayMs(2000 * 1); - BSP_BlockSleep(); - BSP_RequestBoost(); - DelayMs(100); // 濡傛灉鐢靛帇浣庡氨閮戒笉浜伅銆佽渹楦e櫒 if (bat_mv <= LOW_VABAT_CLOSE_MV) @@ -287,20 +299,25 @@ int main(void) } else { + BSP_BlockSleep(); + BSP_RequestBoost(); + DelayMs(1); ShowLed(); BEEP_ON; - DelayMs(500); + DelayMs(30); + LED_ALL_OFF_DEINIT; + BEEP_OFF_DEINIT; + BSP_NoNeedBoost(); + BSP_RequestSleep(); } LED_ALL_OFF_DEINIT; BEEP_OFF_DEINIT; - BSP_NoNeedBoost(); - BSP_RequestSleep(); IWDG_Init(IWDG_TIMEOUT_MS); - logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick()); - DelayMs(1000); - logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick()); + // logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick()); + // DelayMs(1000); + // logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick()); // 鍦ㄨ繛鎺ラ棿闅斿拰骞挎挱闂撮殧鍒版潵鏃讹紝浼氳繘鍏ュ洖璋冧腑鍠傜嫍 // LL_AdvertiseEventRegister(BLE_AdvertiseEventCB); diff --git a/BSP/inc/bsp_iwdg.h b/BSP/inc/bsp_iwdg.h index aa38269..18e9c43 100644 --- a/BSP/inc/bsp_iwdg.h +++ b/BSP/inc/bsp_iwdg.h @@ -21,7 +21,7 @@ #define RB_WR_PROTECT 0x40000000 // RO, write protect #define RB_IWDG_EN 0x80000000 // RO, watch-dog enable -#define IWDG_TIMEOUT_MS (4000) +#define IWDG_TIMEOUT_MS (10000) #define IWDG_FEED_MS (3000) #define IWIG_FEED_EVENT (0x01 << 0) diff --git a/BSP/inc/bsp_valve.h b/BSP/inc/bsp_valve.h index 650f010..a34a181 100644 --- a/BSP/inc/bsp_valve.h +++ b/BSP/inc/bsp_valve.h @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-12 15:55:38 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2025-05-28 13:38:08 + * @LastEditTime : 2025-05-28 18:00:21 * @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_valve.h * @Description : * @@ -23,14 +23,14 @@ extern tmosTaskID vavle_task_id; #define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 鍏抽榾锛屽姩浣 #define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 鍏抽榾缁撴潫 -#define VAVLE_DECT_SWITCH_START_EVT (0x0001 << 5) // 妫娴嬬數纾侀搧 -#define VAVLE_DECT_SWITCH_END_EVT (0x0001 << 6) // 妫娴嬬數纾侀搧 +#define VAVLE_DECT_SWITCH_START_EVT (0x0001 << 5) // 妫娴嬬數纾侀搧 +#define VAVLE_DECT_SWITCH_END_EVT (0x0001 << 6) // 妫娴嬬數纾侀搧 #define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 浣庣數鍘嬫彁閱 #define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 寰幆妫娴 -#define VAVLE_DECT_SWITCH_CALIB_EVT (0x0001 << 9) // 鏍囧畾鐢电閾 +#define VAVLE_DECT_SWITCH_CALIB_EVT (0x0001 << 9) // 鏍囧畾鐢电閾 #define VAVLE_UPDATE_EVT (0x0001 << 10) // 涓婁紶鏇磋闃闂ㄧ姸鎬 @@ -48,9 +48,10 @@ extern tmosTaskID vavle_task_id; #define LOW_VABAT_CLOSE_VALUE 23 -#define LOW_VABAT_CLOSE_MV 2350 +#define LOW_VABAT_CLOSE_MV 2450 +#define HIGN_TEMP_CLOSE_C 60 #define FRAME_HEADER 0xAA #define FRAME_TAIL 0x55 diff --git a/BSP/src/bsp_adc.c b/BSP/src/bsp_adc.c index b24a052..938a987 100644 --- a/BSP/src/bsp_adc.c +++ b/BSP/src/bsp_adc.c @@ -3,6 +3,8 @@ #include "bsp_uart.h" #include "log.h" +#include "SLEEP.h" + #include "bsp_valve.h" #undef LOG_ENABLE @@ -31,6 +33,10 @@ double voltage = 0; uint8_t BSP_ReadVbat(void) { uint8_t i; + + BSP_NoNeedBoost(); + DelayMs(1); + // VBAT uint32_t CountBat = 0; diff --git a/BSP/src/bsp_beep_led_emv.c b/BSP/src/bsp_beep_led_emv.c index 45b2115..13c6682 100644 --- a/BSP/src/bsp_beep_led_emv.c +++ b/BSP/src/bsp_beep_led_emv.c @@ -102,12 +102,12 @@ static tmosEvents LED_Task_ProcessEvent(tmosTaskID taskID, tmosEvents event) if (event & CONNECT_BEEP_START_EVT) { logDebug("CONNECT_BEEP_START_EVT"); - LED_G_ON; + // LED_G_ON; BSP_BlockSleep(); BSP_RequestBoost(); BEEP_ON; - tmos_start_task(led_task_id, CONNECT_BEEP_END_EVT, MS1_TO_SYSTEM_TIME(300)); + tmos_start_task(led_task_id, CONNECT_BEEP_END_EVT, MS1_TO_SYSTEM_TIME(20)); return (event ^ CONNECT_BEEP_START_EVT); } diff --git a/BSP/src/bsp_iwdg.c b/BSP/src/bsp_iwdg.c index 2f3a0ee..7c9a636 100644 --- a/BSP/src/bsp_iwdg.c +++ b/BSP/src/bsp_iwdg.c @@ -37,6 +37,7 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events) // logDebug("IWDG feed"); // 鑾峰彇tmos绯荤粺鍫嗙殑鍓╀綑鍐呭瓨澶у皬 // uint8_t* a = tmos_msg_allocate(1); + uint32_t tmos_memory_getlen(void); logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen()); // tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS)); return (events ^ IWIG_FEED_EVENT); diff --git a/BSP/src/bsp_key.c b/BSP/src/bsp_key.c index a615312..552e039 100644 --- a/BSP/src/bsp_key.c +++ b/BSP/src/bsp_key.c @@ -36,7 +36,7 @@ static void KEY_Task_ProcessTmosMsg(tmos_event_hdr_t *pMsg) } #if 1 -// __HIGH_CODE +__HIGH_CODE static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) { if (events & SYS_EVENT_MSG) diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c index c697c4d..e016f61 100644 --- a/BSP/src/bsp_valve.c +++ b/BSP/src/bsp_valve.c @@ -2,7 +2,7 @@ * @Author : stark1898y 1658608470@qq.com * @Date : 2024-12-15 15:01:15 * @LastEditors : stark1898y 1658608470@qq.com - * @LastEditTime : 2025-05-28 09:03:24 + * @LastEditTime : 2025-05-28 18:05:13 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c * @Description : * @@ -11,6 +11,8 @@ #include "bsp_valve.h" #include "bsp_flash.h" +#include "bsp_i2c.h" + #include "bsp_beep_led_emv.h" // 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55 @@ -390,20 +392,10 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) if (events & VAVLE_CLOSE_START_EVT) { logDebug("VAVLE_CLOSE_START_EVT"); - + DelayMs(1); BSP_BlockSleep(); BSP_RequestBoost(); - DelayUs(200); - - // EMV_CHARGE - // EMV_CHARGE_EN; - // DelayUs(500); - // EMV_CHARGE_OFF_DEINIT; - // DelayUs(200); - - // DelayUs(500); - // EMV_CHARGE_OFF_DEINIT; - // DelayUs(200); + DelayMs(10); EMV_CHARGE_EN; @@ -421,7 +413,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) BSP_RequestBoost(); logDebug("VAVLE_CLOSE_ACTION_EVT"); - BOOST_EN; + // BOOST_EN; // EMV_CHARGE_EN; // 鍏抽榾鍔ㄤ綔,涓瀹氳鍏堝叧鍏呯數鐨勶紝闃叉鍏朵粬12V鐢ㄧ數 EMV_CHARGE_OFF_DEINIT; @@ -553,6 +545,21 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // { // tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); // } + float _humi, _temp; + if (BSP_ReadTempHumi(&_humi, &_temp) == 0) + { + gValveData.temp = (int8_t)_temp; + gValveData.humi = (uint8_t)_humi; + if (gValveData.temp >= HIGN_TEMP_CLOSE_C) + { + logDebug("楂樻俯鍏抽榾"); + tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + } + } + else + { + logError("Read TempHumi Err"); + } tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); return (events ^ VAVLE_LOOP_DECT_EVT);