From bfcc947e66affcf9e4862e536f84872e68689ffc Mon Sep 17 00:00:00 2001 From: ThinkPad Date: Mon, 27 Apr 2020 16:58:16 +0800 Subject: [PATCH] update --- Core/Inc/navikit.h | 5 ++- Core/Src/freertos.c | 85 +++++++++++++++++++++++++++++---------------- Core/Src/gpio.c | 4 +-- Core/Src/navikit.c | 5 +++ 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/Core/Inc/navikit.h b/Core/Inc/navikit.h index 1590557..b88f757 100644 --- a/Core/Inc/navikit.h +++ b/Core/Inc/navikit.h @@ -12,8 +12,11 @@ typedef struct { - bool pwr_button_status; + bool system_runing; //系统是否开机 + bool pwr_button_pushed; //开关是否被按下 }NaviKit_t; extern NaviKit_t NaviKit; +void NaviKit_var_init(); + #endif /* INC_NAVIKIT_H_ */ diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index c9d2fbf..529ab75 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -154,6 +154,7 @@ void StartDefaultTask(void *argument) MX_USB_DEVICE_Init(); /* USER CODE BEGIN StartDefaultTask */ + NaviKit_var_init(); HAL_GPIO_WritePin(ENUM_CTL_GPIO_Port,ENUM_CTL_Pin, GPIO_PIN_SET); Beep(50); /* Infinite loop */ @@ -215,41 +216,65 @@ void StartIWDGRefreshTask(void *argument) void StartButtonDetect(void *argument) { /* USER CODE BEGIN StartButtonDetect */ - static bool last_pwr_button_status = false; - HAL_GPIO_TogglePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_2_GPIO_Port,USB2_VBUS_CTL_2_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_3_GPIO_Port,USB2_VBUS_CTL_3_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_4_GPIO_Port,USB2_VBUS_CTL_4_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_5_GPIO_Port,USB2_VBUS_CTL_5_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_6_GPIO_Port,USB2_VBUS_CTL_6_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_1_GPIO_Port,USB3_VBUS_CTL_1_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_2_GPIO_Port,USB3_VBUS_CTL_2_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_3_GPIO_Port,USB3_VBUS_CTL_3_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_4_GPIO_Port,USB3_VBUS_CTL_4_Pin); /* Infinite loop */ for(;;) { - if(NaviKit.pwr_button_status != last_pwr_button_status) - { - last_pwr_button_status = NaviKit.pwr_button_status; - Beep(40); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_2_GPIO_Port,USB2_VBUS_CTL_2_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_3_GPIO_Port,USB2_VBUS_CTL_3_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_4_GPIO_Port,USB2_VBUS_CTL_4_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_5_GPIO_Port,USB2_VBUS_CTL_5_Pin); - HAL_GPIO_TogglePin(USB2_VBUS_CTL_6_GPIO_Port,USB2_VBUS_CTL_6_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_1_GPIO_Port,USB3_VBUS_CTL_1_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_2_GPIO_Port,USB3_VBUS_CTL_2_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_3_GPIO_Port,USB3_VBUS_CTL_3_Pin); - HAL_GPIO_TogglePin(USB3_VBUS_CTL_4_GPIO_Port,USB3_VBUS_CTL_4_Pin); + //长按检测 + if(NaviKit.pwr_button_pushed == true) + {//按键被按下 + osDelay(2000); + if(NaviKit.pwr_button_pushed == true) + {//仍被按下 + if(NaviKit.system_runing == true) + {//当前处于开机状态,进行关机操作 + NaviKit.system_runing = false; + + HAL_GPIO_WritePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB2_VBUS_CTL_2_GPIO_Port,USB2_VBUS_CTL_2_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB2_VBUS_CTL_3_GPIO_Port,USB2_VBUS_CTL_3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB2_VBUS_CTL_4_GPIO_Port,USB2_VBUS_CTL_4_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB2_VBUS_CTL_5_GPIO_Port,USB2_VBUS_CTL_5_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB2_VBUS_CTL_6_GPIO_Port,USB2_VBUS_CTL_6_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB3_VBUS_CTL_1_GPIO_Port,USB3_VBUS_CTL_1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB3_VBUS_CTL_2_GPIO_Port,USB3_VBUS_CTL_2_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB3_VBUS_CTL_3_GPIO_Port,USB3_VBUS_CTL_3_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(USB3_VBUS_CTL_4_GPIO_Port,USB3_VBUS_CTL_4_Pin, GPIO_PIN_RESET); + Beep(40); + osDelay(500); + HAL_GPIO_WritePin(BAT_RELAY_CTL_GPIO_Port ,BAT_RELAY_CTL_Pin, GPIO_PIN_RESET); + + } + else + {//当前处于关机状态,进行开机操作 + NaviKit.system_runing = true; + Beep(40); + HAL_GPIO_WritePin(BAT_RELAY_CTL_GPIO_Port ,BAT_RELAY_CTL_Pin, GPIO_PIN_SET); + osDelay(500); + + HAL_GPIO_WritePin(USB2_VBUS_CTL_6_GPIO_Port,USB2_VBUS_CTL_6_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB2_VBUS_CTL_5_GPIO_Port,USB2_VBUS_CTL_5_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB2_VBUS_CTL_4_GPIO_Port,USB2_VBUS_CTL_4_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB2_VBUS_CTL_3_GPIO_Port,USB2_VBUS_CTL_3_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB2_VBUS_CTL_2_GPIO_Port,USB2_VBUS_CTL_2_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB3_VBUS_CTL_4_GPIO_Port,USB3_VBUS_CTL_4_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB3_VBUS_CTL_1_GPIO_Port,USB3_VBUS_CTL_1_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB3_VBUS_CTL_2_GPIO_Port,USB3_VBUS_CTL_2_Pin, GPIO_PIN_SET); + osDelay(500); + HAL_GPIO_WritePin(USB3_VBUS_CTL_3_GPIO_Port,USB3_VBUS_CTL_3_Pin, GPIO_PIN_SET); + } + } } - else - { - last_pwr_button_status = NaviKit.pwr_button_status; - } -// printf("3\n"); + osDelay(10); } /* USER CODE END StartButtonDetect */ diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 122ff98..e748ecd 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -134,11 +134,11 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(HAL_GPIO_ReadPin(PWR_BUTTON_GPIO_Port, PWR_BUTTON_Pin)==GPIO_PIN_SET) {//Rising edge trigger - NaviKit.pwr_button_status = false; + NaviKit.pwr_button_pushed = false; } if(HAL_GPIO_ReadPin(PWR_BUTTON_GPIO_Port, PWR_BUTTON_Pin)==GPIO_PIN_RESET) {//falling edge trigger - NaviKit.pwr_button_status = true; + NaviKit.pwr_button_pushed = true; } } diff --git a/Core/Src/navikit.c b/Core/Src/navikit.c index 759e4a4..7aa8f8d 100644 --- a/Core/Src/navikit.c +++ b/Core/Src/navikit.c @@ -8,3 +8,8 @@ #include "navikit.h" NaviKit_t NaviKit; +void NaviKit_var_init() +{ + NaviKit.pwr_button_pushed = false; + NaviKit.system_runing = false; +}