12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include "power_key.h"
- #include "tasks.h"
- Power_KeyStatus_Struct_t Power_KeyStatus = Power_KeyStatus_Init;
- uint32_t Power_KeyCheck_TimeDelay = 0;
- void Power_Key_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- __HAL_RCC_GPIOB_CLK_ENABLE();
-
- //Key PA6
- GPIO_InitStruct.Pin = GPIO_PIN_6;
- GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
- GPIO_InitStruct.Pull = GPIO_PULLUP;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
-
- //Lock PB7
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);
- GPIO_InitStruct.Pin = GPIO_PIN_7;
- GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
-
- }
- void Power_OnOff_Process(void)
- {
- switch(Power_KeyStatus)
- {
- case Power_KeyStatus_Init: //初始状态,检测到按键按下进入OnCheck
- {
- if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_RESET)
- {
- Power_KeyCheck_TimeDelay = HAL_GetTick();
- Power_KeyStatus = Power_KeyStatus_OnCheck;
- }
- break;
- }
- case Power_KeyStatus_OnCheck: //OnCheck状态检测按下时间,到达延时且按键松开进入OnEnd
- {
- if((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET) && (HAL_GetTick() - Power_KeyCheck_TimeDelay) > POWER_ON_TIME)
- {
- Power_KeyStatus = Power_KeyStatus_OnEnd;
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);
- }
- break;
- }
- case Power_KeyStatus_OnEnd: //OnEnd状态检测到按键再次按下,进入OffCheck
- {
- if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_RESET)
- {
- Power_KeyCheck_TimeDelay = HAL_GetTick();
- Power_KeyStatus = Power_KeyStatus_OffCheck;
- }
- break;
- }
- case Power_KeyStatus_OffCheck: //OffCheck状态检测按下时间,到达延时进入Off
- {
- if((HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_6) == GPIO_PIN_SET) && (HAL_GetTick() - Power_KeyCheck_TimeDelay) > POWER_OFF_TIME)
- {
- Power_KeyStatus = Power_KeyStatus_Off;
- }
- break;
- }
- case Power_KeyStatus_Off: //Off关闭自锁,喂狗,关闭所有中断,关闭驱动IO和灯控IO,等待按键松开
- {
- PowerOff_Process(1, FALSE);
- break;
- }
- default:break;
- }
- }
|