暂存2.45V

This commit is contained in:
stark1898y 2025-05-28 19:29:52 +08:00
parent 63fb71a9de
commit 9eb7a8affd
10 changed files with 135 additions and 91 deletions

View File

@ -5,7 +5,7 @@
"type": "mrs-debugger", "type": "mrs-debugger",
"request": "launch", "request": "launch",
"name": "BLE_TYQ_CH584M", "name": "BLE_TYQ_CH584M",
"cwd": "f:\\BaiduSyncdisk\\SXDT\\BLE_TYQ\\Firmware\\BLE_TYQ_CH584M", "cwd": "c:\\Users\\16586\\Desktop\\BLE_TYQ_CH584M",
"openOCDCfg": { "openOCDCfg": {
"useLocalOpenOCD": true, "useLocalOpenOCD": true,
"executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe", "executable": "c:/MounRiver/MounRiver_Studio2/resources/app/resources/win32/components/WCH/OpenOCD/OpenOCD/bin/openocd.exe",
@ -39,8 +39,8 @@
"additionalCommands": [] "additionalCommands": []
}, },
"loadedFiles": { "loadedFiles": {
"executableFile": "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": "f:\\BaiduSyncdisk\\SXDT\\BLE_TYQ\\Firmware\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf", "symbolFile": "c:\\Users\\16586\\Desktop\\BLE_TYQ_CH584M\\obj\\BLE_TYQ_CH584M.elf",
"executableFileOffset": 0, "executableFileOffset": 0,
"symbolFileOffset": 0 "symbolFileOffset": 0
}, },

View File

@ -3,8 +3,8 @@
* Author : WCH * Author : WCH
* Version : V1.0 * Version : V1.0
* Date : 2018/12/10 * Date : 2018/12/10
* Description : 广广 * Description : 广广
* *
********************************************************************************* *********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd. * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for * 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 uint8_t Peripheral_TaskID = INVALID_TASK_ID; // Task ID for internal task/event processing
// 蓝牙广播包的最大长度是37个字节其中设备地址占用了6个字节只有31个字节是可用的。 // 蓝牙广播包的最大长度是37个字节其中设备地址占用了6个字节只有31个字节是可用的。
// TODO:响应体名称加上MAC地址 // TODO:响应体名称加上MAC地址
// GAP - SCAN RSP data (max size = 31 bytes) // GAP - SCAN RSP data (max size = 31 bytes)
static uint8_t scanRspData[] = { static uint8_t scanRspData[] = {
// complete name // complete name
@ -217,11 +217,11 @@ void Peripheral_Init()
// Setup the GAP Peripheral Role Profile // Setup the GAP Peripheral Role Profile
{ {
// 开启广播使能 // 开启广播使能
uint8_t initial_advertising_enable = TRUE; uint8_t initial_advertising_enable = TRUE;
// 最小连接间隔 // 最小连接间隔
uint16_t desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL; uint16_t desired_min_interval = DEFAULT_DESIRED_MIN_CONN_INTERVAL;
// 最大连接间隔 // 最大连接间隔
uint16_t desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL; uint16_t desired_max_interval = DEFAULT_DESIRED_MAX_CONN_INTERVAL;
// Set the GAP Role Parameters // Set the GAP Role Parameters
@ -241,8 +241,8 @@ void Peripheral_Init()
GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt); GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, advInt);
// https://www.cnblogs.com/debugdabiaoge/p/17871551.html // https://www.cnblogs.com/debugdabiaoge/p/17871551.html
// 默认从机在回复扫描请求后,会结束广播事件(默认广播应该是 37 38 39 在 3 个信道轮发) // 默认从机在回复扫描请求后,会结束广播事件(默认广播应该是 37 38 39 在 3 个信道轮发)
// 如下使能后,可以保证广播包不受扫描请求的影响 // 如下使能后,可以保证广播包不受扫描请求的影响
// uint16_t adv_event_contnue=1<<1; // uint16_t adv_event_contnue=1<<1;
// GAP_SetParamValue(TGAP_ADV_SCAN_REQ_NOTIFY, adv_event_contnue); // 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 (events & SBP_PERIODIC_EVT)
{ {
// 防止主机下发指令,从机回复响应的时候,先传的是状态数据 // 防止主机下发指令,从机回复响应的时候,先传的是状态数据
if (periodic_upload_block_flag == false && mtu_flag == 1) if (periodic_upload_block_flag == false && mtu_flag == 1)
{ {
// Perform periodic application task // Perform periodic application task
@ -380,7 +380,7 @@ uint16_t Peripheral_ProcessEvent(uint8_t task_id, uint16_t events)
} }
else else
{ {
// 需要等先回复了下发的指令1s 之后再尝试回复状态数据 // 需要等先回复了下发的指令1s 之后再尝试回复状态数据
tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, MS1_TO_SYSTEM_TIME(1000)); tmos_start_task(Peripheral_TaskID, SBP_PERIODIC_EVT, MS1_TO_SYSTEM_TIME(1000));
} }
return (events ^ SBP_PERIODIC_EVT); return (events ^ SBP_PERIODIC_EVT);
@ -480,9 +480,11 @@ static void Peripheral_ProcessTMOSMsg(tmos_event_hdr_t *pMsg)
peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU; peripheralMTU = pMsgEvent->msg.exchangeMTUReq.clientRxMTU;
mtu_flag = 1; mtu_flag = 1;
logDebug("****mtu exchange: %d****", pMsgEvent->msg.exchangeMTUReq.clientRxMTU); logDebug("****mtu exchange: %d****", pMsgEvent->msg.exchangeMTUReq.clientRxMTU);
// TODO连上之后先给个状态回应 // TODO连上之后先给个状态回应
// tmos_set_event(vavle_task_id, VAVLE_UPDATE_EVT); // tmos_set_event(vavle_task_id, VAVLE_UPDATE_EVT);
performPeriodicTask(); performPeriodicTask();
// gValveData.bat = BSP_ReadVbat();
tmos_set_event(led_task_id, CONNECT_BEEP_START_EVT); tmos_set_event(led_task_id, CONNECT_BEEP_START_EVT);
} }
break; 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); tmos_start_task(Peripheral_TaskID, SBP_READ_RSSI_EVT, SBP_READ_RSSI_EVT_PERIOD);
// https://www.cnblogs.com/ZYL-FS/p/17759138.html // https://www.cnblogs.com/ZYL-FS/p/17759138.html
// 使能通知 // 使能通知
enable_notify(peripheralConnList.connHandle, ENABLE); enable_notify(peripheralConnList.connHandle, ENABLE);
logDebug("Conn %x - Int %x= %.1fms", event->connectionHandle, event->connInterval, event->connInterval * 1.25); 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 // Restart advertising
{ {
// 三个广播通道全部打开 // 三个广播通道全部打开
// uint8_t init_adv_channel_map = GAP_ADVCHAN_ALL ; // uint8_t init_adv_channel_map = GAP_ADVCHAN_ALL ;
// GAPRole_SetParameter( GAPROLE_ADV_CHANNEL_MAP, sizeof( uint8_t ), &init_adv_channel_map); // 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); Peripheral_LinkEstablished(pEvent);
logDebug("Connected.."); logDebug("Connected..");
// 在蓝牙建立连接之后,调用 GATT ExchangeMTU 来修改 MTU 的值 // 在蓝牙建立连接之后,调用 GATT ExchangeMTU 来修改 MTU 的值
// Update MTU // Update MTU
attExchangeMTUReq_t req = { attExchangeMTUReq_t req = {
.clientRxMTU = BLE_BUFF_MAX_LEN - 4, .clientRxMTU = BLE_BUFF_MAX_LEN - 4,
@ -748,22 +750,32 @@ static void performPeriodicTask(void)
BSP_NoNeedBoost(); BSP_NoNeedBoost();
BSP_RequestSleep(); BSP_RequestSleep();
#endif #endif
// 电压过低就关阀 // // 如果电压低就都不亮灯、蜂鸣器
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) // if (bat_mv <= LOW_VABAT_CLOSE_MV)
{ // {
gValveData.switch_status = kClosed; // logDebug("低压关阀");
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); // tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
} // }
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) // if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE)
{ // {
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); // 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; float _humi, _temp;
if (BSP_ReadTempHumi(&_humi, &_temp) == 0) if (BSP_ReadTempHumi(&_humi, &_temp) == 0)
{ {
gValveData.temp = (int8_t)_temp; gValveData.temp = (int8_t)_temp;
gValveData.humi = (uint8_t)_humi; gValveData.humi = (uint8_t)_humi;
if (gValveData.temp >= HIGN_TEMP_CLOSE_C)
{
logDebug("高温关阀");
tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
}
} }
else else
{ {
@ -864,7 +876,7 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
// tmos_memcpy(newValue, pValue, len); // tmos_memcpy(newValue, pValue, len);
logDebug("CHAR3 Start"); logDebug("CHAR3 Start");
// logHexDumpAll(newValue, len); // logHexDumpAll(newValue, len);
// TODO:发送rev数据 // TODO:发送rev数据
uint8_t *p_rev_msg; uint8_t *p_rev_msg;
// TsValveMsg *ValveMsg; // TsValveMsg *ValveMsg;
// ValveMsg = tmos_msg_allocate(len); // ValveMsg = tmos_msg_allocate(len);
@ -886,13 +898,13 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
} }
else else
{ {
logError("内存不足"); logError("内存不足");
} }
#if 0 #if 0
TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len); TsFrameData *HostFrameData = BSP_VAVLE_GetFrameData(newValue, len);
if (HostFrameData != NULL) if (HostFrameData != NULL)
{ {
// logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段 // logHexDumpAll(&HostFrameData->data[0], HostFrameData->len); // 数据段
// BSP_UART1_TxLoop(); // BSP_UART1_TxLoop();
// HR_ProcessData(HostFrameData); // HR_ProcessData(HostFrameData);
switch (HostFrameData->cmd) switch (HostFrameData->cmd)
@ -900,25 +912,25 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
case kCmdCfg: case kCmdCfg:
// uint8_t data_buf[64] = {0}; // uint8_t data_buf[64] = {0};
// tmos_memset(data_buf, 0, sizeof(data_buf)); // tmos_memset(data_buf, 0, sizeof(data_buf));
// 处理数据帧 // 处理数据帧
logDebug("kCmdCfg"); logDebug("kCmdCfg");
break; break;
case kCmdCloseVavle: case kCmdCloseVavle:
logDebug("kCmdCloseVavle"); logDebug("kCmdCloseVavle");
// TODO:注意这里 // TODO:注意这里
BSP_NeeedReplyCMdFirst(); BSP_NeeedReplyCMdFirst();
// EMV_CHARGE // EMV_CHARGE
EMV_CHARGE_EN; EMV_CHARGE_EN;
logDebug("EMV_CHARGE_EN"); logDebug("EMV_CHARGE_EN");
// 开始一个定时event,1s后产生,当前语句只会产生一次event // 开始一个定时event,1s后产生,当前语句只会产生一次event
// 可以在event产生后去开启event,可以是别的task的,也可以是当前task的event // 可以在event产生后去开启event,可以是别的task的,也可以是当前task的event
tmos_start_task(vavle_task_id, VAVLE_CLOSE_ACTION_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); tmos_start_task(vavle_task_id, VAVLE_CLOSE_ACTION_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS));
// BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1); // BSP_VALVE_Generate_ValveResponse(&RawData, kCmdCloseVavle, 1);
// // TODO: 关阀动作 // // TODO: 关阀动作
// peripheralChar4Notify((uint8_t *)&RawData.buf[0], RawData.len); // peripheralChar4Notify((uint8_t *)&RawData.buf[0], RawData.len);
break; break;
@ -929,14 +941,14 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
// BSP_UART1_TxLoop(); // BSP_UART1_TxLoop();
break; break;
default: default:
logError("无效的命令"); logError("无效的命令");
// logHexDumpAll(data, len); // logHexDumpAll(data, len);
break; break;
} }
} }
else else
{ {
logError("数据帧解析失败"); logError("数据帧解析失败");
} }
tmos_msg_deallocate((uint8_t *)HostFrameData); tmos_msg_deallocate((uint8_t *)HostFrameData);
HostFrameData = NULL; HostFrameData = NULL;
@ -954,12 +966,12 @@ static void simpleProfileChangeCB(uint8_t paramID, uint8_t *pValue, uint16_t len
#if 0 #if 0
// TODO:应用加入广播数据更新部分状态数据 // TODO:应用加入广播数据更新部分状态数据
// 动态更新广播数据 // 动态更新广播数据
// taskID 请求更改广播任务的 ID // taskID 请求更改广播任务的 ID
// adTypeTRUE 更改广播数据FALSE 更改扫描回复数据 // adTypeTRUE 更改广播数据FALSE 更改扫描回复数据
// datalen数据长度 // datalen数据长度
// *pAdvertData数据指针 // *pAdvertData数据指针
void Peripheral_UpdateAdvertData(uint8_t adType, uint8_t dataLen, uint8_t *pAdvertData) void Peripheral_UpdateAdvertData(uint8_t adType, uint8_t dataLen, uint8_t *pAdvertData)
{ {
GAP_UpdateAdvertisingData(Peripheral_TaskID, adType, dataLen, 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 "stdio.h"
#include "stdarg.h" #include "stdarg.h"
// TODO:先不弄,后面改广播名,应用加入广播数据更新部分状态数据 // TODO:先不弄,后面改广播名,应用加入广播数据更新部分状态数据
void Peripheral_SetMacName(void) void Peripheral_SetMacName(void)
{ {
uint8_t mac_addr[6]; uint8_t mac_addr[6];
GetMACAddress(mac_addr); 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] 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]); , mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
@ -1005,7 +1017,7 @@ void Peripheral_SetMacName(void)
// logDebug("scan_rsp_data:"); // logDebug("scan_rsp_data:");
logHexDumpAll(scan_rsp_data, len); logHexDumpAll(scan_rsp_data, len);
// // 更新扫描响应体 // // 更新扫描响应体
GAP_UpdateAdvertisingData(Peripheral_TaskID, FALSE, scan_rsp_data, len); GAP_UpdateAdvertisingData(Peripheral_TaskID, FALSE, scan_rsp_data, len);
} }
#endif #endif

View File

@ -36,12 +36,13 @@ void app_task_handler(TeAppEvtType app_evt_type)
{ {
// FEED_IWDG(); // FEED_IWDG();
gValveData.bat = BSP_ReadVbat(); gValveData.bat = BSP_ReadVbat();
BSP_RequestBoost(); DelayMs(5);
// BSP_RequestBoost();
BSP_BlockSleep(); BSP_BlockSleep();
BSP_RequestBoost(); BSP_RequestBoost();
logDebug("BSP_RequestBoost"); logDebug("BSP_RequestBoost");
DelayMs(5); // DelayMs(5);
#if 1 #if 1
switch (app_evt_type) switch (app_evt_type)
@ -62,16 +63,19 @@ void app_task_handler(TeAppEvtType app_evt_type)
{ {
logDebug("LED显示状态"); logDebug("LED显示状态");
// tmos_set_event(led_task_id, LED_SHOW_START_EVT); // tmos_set_event(led_task_id, LED_SHOW_START_EVT);
BSP_BlockSleep(); // BSP_BlockSleep();
// BSP_RequestBoost(); // BSP_RequestBoost();
DelayMs(5); // DelayMs(5);
// ShowLed(); // ShowLed();
// 电压过低就关阀 // 电压过低就关阀
// if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) // 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_ALL_OFF_DEINIT;
LED_Y_ON; LED_Y_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
// BEEP_ON; // BEEP_ON;
logDebug("LED_Y_ON"); logDebug("LED_Y_ON");
@ -80,14 +84,17 @@ void app_task_handler(TeAppEvtType app_evt_type)
{ {
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_R_ON; LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON"); logDebug("LED_R_ON");
} }
else if (gValveData.switch_status == kOpened) else if (gValveData.switch_status == kOpened)
{ {
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_G_ON; LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON"); logDebug("LED_G_ON");
} }
@ -103,20 +110,23 @@ void app_task_handler(TeAppEvtType app_evt_type)
gValveData.switch_status = kOpened; gValveData.switch_status = kOpened;
BSP_BlockSleep(); BSP_BlockSleep();
// BSP_RequestBoost(); // BSP_RequestBoost();
DelayMs(5); // DelayMs(5);
// ShowLed(); // ShowLed();
if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed) if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
{ {
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_R_ON; LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON"); logDebug("LED_R_ON");
} }
else if (gValveData.switch_status == kOpened) else if (gValveData.switch_status == kOpened)
{ {
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_G_ON; LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON"); 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); // tmos_set_event(led_task_id, LED_SHOW_START_EVT);
BSP_BlockSleep(); BSP_BlockSleep();
// BSP_RequestBoost(); // BSP_RequestBoost();
DelayMs(5); // DelayMs(5);
// ShowLed(); // ShowLed();
if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed) if (gValveData.switch_status == kUnknown || gValveData.switch_status == kClosed)
{ {
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_R_ON; LED_R_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_R_ON"); logDebug("LED_R_ON");
} }
@ -146,6 +158,8 @@ void app_task_handler(TeAppEvtType app_evt_type)
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
LED_G_ON; LED_G_ON;
// DelayMs(50);
// LED_ALL_OFF_DEINIT;
logDebug("LED_G_ON"); logDebug("LED_G_ON");
} }
@ -232,9 +246,9 @@ int main(void)
PWR_DCDCCfg(ENABLE); PWR_DCDCCfg(ENABLE);
#endif #endif
// 32Mhz/10ppm/10pF // 32Mhz/10ppm/10pF
HSECFG_Capacitance(HSECap_18p); // HSECFG_Capacitance(HSECap_18p);
// USE 32Mhz/10ppm/12pF // USE 32Mhz/10ppm/12pF
// HSECFG_Capacitance(HSECap_20p); HSECFG_Capacitance(HSECap_20p);
SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz); SetSysClock(CLK_SOURCE_HSE_PLL_62_4MHz);
#if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE) #if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
@ -259,7 +273,8 @@ int main(void)
uint8_t MacAddr[6]; uint8_t MacAddr[6];
GetMACAddress(MacAddr); GetMACAddress(MacAddr);
// 手机APP显示是倒序的[5-0],不是[0-5] // 手机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(); CH58x_BLEInit();
HAL_Init(); HAL_Init();
@ -276,9 +291,6 @@ int main(void)
BSP_VAVLE_Init(); BSP_VAVLE_Init();
// DelayMs(2000 * 1); // DelayMs(2000 * 1);
BSP_BlockSleep();
BSP_RequestBoost();
DelayMs(100);
// 如果电压低就都不亮灯、蜂鸣器 // 如果电压低就都不亮灯、蜂鸣器
if (bat_mv <= LOW_VABAT_CLOSE_MV) if (bat_mv <= LOW_VABAT_CLOSE_MV)
@ -287,20 +299,25 @@ int main(void)
} }
else else
{ {
BSP_BlockSleep();
BSP_RequestBoost();
DelayMs(1);
ShowLed(); ShowLed();
BEEP_ON; BEEP_ON;
DelayMs(500); DelayMs(30);
LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT;
BSP_NoNeedBoost();
BSP_RequestSleep();
} }
LED_ALL_OFF_DEINIT; LED_ALL_OFF_DEINIT;
BEEP_OFF_DEINIT; BEEP_OFF_DEINIT;
BSP_NoNeedBoost();
BSP_RequestSleep();
IWDG_Init(IWDG_TIMEOUT_MS); IWDG_Init(IWDG_TIMEOUT_MS);
logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick()); // logDebug("BSP_Get_Tick1 %d", BSP_Get_Tick());
DelayMs(1000); // DelayMs(1000);
logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick()); // logDebug("BSP_Get_Tick2 %d", BSP_Get_Tick());
// 在连接间隔和广播间隔到来时,会进入回调中喂狗 // 在连接间隔和广播间隔到来时,会进入回调中喂狗
// LL_AdvertiseEventRegister(BLE_AdvertiseEventCB); // LL_AdvertiseEventRegister(BLE_AdvertiseEventCB);

View File

@ -21,7 +21,7 @@
#define RB_WR_PROTECT 0x40000000 // RO, write protect #define RB_WR_PROTECT 0x40000000 // RO, write protect
#define RB_IWDG_EN 0x80000000 // RO, watch-dog enable #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 IWDG_FEED_MS (3000)
#define IWIG_FEED_EVENT (0x01 << 0) #define IWIG_FEED_EVENT (0x01 << 0)

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-12 15:55:38 * @Date : 2024-12-12 15:55:38
* @LastEditors : stark1898y 1658608470@qq.com * @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 * @FilePath : \BLE_TYQ_CH584M\BSP\inc\bsp_valve.h
* @Description : * @Description :
* *
@ -23,14 +23,14 @@ extern tmosTaskID vavle_task_id;
#define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作 #define VAVLE_CLOSE_ACTION_EVT (0x0001 << 3) // 关阀,动作
#define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束 #define VAVLE_CLOSE_END_EVT (0x0001 << 4) // 关阀结束
#define VAVLE_DECT_SWITCH_START_EVT (0x0001 << 5) // 检测电磁铁 #define VAVLE_DECT_SWITCH_START_EVT (0x0001 << 5) // 检测电磁铁
#define VAVLE_DECT_SWITCH_END_EVT (0x0001 << 6) // 检测电磁铁 #define VAVLE_DECT_SWITCH_END_EVT (0x0001 << 6) // 检测电磁铁
#define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 低电压提醒 #define VAVLE_LOW_VBAT_ALARM_EVT (0x0001 << 7) // 低电压提醒
#define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测 #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) // 上传更行阀门状态 #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_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_HEADER 0xAA
#define FRAME_TAIL 0x55 #define FRAME_TAIL 0x55

View File

@ -3,6 +3,8 @@
#include "bsp_uart.h" #include "bsp_uart.h"
#include "log.h" #include "log.h"
#include "SLEEP.h"
#include "bsp_valve.h" #include "bsp_valve.h"
#undef LOG_ENABLE #undef LOG_ENABLE
@ -31,6 +33,10 @@ double voltage = 0;
uint8_t BSP_ReadVbat(void) uint8_t BSP_ReadVbat(void)
{ {
uint8_t i; uint8_t i;
BSP_NoNeedBoost();
DelayMs(1);
// VBAT // VBAT
uint32_t CountBat = 0; uint32_t CountBat = 0;

View File

@ -102,12 +102,12 @@ static tmosEvents LED_Task_ProcessEvent(tmosTaskID taskID, tmosEvents event)
if (event & CONNECT_BEEP_START_EVT) if (event & CONNECT_BEEP_START_EVT)
{ {
logDebug("CONNECT_BEEP_START_EVT"); logDebug("CONNECT_BEEP_START_EVT");
LED_G_ON; // LED_G_ON;
BSP_BlockSleep(); BSP_BlockSleep();
BSP_RequestBoost(); BSP_RequestBoost();
BEEP_ON; 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); return (event ^ CONNECT_BEEP_START_EVT);
} }

View File

@ -37,6 +37,7 @@ uint16_t IWDG_ProcessEvent(uint8_t task_id, uint16_t events)
// logDebug("IWDG feed"); // logDebug("IWDG feed");
// 获取tmos系统堆的剩余内存大小 // 获取tmos系统堆的剩余内存大小
// uint8_t* a = tmos_msg_allocate(1); // uint8_t* a = tmos_msg_allocate(1);
uint32_t tmos_memory_getlen(void);
logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen()); logDebug("tmos_memory_getlen = %d" , tmos_memory_getlen());
// tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS)); // tmos_start_task(task_id, IWIG_FEED_EVENT, MS1_TO_SYSTEM_TIME(IWDG_FEED_MS));
return (events ^ IWIG_FEED_EVENT); return (events ^ IWIG_FEED_EVENT);

View File

@ -36,7 +36,7 @@ static void KEY_Task_ProcessTmosMsg(tmos_event_hdr_t *pMsg)
} }
#if 1 #if 1
// __HIGH_CODE __HIGH_CODE
static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
if (events & SYS_EVENT_MSG) if (events & SYS_EVENT_MSG)

View File

@ -2,7 +2,7 @@
* @Author : stark1898y 1658608470@qq.com * @Author : stark1898y 1658608470@qq.com
* @Date : 2024-12-15 15:01:15 * @Date : 2024-12-15 15:01:15
* @LastEditors : stark1898y 1658608470@qq.com * @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 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
* @Description : * @Description :
* *
@ -11,6 +11,8 @@
#include "bsp_valve.h" #include "bsp_valve.h"
#include "bsp_flash.h" #include "bsp_flash.h"
#include "bsp_i2c.h"
#include "bsp_beep_led_emv.h" #include "bsp_beep_led_emv.h"
// 0xAA CMD/DATA/ DATA_LEN (DATA) checksum 0x55 // 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) if (events & VAVLE_CLOSE_START_EVT)
{ {
logDebug("VAVLE_CLOSE_START_EVT"); logDebug("VAVLE_CLOSE_START_EVT");
DelayMs(1);
BSP_BlockSleep(); BSP_BlockSleep();
BSP_RequestBoost(); BSP_RequestBoost();
DelayUs(200); DelayMs(10);
// EMV_CHARGE
// EMV_CHARGE_EN;
// DelayUs(500);
// EMV_CHARGE_OFF_DEINIT;
// DelayUs(200);
// DelayUs(500);
// EMV_CHARGE_OFF_DEINIT;
// DelayUs(200);
EMV_CHARGE_EN; EMV_CHARGE_EN;
@ -421,7 +413,7 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events)
BSP_RequestBoost(); BSP_RequestBoost();
logDebug("VAVLE_CLOSE_ACTION_EVT"); logDebug("VAVLE_CLOSE_ACTION_EVT");
BOOST_EN; // BOOST_EN;
// EMV_CHARGE_EN; // EMV_CHARGE_EN;
// 关阀动作,一定要先关充电的防止其他12V用电 // 关阀动作,一定要先关充电的防止其他12V用电
EMV_CHARGE_OFF_DEINIT; 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); // 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)); tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
return (events ^ VAVLE_LOOP_DECT_EVT); return (events ^ VAVLE_LOOP_DECT_EVT);