diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c index 7303cc3..8ed706a 100644 --- a/APP/peripheral_main.c +++ b/APP/peripheral_main.c @@ -31,18 +31,25 @@ __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4]; static uint8_t key_press_cnt = 0; +// __HIGH_CODE void app_task_handler(TeAppEvtType app_evt_type) { - BSP_BlockSleep(); - // BSP_BlockSleep(); - // BSP_RequestBoost(); + FEED_IWDG(); + BSP_BlockSleep(); + BSP_RequestBoost(); + +#if 1 switch (app_evt_type) { case kKeyShort: + { logDebug("button short press"); + key_press_cnt++; logDebug("key_press_cnt = %d", key_press_cnt); + #if 1 + // tmos_set_event(vavle_task_id, VAVLE_DECT_SWITCH_START_EVT); if (key_press_cnt == 1) { logDebug("LED显示状态"); @@ -83,8 +90,9 @@ void app_task_handler(TeAppEvtType app_evt_type) // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000); } } + #endif break; - + } case kKeyLong: logDebug("button long press"); @@ -108,6 +116,8 @@ void app_task_handler(TeAppEvtType app_evt_type) default: break; } +#endif + } /********************************************************************* @@ -193,12 +203,14 @@ int main(void) BSP_BEEP_LED_EMV_Init(); GXHTC3C_Init(); BSP_ADC_Init(); - BSP_VAVLE_Init(); BSP_BlockSleep(); BSP_RequestBoost(); DelayMs(100); + BSP_VAVLE_Init(); + + ShowLed(); BEEP_ON; DelayMs(500); diff --git a/BSP/src/bsp_key.c b/BSP/src/bsp_key.c index 44c0baf..9bb3d05 100644 --- a/BSP/src/bsp_key.c +++ b/BSP/src/bsp_key.c @@ -6,6 +6,8 @@ #include "SLEEP.h" #include "bsp_valve.h" +#include "bsp_iwdg.h" + // https://www.cnblogs.com/iot-fan/p/14304943.html #undef LOG_ENABLE @@ -34,6 +36,7 @@ static void KEY_Task_ProcessTmosMsg(tmos_event_hdr_t *pMsg) } #if 1 +// __HIGH_CODE static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) { if (events & SYS_EVENT_MSG) @@ -51,6 +54,8 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) if (events & KEY_SCAN_EVT) { + FEED_IWDG(); + static volatile uint8_t key_vaild_times = 0; static volatile bool key_vaild_for_long_press = false; if (IS_KEY_Vaild()) @@ -63,7 +68,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) { p_handler(kKeyLong); } - // PRINT("WE should power switch here\r\n"); key_vaild_for_long_press = true; } } @@ -74,7 +78,7 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) key_timeout_cnt = KEY_TIMOUT_MS / KEY_SACN_MS; } else - { // button release + { if (key_vaild_times) { if ((key_vaild_times) < (KEY_LONG_PRESS_MS / KEY_SACN_MS)) @@ -82,7 +86,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events) p_handler(kKeyShort); } key_vaild_times = 0; - // PRINT("KEY VAILED\r\n"); } key_vaild_for_long_press = false; diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c index 7f2bda7..ae61ff4 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-04-22 16:15:33 + * @LastEditTime : 2025-05-21 15:56:55 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c * @Description : * @@ -82,8 +82,8 @@ void VavleDect_Start(void) TMR3_CapInit(FallEdge_To_FallEdge); TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms - // TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间 - TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single); + TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0] + , (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single); TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断 PFIC_EnableIRQ(TMR3_IRQn); @@ -165,62 +165,6 @@ void VavleDect_Switch(void) } } - -#if 0 -/** - * @description: 从接收缓冲区中获取一帧有效数据 - * @param {TsFrameData} *pFrameData 主机帧 - * @param {uint8_t} *p_src 接收缓冲区 - * @param {uint16_t} src_len 接收缓冲区长度 - * @return {*} - */ -TsFrameData *HR_GetFrameData(const uint8_t *p_src, const uint8_t src_len) -{ - uint8_t data_field_len = 0; - uint8_t check_sum = 0; - - TsFrameData *get_buffer = NULL; - - for (uint8_t i = 0; i < src_len; i++) - { - // 找帧头 - if (p_src[i] == FRAME_HEADER) - { - // 找数据长度 - data_field_len = p_src[i + 2]; - // 找帧尾 - if (p_src[i + 2 + data_field_len + 2] == FRAME_TAIL) - { - check_sum = CheckSum(&p_src[i], (3 + data_field_len)); - - if (p_src[i + 2 + data_field_len + 1] == check_sum) - { - get_buffer = (TsFrameData *)tmos_msg_allocate(sizeof(TsFrameData) + sizeof(uint8_t) * data_field_len); - if (get_buffer == NULL) - { - logError("tmos_msg_allocate fail"); - return NULL; - } - get_buffer->cmd = p_src[i + 1]; - get_buffer->len = data_field_len; - - if (data_field_len > 0) - { - tmos_memcmp(get_buffer->data, &p_src[i + 4], data_field_len); - } - logDebug("HR_GetDataFrame Success!"); - - return get_buffer; - } - } - } - } - logError("HR_GetDataFrame Fail!"); - - return get_buffer; -} -#endif - TsFrameData *BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len) { int ret = 0; @@ -362,12 +306,6 @@ void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd, // logHexDumpAll(&pRawData->buf[0], pRawData->len); } -void BSP_CloseValve(void) -{ - - DelayMs(100); -} - static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) { if (p_rev_msg) @@ -660,8 +598,8 @@ void BSP_VAVLE_Init(void) gValveData.type = kTyq; gValveData.bat = BSP_ReadVbat(); - // //立即开始一个event - // tmos_set_event(vavle_task_id, VAVLE_RX_DATA_EVT); + tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); + // PA2 /* 定时器3,CAP捕捉, */ @@ -671,13 +609,31 @@ void BSP_VAVLE_Init(void) // TMR3功能引脚映射选择位: // 1:TMR3_/PWM3_/CAP3_映射到PA[2]; R16_PIN_ALTERNATE |= (1 << 3); + logDebug("TMR3_CapInit 0"); + // TODO:这里进睡眠就出错? +#if 0 + TMR3_CapInit(FallEdge_To_FallEdge); + // (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S + // TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间 + TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms - // TMR3_CapInit(FallEdge_To_FallEdge); - // // (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S - // // TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间 - // TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms + // TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间 + TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[20], Mode_Single); + TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断 + PFIC_EnableIRQ(TMR3_IRQn); - tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); + logDebug("TMR3_CapInit"); + while(cap_flag == 0); + cap_flag = 0; + for(uint8_t i = 0; i < 20; i++) + { + logDebug("%08ld ", cap_buf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平 + uint16_t t = ((cap_buf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000; + uint16_t f = 1000000 / t; + logDebug("T = %04d us, f = %04d Hz", t, f); + BSP_UART1_TxLoop(); + } +#endif logInfo("BSP_Valve_Init"); } @@ -702,37 +658,3 @@ void TMR3_IRQHandler(void) // TMR3 定时中断 cap_flag = 1; } } - -#if 0 - // GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_Floating); - - // TMR3功能引脚映射选择位: - // 1:TMR3_/PWM3_/CAP3_映射到PA[2]; - R16_PIN_ALTERNATE |= (1 << 3); - logDebug("TMR3_CapInit 0"); - - TMR3_CapInit(FallEdge_To_FallEdge); - // (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S - // TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间 - TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms - - // TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间 - TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&CapBuf[0], (uint16_t)(uint32_t)&CapBuf[20], Mode_Single); - TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断 - PFIC_EnableIRQ(TMR3_IRQn); - - logDebug("TMR3_CapInit"); - while(capFlag == 0); - capFlag = 0; - for(uint8_t i = 0; i < 20; i++) - { - logDebug("%08ld ", CapBuf[i] & 0x1ffffff); // 26bit, 最高位表示 高电平还是低电平 - uint16_t t = ((CapBuf[i] & 0x1ffffff) * 1.0f) / FREQ_SYS * 1000000; - uint16_t f = 1000000 / t; - logDebug("T = %04d us, f = %04d Hz", t, f); - BSP_UART1_TxLoop(); - } - - // DelayMs(1000 * 30); - -#endif