TMR3_CapInit 进睡眠后 key唤醒升压 就出错

This commit is contained in:
stark1898y 2025-05-21 16:03:49 +08:00
parent 1de684d1f7
commit 43d4997130
3 changed files with 51 additions and 114 deletions

View File

@ -31,18 +31,25 @@ __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4];
static uint8_t key_press_cnt = 0; static uint8_t key_press_cnt = 0;
// __HIGH_CODE
void app_task_handler(TeAppEvtType app_evt_type) void app_task_handler(TeAppEvtType app_evt_type)
{ {
BSP_BlockSleep(); FEED_IWDG();
// BSP_BlockSleep();
// BSP_RequestBoost();
BSP_BlockSleep();
BSP_RequestBoost();
#if 1
switch (app_evt_type) switch (app_evt_type)
{ {
case kKeyShort: case kKeyShort:
{
logDebug("button short press"); logDebug("button short press");
key_press_cnt++; key_press_cnt++;
logDebug("key_press_cnt = %d", 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) if (key_press_cnt == 1)
{ {
logDebug("LED显示状态"); 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); // tmos_start_task(led_task_id, LED_SHOW_ONCE_EVT, 1000);
} }
} }
#endif
break; break;
}
case kKeyLong: case kKeyLong:
logDebug("button long press"); logDebug("button long press");
@ -108,6 +116,8 @@ void app_task_handler(TeAppEvtType app_evt_type)
default: default:
break; break;
} }
#endif
} }
/********************************************************************* /*********************************************************************
@ -193,12 +203,14 @@ int main(void)
BSP_BEEP_LED_EMV_Init(); BSP_BEEP_LED_EMV_Init();
GXHTC3C_Init(); GXHTC3C_Init();
BSP_ADC_Init(); BSP_ADC_Init();
BSP_VAVLE_Init();
BSP_BlockSleep(); BSP_BlockSleep();
BSP_RequestBoost(); BSP_RequestBoost();
DelayMs(100); DelayMs(100);
BSP_VAVLE_Init();
ShowLed(); ShowLed();
BEEP_ON; BEEP_ON;
DelayMs(500); DelayMs(500);

View File

@ -6,6 +6,8 @@
#include "SLEEP.h" #include "SLEEP.h"
#include "bsp_valve.h" #include "bsp_valve.h"
#include "bsp_iwdg.h"
// https://www.cnblogs.com/iot-fan/p/14304943.html // https://www.cnblogs.com/iot-fan/p/14304943.html
#undef LOG_ENABLE #undef LOG_ENABLE
@ -34,6 +36,7 @@ static void KEY_Task_ProcessTmosMsg(tmos_event_hdr_t *pMsg)
} }
#if 1 #if 1
// __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)
@ -51,6 +54,8 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
if (events & KEY_SCAN_EVT) if (events & KEY_SCAN_EVT)
{ {
FEED_IWDG();
static volatile uint8_t key_vaild_times = 0; static volatile uint8_t key_vaild_times = 0;
static volatile bool key_vaild_for_long_press = false; static volatile bool key_vaild_for_long_press = false;
if (IS_KEY_Vaild()) if (IS_KEY_Vaild())
@ -63,7 +68,6 @@ static uint16_t KEY_Task_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
p_handler(kKeyLong); p_handler(kKeyLong);
} }
// PRINT("WE should power switch here\r\n");
key_vaild_for_long_press = true; 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; key_timeout_cnt = KEY_TIMOUT_MS / KEY_SACN_MS;
} }
else else
{ // button release {
if (key_vaild_times) if (key_vaild_times)
{ {
if ((key_vaild_times) < (KEY_LONG_PRESS_MS / KEY_SACN_MS)) 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); p_handler(kKeyShort);
} }
key_vaild_times = 0; key_vaild_times = 0;
// PRINT("KEY VAILED\r\n");
} }
key_vaild_for_long_press = false; key_vaild_for_long_press = false;

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-04-22 16:15:33 * @LastEditTime : 2025-05-21 15:56:55
* @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c * @FilePath : \BLE_TYQ_CH584M\BSP\src\bsp_valve.c
* @Description : * @Description :
* *
@ -82,8 +82,8 @@ void VavleDect_Start(void)
TMR3_CapInit(FallEdge_To_FallEdge); TMR3_CapInit(FallEdge_To_FallEdge);
TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms
// TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间 TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0]
TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single); , (uint16_t)(uint32_t)&cap_buf[CAP_BUF_LEN], Mode_Single);
TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断 TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
PFIC_EnableIRQ(TMR3_IRQn); 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) TsFrameData *BSP_VAVLE_GetFrameData(uint8_t *data, uint8_t len)
{ {
int ret = 0; int ret = 0;
@ -362,12 +306,6 @@ void BSP_VALVE_Generate_ValveResponse(TsRawFrameData *pRawData, TeFrameCmd cmd,
// logHexDumpAll(&pRawData->buf[0], pRawData->len); // logHexDumpAll(&pRawData->buf[0], pRawData->len);
} }
void BSP_CloseValve(void)
{
DelayMs(100);
}
static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg) static void VAVLE_Task_ProcessTmosMsg(uint8_t *p_rev_msg)
{ {
if (p_rev_msg) if (p_rev_msg)
@ -660,8 +598,8 @@ void BSP_VAVLE_Init(void)
gValveData.type = kTyq; gValveData.type = kTyq;
gValveData.bat = BSP_ReadVbat(); gValveData.bat = BSP_ReadVbat();
// //立即开始一个event tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS));
// tmos_set_event(vavle_task_id, VAVLE_RX_DATA_EVT);
// PA2 // PA2
/* 定时器3CAP捕捉 */ /* 定时器3CAP捕捉 */
@ -671,13 +609,31 @@ void BSP_VAVLE_Init(void)
// TMR3功能引脚映射选择位 // TMR3功能引脚映射选择位
// 1TMR3_/PWM3_/CAP3_映射到PA[2] // 1TMR3_/PWM3_/CAP3_映射到PA[2]
R16_PIN_ALTERNATE |= (1 << 3); 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); // TMR3_CAPTimeoutCfg(0x3FFFFFF); // 设置捕捉超时时间
// // (1 / 62.4MHz) * 2的26次方 = 0.01602564102564102564102564102564 us * 67108864 约等于 1.0754625641025641025641025641025 S TMR3_DMACfg(ENABLE, (uint16_t)(uint32_t)&cap_buf[0], (uint16_t)(uint32_t)&cap_buf[20], Mode_Single);
// // TMR3_CAPTimeoutCfg(FREQ_SYS ); // 设置捕捉超时时间 TMR3_ITCfg(ENABLE, TMR0_3_IT_DMA_END); // 开启DMA完成中断
// TMR3_CAPTimeoutCfg(GetSysClock() / 100); // 设置捕捉超时时间 10ms 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"); logInfo("BSP_Valve_Init");
} }
@ -702,37 +658,3 @@ void TMR3_IRQHandler(void) // TMR3 定时中断
cap_flag = 1; cap_flag = 1;
} }
} }
#if 0
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_Floating);
// TMR3功能引脚映射选择位
// 1TMR3_/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