master
ThinkPad 2020-04-27 16:58:16 +08:00
parent 4fb8b4ddde
commit bfcc947e66
4 changed files with 66 additions and 33 deletions

View File

@ -12,8 +12,11 @@
typedef struct typedef struct
{ {
bool pwr_button_status; bool system_runing; //系统是否开机
bool pwr_button_pushed; //开关是否被按下
}NaviKit_t; }NaviKit_t;
extern NaviKit_t NaviKit; extern NaviKit_t NaviKit;
void NaviKit_var_init();
#endif /* INC_NAVIKIT_H_ */ #endif /* INC_NAVIKIT_H_ */

View File

@ -154,6 +154,7 @@ void StartDefaultTask(void *argument)
MX_USB_DEVICE_Init(); MX_USB_DEVICE_Init();
/* USER CODE BEGIN StartDefaultTask */ /* USER CODE BEGIN StartDefaultTask */
NaviKit_var_init();
HAL_GPIO_WritePin(ENUM_CTL_GPIO_Port,ENUM_CTL_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(ENUM_CTL_GPIO_Port,ENUM_CTL_Pin, GPIO_PIN_SET);
Beep(50); Beep(50);
/* Infinite loop */ /* Infinite loop */
@ -215,41 +216,65 @@ void StartIWDGRefreshTask(void *argument)
void StartButtonDetect(void *argument) void StartButtonDetect(void *argument)
{ {
/* USER CODE BEGIN StartButtonDetect */ /* 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 */ /* Infinite loop */
for(;;) for(;;)
{ {
if(NaviKit.pwr_button_status != last_pwr_button_status) //长按检测
{ if(NaviKit.pwr_button_pushed == true)
last_pwr_button_status = NaviKit.pwr_button_status; {//按键被按下
Beep(40); osDelay(2000);
HAL_GPIO_TogglePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin); if(NaviKit.pwr_button_pushed == true)
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); if(NaviKit.system_runing == true)
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); NaviKit.system_runing = false;
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_WritePin(USB2_VBUS_CTL_1_GPIO_Port,USB2_VBUS_CTL_1_Pin, GPIO_PIN_RESET);
HAL_GPIO_TogglePin(USB3_VBUS_CTL_2_GPIO_Port,USB3_VBUS_CTL_2_Pin); HAL_GPIO_WritePin(USB2_VBUS_CTL_2_GPIO_Port,USB2_VBUS_CTL_2_Pin, GPIO_PIN_RESET);
HAL_GPIO_TogglePin(USB3_VBUS_CTL_3_GPIO_Port,USB3_VBUS_CTL_3_Pin); HAL_GPIO_WritePin(USB2_VBUS_CTL_3_GPIO_Port,USB2_VBUS_CTL_3_Pin, GPIO_PIN_RESET);
HAL_GPIO_TogglePin(USB3_VBUS_CTL_4_GPIO_Port,USB3_VBUS_CTL_4_Pin); 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); osDelay(10);
} }
/* USER CODE END StartButtonDetect */ /* USER CODE END StartButtonDetect */

View File

@ -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) if(HAL_GPIO_ReadPin(PWR_BUTTON_GPIO_Port, PWR_BUTTON_Pin)==GPIO_PIN_SET)
{//Rising edge trigger {//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) if(HAL_GPIO_ReadPin(PWR_BUTTON_GPIO_Port, PWR_BUTTON_Pin)==GPIO_PIN_RESET)
{//falling edge trigger {//falling edge trigger
NaviKit.pwr_button_status = true; NaviKit.pwr_button_pushed = true;
} }
} }

View File

@ -8,3 +8,8 @@
#include "navikit.h" #include "navikit.h"
NaviKit_t NaviKit; NaviKit_t NaviKit;
void NaviKit_var_init()
{
NaviKit.pwr_button_pushed = false;
NaviKit.system_runing = false;
}