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
{
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_ */

View File

@ -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 */

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)
{//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;
}
}

View File

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