From 0a51ba710bc079a2a87d07558656ba8edbbd4761 Mon Sep 17 00:00:00 2001 From: stark1898y <1658608470@qq.com> Date: Wed, 21 May 2025 18:33:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP/peripheral_main.c | 7 +++++ BSP/inc/bsp_valve.h | 3 ++ BSP/src/bsp_valve.c | 70 ++++++++++++++++++++++++++++++++++++++----- HAL/SLEEP.c | 14 +++++++-- 4 files changed, 85 insertions(+), 9 deletions(-) diff --git a/APP/peripheral_main.c b/APP/peripheral_main.c index 8bed548..9fbf2d8 100644 --- a/APP/peripheral_main.c +++ b/APP/peripheral_main.c @@ -38,6 +38,7 @@ void app_task_handler(TeAppEvtType app_evt_type) BSP_BlockSleep(); BSP_RequestBoost(); + logDebug("BSP_RequestBoost"); #if 1 switch (app_evt_type) @@ -46,6 +47,10 @@ void app_task_handler(TeAppEvtType app_evt_type) { logDebug("button short press"); + DelayMs(30); + LDect_Init(); + logDebug("LDect_Init"); + key_press_cnt++; logDebug("key_press_cnt = %d", key_press_cnt); #if 1 @@ -107,6 +112,8 @@ void app_task_handler(TeAppEvtType app_evt_type) LED_ALL_OFF_DEINIT; BEEP_OFF_DEINIT; + LDect_Deinit(); + BSP_NoNeedBoost(); BSP_RequestSleep(); diff --git a/BSP/inc/bsp_valve.h b/BSP/inc/bsp_valve.h index ba42bc7..f700686 100644 --- a/BSP/inc/bsp_valve.h +++ b/BSP/inc/bsp_valve.h @@ -117,6 +117,9 @@ typedef struct __attribute__((packed)) } TsValveData; extern TsValveData gValveData; +void LDect_Deinit(void); +void LDect_Init(void); + uint8_t CheckSum(const uint8_t *data, size_t len); void VavleDect_Switch(void); diff --git a/BSP/src/bsp_valve.c b/BSP/src/bsp_valve.c index 2504f31..2dff3a4 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-21 16:23:23 + * @LastEditTime : 2025-05-21 17:23:23 * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c * @Description : * @@ -583,6 +583,56 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) return 0; } +void LDect_Deinit(void) +{ + // 休眠时候,这里下拉输入 + GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PD); +} + +void LDect_IoInit(void) +{ + // PA2 + /* 定时器3,CAP捕捉, */ + GPIOA_ResetBits(GPIO_Pin_2); + GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PU); +} + +void LDect_Init(void) +{ + // 退出休眠需要重新设置 +#if 1 + + // 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(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); + + LDect_IoInit(); + + 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 +} + void BSP_VAVLE_Init(void) { vavle_task_id = TMOS_ProcessEventRegister(VAVLE_Task_ProcessEvent); @@ -600,7 +650,8 @@ void BSP_VAVLE_Init(void) tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); - + LDect_Init(); +#if 0 // PA2 /* 定时器3,CAP捕捉, */ GPIOA_ResetBits(GPIO_Pin_2); @@ -611,13 +662,9 @@ void BSP_VAVLE_Init(void) 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 ); // 设置捕捉超时时间 -#if 0 - // TODO:这里进睡眠就出错? - // 在这里偶发重启 RST_FLAG_RPOR + TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms // TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间 @@ -638,6 +685,15 @@ void BSP_VAVLE_Init(void) } #endif + // R8_TMR3_CTRL_MOD = RB_TMR_ALL_CLEAR; + // TMR3_Disable(); + // // TMR3_ITCfg(DISABLE, TMR0_3_IT_DMA_END); // 关闭DMA完成中断 + // PFIC_DisableIRQ(TMR3_IRQn); + + // GPIOA_ResetBits(GPIO_Pin_2); + // TODO:问题出在这里,这里会导致出错 + LDect_Deinit(); + logInfo("BSP_Valve_Init"); } diff --git a/HAL/SLEEP.c b/HAL/SLEEP.c index e5121d2..4669076 100644 --- a/HAL/SLEEP.c +++ b/HAL/SLEEP.c @@ -45,6 +45,8 @@ void BSP_BlockSleep(void) __HIGH_CODE void BSP_RequestBoost(void) { + // LDect_Init(); + BOOST_EN; block_boost_flag = false; } @@ -53,6 +55,9 @@ __HIGH_CODE void BSP_NoNeedBoost(void) { block_boost_flag = true; + LDect_Deinit(); + + BOOST_OFF_DEINIT; } @@ -73,17 +78,22 @@ uint32_t CH58x_LowPower(uint32_t time) // BSP_UART1_TxLowPower(); if (block_boost_flag == false) { - BOOST_EN; + // LDect_Init(); + + // BOOST_EN; } else { - BOOST_OFF_DEINIT; + // LDect_Deinit(); + + // BOOST_OFF_DEINIT; } if (true == block_sleep_flag) { // logDebug("block_sleep"); return 0; } + LDect_Deinit(); #if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE) volatile uint32_t i; uint32_t time_tign, time_sleep, time_curr;