master
ThinkPad-T460P 2021-03-10 12:03:49 +08:00
parent 28148e57b4
commit c1c0b6bfbf
14 changed files with 239 additions and 206 deletions

View File

@ -7,6 +7,7 @@
"*.txt": "txt", "*.txt": "txt",
"navikit.h": "c", "navikit.h": "c",
"isp.h": "c", "isp.h": "c",
"cdc.h": "c" "cdc.h": "c",
"th_elog.h": "c"
} }
} }

View File

@ -2,7 +2,7 @@
* @Description: * @Description:
* @Date: 2021-03-10 10:50:02 * @Date: 2021-03-10 10:50:02
* @LastEditors: CK.Zh * @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 10:56:12 * @LastEditTime: 2021-03-10 11:50:39
* @FilePath: \NaviKit_EC_stm32\App\Inc\th_button.h * @FilePath: \NaviKit_EC_stm32\App\Inc\th_button.h
*/ */
#ifndef __TH_BUTTON_H__ #ifndef __TH_BUTTON_H__
@ -27,8 +27,6 @@ const osTimerAttr_t PwrBtnShortPressTimer_attributes;
osTimerId_t CustBtnShortPressTimerHandle; osTimerId_t CustBtnShortPressTimerHandle;
const osTimerAttr_t CustBtnShortPressTimer_attributes; const osTimerAttr_t CustBtnShortPressTimer_attributes;
osTimerId_t IdleStateHoldTimerHandle;
const osTimerAttr_t IdleStateHoldTimer_attributes;
void StartButtonDetect(void *argument); void StartButtonDetect(void *argument);
@ -38,4 +36,5 @@ void CustBtnLongPressTimerCallback(void *argument);
void PwrBtnShortPressTimerCallback(void *argument); void PwrBtnShortPressTimerCallback(void *argument);
void CustBtnShortPressTimerCallback(void *argument); void CustBtnShortPressTimerCallback(void *argument);
#endif #endif

24
App/Inc/th_default.h Normal file
View File

@ -0,0 +1,24 @@
/*
* @Description:
* @Date: 2021-03-10 11:44:17
* @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 11:46:08
* @FilePath: \NaviKit_EC_stm32\App\Inc\th_default.h
*/
#ifndef __TH_DEFAULT_H__
#define __TH_DEFAULT_H__
#include "cmsis_os2.h"
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes;
void StartDefaultTask(void *argument);
osTimerId_t IdleStateHoldTimerHandle;
const osTimerAttr_t IdleStateHoldTimer_attributes;
void IdleStateHoldTimerCallback(void *argument);
#endif

View File

@ -3,6 +3,8 @@
#include "cmsis_os2.h" #include "cmsis_os2.h"
const osMutexAttr_t ElogOutputMutex_attributes;
osThreadId_t ElogInitTaskHandle; osThreadId_t ElogInitTaskHandle;
osThreadId_t ElogFlushTaskHandle; osThreadId_t ElogFlushTaskHandle;

View File

@ -2,7 +2,7 @@
* @Description: * @Description:
* @Date: 2021-03-09 10:21:58 * @Date: 2021-03-09 10:21:58
* @LastEditors: CK.Zh * @LastEditors: CK.Zh
* @LastEditTime: 2021-03-09 17:42:16 * @LastEditTime: 2021-03-10 11:15:23
* @FilePath: \NaviKit_EC_stm32\App\Src\isp.c * @FilePath: \NaviKit_EC_stm32\App\Src\isp.c
*/ */
#include <isp.h> #include <isp.h>
@ -62,6 +62,7 @@ bool ISP_Prepare(){
log_v("Enter to EC update state."); log_v("Enter to EC update state.");
log_i("EC will reboot ,then run ISP automatic."); log_i("EC will reboot ,then run ISP automatic.");
HAL_NVIC_SystemReset(); HAL_NVIC_SystemReset();
return true;
} }
else{ else{
log_e("Backup register writen error, can not enter EC update state."); log_e("Backup register writen error, can not enter EC update state.");

View File

@ -2,7 +2,7 @@
* @Description: * @Description:
* @Date: 2021-03-10 10:49:52 * @Date: 2021-03-10 10:49:52
* @LastEditors: CK.Zh * @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 10:56:58 * @LastEditTime: 2021-03-10 11:57:47
* @FilePath: \NaviKit_EC_stm32\App\Src\th_button.c * @FilePath: \NaviKit_EC_stm32\App\Src\th_button.c
*/ */
#define LOG_TAG "TH-Button" #define LOG_TAG "TH-Button"
@ -31,9 +31,7 @@ const osTimerAttr_t PwrBtnShortPressTimer_attributes = {
const osTimerAttr_t CustBtnShortPressTimer_attributes = { const osTimerAttr_t CustBtnShortPressTimer_attributes = {
.name = "CustBtnShortPressTimer" .name = "CustBtnShortPressTimer"
}; };
const osTimerAttr_t IdleStateHoldTimer_attributes = {
.name = "IdleStateHoldTimer"
};
/* USER CODE BEGIN Header_StartButtonDetect */ /* USER CODE BEGIN Header_StartButtonDetect */
@ -141,9 +139,3 @@ void CustBtnShortPressTimerCallback(void *argument)
default : break; default : break;
} }
} }
void IdleStateHoldTimerCallback(void *argument){
if(NaviKit.sys.sta == idle && NaviKit.sys.next_sta == idle){
log_v("Idle state duration more than 5000ms.");
NaviKit.sys.next_sta = standby;
}
}

View File

@ -24,6 +24,7 @@ void StartCdcMonitorTask(void *argument){
uint8_t port_restart_temp[64]={0}; uint8_t port_restart_temp[64]={0};
uint32_t number_restart_temp =0; uint32_t number_restart_temp =0;
bool beep_flag = false; bool beep_flag = false;
log_v("Start CDC Monitor Task");
for(;;){ for(;;){
if(number_restart){ if(number_restart){
number_restart_temp = number_restart; number_restart_temp = number_restart;

164
App/Src/th_default.c Normal file
View File

@ -0,0 +1,164 @@
/*
* @Description:
* @Date: 2021-03-10 11:43:58
* @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 11:46:56
* @FilePath: \NaviKit_EC_stm32\App\Src\th_default.c
*/
#define LOG_TAG "TH-Default"
#include <th_default.h>
#include "main.h"
#include "navikit.h"
extern void MX_USB_DEVICE_Init(void);
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.priority = (osPriority_t) osPriorityNormal,
.stack_size = 128 * 4
};
const osTimerAttr_t IdleStateHoldTimer_attributes = {
.name = "IdleStateHoldTimer"
};
bool isWakeUpFromReset() { return __HAL_PWR_GET_FLAG(PWR_FLAG_WU);}
/* USER CODE BEGIN Header_StartDefaultTask */
/**
* @brief Function implementing the defaultTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();
/* USER CODE BEGIN StartDefaultTask */
osVersion_t osVersion;
char id_buf[20];
unsigned char id_size=20;
HAL_GPIO_WritePin(USB2_FS_ENUM_CTL_GPIO_Port,USB2_FS_ENUM_CTL_Pin, GPIO_PIN_SET);
if(isWakeUpFromReset()){//judge reset source form "wakeup event"
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
if(HAL_GPIO_ReadPin(SYS_POWER_BTN_GPIO_Port, SYS_POWER_BTN_Pin)==GPIO_PIN_SET){
if(HAL_GPIO_ReadPin(SYS_CUSTOM_BTN_GPIO_Port, SYS_CUSTOM_BTN_Pin)==GPIO_PIN_RESET)
NaviKit.sys.next_sta = dfu;
else{
NaviKit.sys.power_btn = true;
}
log_i("EC Reset source :Power Button WakeUP");
}else{
NaviKit.sys.next_sta = idle;
log_i("EC Reset source :RTC WakeUP");
enter_standby_state();
}
}else{//judge reset source "power on"
log_i("EC Reset source :PowerON");
if(HAL_GPIO_ReadPin(SYS_CUSTOM_BTN_GPIO_Port, SYS_CUSTOM_BTN_Pin)==GPIO_PIN_RESET){
log_d("EC next state isp");
NaviKit.sys.next_sta = isp;
}else{
NaviKit.sys.next_sta = idle;
}
// TaskBeep(50,1);
}
log_i("----------------------------------------------");
log_i("Copyright (c) Powered by www.autolabor.com.cn");
#ifdef DEBUG
log_i("EC Firmware: %s[DEBUG], build: %s, %s",APP_VERSION,__DATE__ ,__TIME__);
#else
log_i("EC Firmware: %s[RELEASE], build: %s, %s",APP_VERSION,__DATE__ ,__TIME__);
#endif
log_i("HAL Version: 0x%X ", HAL_GetHalVersion());
log_i("Revision ID: 0x%X ", HAL_GetREVID());
log_i("Device ID: 0x%X ", HAL_GetDEVID());
log_i("Chip UID: 0x%X%X%X ", HAL_GetUIDw0(),HAL_GetUIDw1(),HAL_GetUIDw2());
if(osOK == osKernelGetInfo(&osVersion,id_buf,id_size)){
log_i("OS Kernel Version: %u ", osVersion.kernel);
log_i("OS Kernel ID: %s ",id_buf);
}
log_i("OS Kernel Tick Frequence: %d ",osKernelGetTickFreq());
log_i("OS Kernel System Timer Frequence: %d ",osKernelGetSysTimerFreq());
log_i("Log Library Version: V%s",ELOG_SW_VERSION);
log_i("Core initial successfully");
log_i("----------------------------------------------");
/* Infinite loop */
for(;;)
{
// HAL_IWDG_Refresh(&hiwdg);
osDelay(20);
if(NaviKit.sys.sta != NaviKit.sys.next_sta){
switch(NaviKit.sys.next_sta){
case standby: {
enter_standby_state();
}break;
case idle: {
enter_idle_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
} break;
case run: {
// if(NaviKit.pmb.rails.main_pwr>19){
enter_run_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
// }else{
// NaviKit.sys.next_sta = NaviKit.sys.sta;
// TaskBeep(500,2);
// log_e(,"Main power not exist, retry after plug in it.");
// log_e("Main power is exception:%dmV",(uint32_t)(NaviKit.pmb.rails.main_pwr*1000));
// }
}break;
case sleep:{
enter_sleep_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
}break;
case dfu:{
// if(NaviKit.pmb.rails.main_pwr>19){
enter_dfu_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
// }else{
// NaviKit.sys.next_sta = NaviKit.sys.sta;
// TaskBeep(500,2);
// log_e(,"Main power not exist, retry after plug in it.");
// log_e("Main power is exception:%dmV",(uint32_t)(NaviKit.pmb.rails.main_pwr*1000));
// }
}break;
case isp:{
enter_isp_state();
NaviKit.sys.sta = NaviKit.sys.next_sta;
}break;
}
}
if(NaviKit.sys.sta == idle && NaviKit.sys.next_sta == idle){//idle state
// if((NaviKit.pmb.sta.chrg_stat1 && NaviKit.pmb.sta.chrg_stat2)
// || (NaviKit.pmb.sta.chrg_stat1 && !NaviKit.pmb.sta.chrg_stat2)){//Not Charge or float charge
// NaviKit.sys.next_sta = standby;
// }
if(!osTimerIsRunning(IdleStateHoldTimerHandle)){
osTimerStart(IdleStateHoldTimerHandle,5000);
}
}
}
/* USER CODE END StartDefaultTask */
}
void IdleStateHoldTimerCallback(void *argument){
if(NaviKit.sys.sta == idle && NaviKit.sys.next_sta == idle){
log_v("Idle state duration more than 5000ms.");
NaviKit.sys.next_sta = standby;
}
}

View File

@ -11,6 +11,9 @@
#include <th_elog.h> #include <th_elog.h>
#include "main.h" #include "main.h"
const osMutexAttr_t ElogOutputMutex_attributes = {
.name = "ElogOutputMutex"
};
const osThreadAttr_t ElogInitTask_attributes = { const osThreadAttr_t ElogInitTask_attributes = {
.name = "ElogInitTask", .name = "ElogInitTask",

View File

@ -12,8 +12,8 @@
* Author: oarap * Author: oarap
*/ */
#ifndef INC_NAVIKIT_H_ #ifndef _NAVIKIT_H_
#define INC_NAVIKIT_H_ #define _NAVIKIT_H_
#include "main.h" #include "main.h"
#include "adc.h" #include "adc.h"

View File

@ -2,7 +2,7 @@
* @Description: * @Description:
* @Date: 2020-04-02 21:44:31 * @Date: 2020-04-02 21:44:31
* @LastEditors: CK.Zh * @LastEditors: CK.Zh
* @LastEditTime: 2021-03-10 10:56:36 * @LastEditTime: 2021-03-10 11:07:48
* @FilePath: \NaviKit_EC_stm32\Core\Src\freertos.c * @FilePath: \NaviKit_EC_stm32\Core\Src\freertos.c
*/ */
/* USER CODE BEGIN Header */ /* USER CODE BEGIN Header */
@ -38,7 +38,7 @@
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
#include "timers.h" #include "timers.h"
#include "navikit.h" #include <th_default.h>
#include <th_cdc.h> #include <th_cdc.h>
#include <th_demo.h> #include <th_demo.h>
#include <th_elog.h> #include <th_elog.h>
@ -69,46 +69,18 @@
/* USER CODE BEGIN Variables */ /* USER CODE BEGIN Variables */
//Thread
//Queue
//osMessageQueueId_t LogMessageQueueHandle;
//const osMessageQueueAttr_t LogMessageQueue_attributes = {
// .name = "LogMessageQueue"
//};
/* USER CODE END Variables */ /* USER CODE END Variables */
/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.priority = (osPriority_t) osPriorityNormal,
.stack_size = 128 * 4
};
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
bool isWakeUpReset() { return __HAL_PWR_GET_FLAG(PWR_FLAG_WU);}
void IdleStateHoldTimerCallback(void *argument);
/* USER CODE END FunctionPrototypes */ /* USER CODE END FunctionPrototypes */
void StartDefaultTask(void *argument);
extern void MX_USB_DEVICE_Init(void);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
/* Hook prototypes */ /* Hook prototypes */
@ -127,7 +99,7 @@ __weak void configureTimerForRunTimeStats(void)
__weak unsigned long getRunTimeCounterValue(void) __weak unsigned long getRunTimeCounterValue(void)
{ {
// return osKernelGetTickCount(); return osKernelGetTickCount();
} }
/* USER CODE END 1 */ /* USER CODE END 1 */
@ -188,12 +160,14 @@ __weak void PostSleepProcessing(uint32_t *ulExpectedIdleTime)
void MX_FREERTOS_Init(void) { void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN Init */ /* USER CODE BEGIN Init */
ElogOutputMutexHandle = osMutexNew(&ElogOutputMutex_attributes);
my_elog_init(); my_elog_init();
NaviKit_var_init(); NaviKit_var_init();
/* USER CODE END Init */ /* USER CODE END Init */
/* USER CODE BEGIN RTOS_MUTEX */ /* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */ /* add mutexes, ... */
/* USER CODE END RTOS_MUTEX */ /* USER CODE END RTOS_MUTEX */
/* USER CODE BEGIN RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_SEMAPHORES */
@ -202,11 +176,11 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_TIMERS */ /* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */ /* start timers, add new ones, ... */
// PwrBtnLongPressTimerHandle = osTimerNew(PwrBtnLongPressTimerCallback, osTimerOnce, NULL, &PwrBtnLongPressTimer_attributes); PwrBtnLongPressTimerHandle = osTimerNew(PwrBtnLongPressTimerCallback, osTimerOnce, NULL, &PwrBtnLongPressTimer_attributes);
// CustBtnLongPressTimerHandle = osTimerNew(CustBtnLongPressTimerCallback, osTimerOnce, NULL, &CustBtnLongPressTimer_attributes); CustBtnLongPressTimerHandle = osTimerNew(CustBtnLongPressTimerCallback, osTimerOnce, NULL, &CustBtnLongPressTimer_attributes);
// PwrBtnShortPressTimerHandle = osTimerNew(PwrBtnShortPressTimerCallback, osTimerOnce, NULL, &PwrBtnShortPressTimer_attributes); PwrBtnShortPressTimerHandle = osTimerNew(PwrBtnShortPressTimerCallback, osTimerOnce, NULL, &PwrBtnShortPressTimer_attributes);
// CustBtnShortPressTimerHandle = osTimerNew(CustBtnShortPressTimerCallback, osTimerOnce, NULL, &CustBtnShortPressTimer_attributes); CustBtnShortPressTimerHandle = osTimerNew(CustBtnShortPressTimerCallback, osTimerOnce, NULL, &CustBtnShortPressTimer_attributes);
// IdleStateHoldTimerHandle = osTimerNew(IdleStateHoldTimerCallback, osTimerOnce, NULL, &IdleStateHoldTimer_attributes); IdleStateHoldTimerHandle = osTimerNew(IdleStateHoldTimerCallback, osTimerOnce, NULL, &IdleStateHoldTimer_attributes);
/* USER CODE END RTOS_TIMERS */ /* USER CODE END RTOS_TIMERS */
@ -218,7 +192,6 @@ void MX_FREERTOS_Init(void) {
/* Create the thread(s) */ /* Create the thread(s) */
/* creation of defaultTask */ /* creation of defaultTask */
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
/* creation of LedBlinkTask */ /* creation of LedBlinkTask */
// LedBlinkTaskHandle = osThreadNew(StartLedBlinkTask, NULL, &LedBlinkTask_attributes); // LedBlinkTaskHandle = osThreadNew(StartLedBlinkTask, NULL, &LedBlinkTask_attributes);
@ -235,20 +208,23 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_THREADS */ /* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */ /* add threads, ... */
//Default Task
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
//Power-------------------------------------------- //Power--------------------------------------------
// PowerMonitTaskHandle = osThreadNew(StartPowerMonitTask, NULL, &PowerMonitTask_attributes); // PowerMonitTaskHandle = osThreadNew(StartPowerMonitTask, NULL, &PowerMonitTask_attributes);
//Button-------------------------------------------- //Button--------------------------------------------
ButtonDetectHandle = osThreadNew(StartButtonDetect, NULL, &ButtonDetect_attributes); // ButtonDetectHandle = osThreadNew(StartButtonDetect, NULL, &ButtonDetect_attributes);
//LED-------------------------------------------- //LED--------------------------------------------
LedBlinkTaskHandle = osThreadNew(StartLedBlinkTask, NULL, &LedBlinkTask_attributes); // LedBlinkTaskHandle = osThreadNew(StartLedBlinkTask, NULL, &LedBlinkTask_attributes);
//CDC-------------------------------------------- //CDC--------------------------------------------
cdcMonitorTaskHandle = osThreadNew(StartCdcMonitorTask, NULL, &cdcMonitorTask_attributes); // cdcMonitorTaskHandle = osThreadNew(StartCdcMonitorTask, NULL, &cdcMonitorTask_attributes);
//Coulomb-------------------------------------------- //Coulomb--------------------------------------------
@ -257,8 +233,9 @@ void MX_FREERTOS_Init(void) {
//Elog-------------------------------------------- //Elog--------------------------------------------
// ElogInitTaskHandle = osThreadNew(StartElogInitTask, NULL, &ElogInitTask_attributes); // ElogInitTaskHandle = osThreadNew(StartElogInitTask, NULL, &ElogInitTask_attributes);
#ifdef ELOG_BUF_OUTPUT_ENABLE
ElogFlushTaskHandle = osThreadNew(StartElogFlushTask, NULL, &ElogFlushTask_attributes); ElogFlushTaskHandle = osThreadNew(StartElogFlushTask, NULL, &ElogFlushTask_attributes);
// ElogOutputMutexHandle = osMutexNew(&ElogOutputMutex_attributes); #endif
//Demo-------------------------------------------- //Demo--------------------------------------------
@ -271,146 +248,11 @@ void MX_FREERTOS_Init(void) {
/* USER CODE BEGIN RTOS_EVENTS */ /* USER CODE BEGIN RTOS_EVENTS */
/* add events, ... */ /* add events, ... */
PwrBtnLongPressTimerHandle = osTimerNew(PwrBtnLongPressTimerCallback, osTimerOnce, NULL, &PwrBtnLongPressTimer_attributes);
CustBtnLongPressTimerHandle = osTimerNew(CustBtnLongPressTimerCallback, osTimerOnce, NULL, &CustBtnLongPressTimer_attributes);
PwrBtnShortPressTimerHandle = osTimerNew(PwrBtnShortPressTimerCallback, osTimerOnce, NULL, &PwrBtnShortPressTimer_attributes);
CustBtnShortPressTimerHandle = osTimerNew(CustBtnShortPressTimerCallback, osTimerOnce, NULL, &CustBtnShortPressTimer_attributes);
IdleStateHoldTimerHandle = osTimerNew(IdleStateHoldTimerCallback, osTimerOnce, NULL, &IdleStateHoldTimer_attributes);
/* USER CODE END RTOS_EVENTS */ /* USER CODE END RTOS_EVENTS */
} }
/* USER CODE BEGIN Header_StartDefaultTask */
/**
* @brief Function implementing the defaultTask thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* init code for USB_DEVICE */
MX_USB_DEVICE_Init();
/* USER CODE BEGIN StartDefaultTask */
osVersion_t osVersion;
char id_buf[20];
unsigned char id_size=20;
HAL_GPIO_WritePin(USB2_FS_ENUM_CTL_GPIO_Port,USB2_FS_ENUM_CTL_Pin, GPIO_PIN_SET);
if(isWakeUpReset()){//judge reset source form "wakeup event"
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
if(HAL_GPIO_ReadPin(SYS_POWER_BTN_GPIO_Port, SYS_POWER_BTN_Pin)==GPIO_PIN_SET){
if(HAL_GPIO_ReadPin(SYS_CUSTOM_BTN_GPIO_Port, SYS_CUSTOM_BTN_Pin)==GPIO_PIN_RESET)
NaviKit.sys.next_sta = dfu;
else{
NaviKit.sys.power_btn = true;
}
log_i("EC Reset source :Power Button WakeUP");
}else{
NaviKit.sys.next_sta = idle;
log_i("EC Reset source :RTC WakeUP");
enter_standby_state();
}
}else{//judge reset source "power on"
log_i("EC Reset source :PowerON");
if(HAL_GPIO_ReadPin(SYS_CUSTOM_BTN_GPIO_Port, SYS_CUSTOM_BTN_Pin)==GPIO_PIN_RESET){
log_d("EC next state isp");
NaviKit.sys.next_sta = isp;
}else{
NaviKit.sys.next_sta = idle;
}
// TaskBeep(50,1);
}
log_i("----------------------------------------------");
log_i("Copyright (c) Powered by www.autolabor.com.cn");
#ifdef DEBUG
log_i("EC Firmware: %s[DEBUG], build: %s, %s",APP_VERSION,__DATE__ ,__TIME__);
#else
log_i("EC Firmware: %s[RELEASE], build: %s, %s",APP_VERSION,__DATE__ ,__TIME__);
#endif
log_i("HAL Version: 0x%X ", HAL_GetHalVersion());
log_i("Revision ID: 0x%X ", HAL_GetREVID());
log_i("Device ID: 0x%X ", HAL_GetDEVID());
log_i("Chip UID: 0x%X%X%X ", HAL_GetUIDw0(),HAL_GetUIDw1(),HAL_GetUIDw2());
if(osOK == osKernelGetInfo(&osVersion,id_buf,id_size)){
log_i("OS Kernel Version: %u ", osVersion.kernel);
log_i("OS Kernel ID: %s ",id_buf);
}
log_i("OS Kernel Tick Frequence: %d ",osKernelGetTickFreq());
log_i("OS Kernel System Timer Frequence: %d ",osKernelGetSysTimerFreq());
log_i("Log Library Version: V%s",ELOG_SW_VERSION);
log_i("Core initial successfully");
log_i("----------------------------------------------");
/* Infinite loop */
for(;;)
{
// HAL_IWDG_Refresh(&hiwdg);
osDelay(20);
if(NaviKit.sys.sta != NaviKit.sys.next_sta){
switch(NaviKit.sys.next_sta){
case standby: {
enter_standby_state();
}break;
case idle: {
enter_idle_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
} break;
case run: {
// if(NaviKit.pmb.rails.main_pwr>19){
enter_run_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
// }else{
// NaviKit.sys.next_sta = NaviKit.sys.sta;
// TaskBeep(500,2);
// log_e(,"Main power not exist, retry after plug in it.");
// log_e("Main power is exception:%dmV",(uint32_t)(NaviKit.pmb.rails.main_pwr*1000));
// }
}break;
case sleep:{
enter_sleep_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
}break;
case dfu:{
// if(NaviKit.pmb.rails.main_pwr>19){
enter_dfu_state(100);
NaviKit.sys.sta = NaviKit.sys.next_sta;
// }else{
// NaviKit.sys.next_sta = NaviKit.sys.sta;
// TaskBeep(500,2);
// log_e(,"Main power not exist, retry after plug in it.");
// log_e("Main power is exception:%dmV",(uint32_t)(NaviKit.pmb.rails.main_pwr*1000));
// }
}break;
case isp:{
enter_isp_state();
NaviKit.sys.sta = NaviKit.sys.next_sta;
}break;
}
}
if(NaviKit.sys.sta == idle && NaviKit.sys.next_sta == idle){//idle state
// if((NaviKit.pmb.sta.chrg_stat1 && NaviKit.pmb.sta.chrg_stat2)
// || (NaviKit.pmb.sta.chrg_stat1 && !NaviKit.pmb.sta.chrg_stat2)){//Not Charge or float charge
// NaviKit.sys.next_sta = standby;
// }
if(!osTimerIsRunning(IdleStateHoldTimerHandle)){
osTimerStart(IdleStateHoldTimerHandle,5000);
}
}
}
/* USER CODE END StartDefaultTask */
}

View File

@ -22,7 +22,6 @@ void NaviKit_var_init()
{ {
NaviKit.sys.sta = idle; NaviKit.sys.sta = idle;
NaviKit.sys.next_sta = idle; NaviKit.sys.next_sta = idle;
} }
void TaskBeep(uint32_t time_ms , uint8_t n) void TaskBeep(uint32_t time_ms , uint8_t n)
@ -102,7 +101,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
void enter_standby_state(){ void enter_standby_state(){
log_i("Enter to STANDBY Mode to save power, see you!"); log_i("EC enter to STANDBY Mode to save power, see you!");
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//Enable PA0 wakeup function HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//Enable PA0 wakeup function
__HAL_RCC_RTC_DISABLE(); __HAL_RCC_RTC_DISABLE();
HAL_PWR_EnterSTANDBYMode(); HAL_PWR_EnterSTANDBYMode();

View File

@ -52,7 +52,7 @@ ARM.CMSIS.5.6.0.CMSISOoDriverJjWiFiJjCustom=true
ARM.CMSIS.5.6.0.DeviceJjIRQOoControllerJjGIC=true ARM.CMSIS.5.6.0.DeviceJjIRQOoControllerJjGIC=true
ARM.CMSIS.5.6.0.DeviceJjOSOoTickJjPrivateOoTimer=true ARM.CMSIS.5.6.0.DeviceJjOSOoTickJjPrivateOoTimer=true
ARM.CMSIS.5.6.0.DeviceJjStartup=COoStartup ARM.CMSIS.5.6.0.DeviceJjStartup=COoStartup
ARM.CMSIS.5.6.0.IPParameters=CMSISJjNNOoLib,DeviceJjIRQOoControllerJjGIC,DeviceJjOSOoTickJjPrivateOoTimer,CMSISOoDriverJjUSARTJjCustom,CMSISOoDriverJjSPIJjCustom,CMSISOoDriverJjSAIJjCustom,CMSISOoDriverJjI2CJjCustom,CMSISOoDriverJjCANJjCustom,CMSISOoDriverJjFlashJjCustom,CMSISOoDriverJjMCIJjCustom,CMSISOoDriverJjNANDJjCustom,CMSISOoDriverJjEthernetJjCustom,CMSISOoDriverJjEthernetOoMACJjCustom,CMSISOoDriverJjEthernetOoPHYJjCustom,CMSISOoDriverJjUSBOoDeviceJjCustom,CMSISOoDriverJjUSBOoHostJjCustom,CMSISOoDriverJjWiFiJjCustom,CMSISJjDSP,DeviceJjStartup ARM.CMSIS.5.6.0.IPParameters=DeviceJjIRQOoControllerJjGIC,DeviceJjOSOoTickJjPrivateOoTimer,CMSISJjNNOoLib,CMSISOoDriverJjUSARTJjCustom,CMSISOoDriverJjSPIJjCustom,CMSISOoDriverJjSAIJjCustom,CMSISOoDriverJjI2CJjCustom,CMSISOoDriverJjCANJjCustom,CMSISOoDriverJjFlashJjCustom,CMSISOoDriverJjMCIJjCustom,CMSISOoDriverJjNANDJjCustom,CMSISOoDriverJjEthernetJjCustom,CMSISOoDriverJjEthernetOoMACJjCustom,CMSISOoDriverJjEthernetOoPHYJjCustom,CMSISOoDriverJjUSBOoDeviceJjCustom,CMSISOoDriverJjUSBOoHostJjCustom,CMSISOoDriverJjWiFiJjCustom,DeviceJjStartup,CMSISJjDSP
ARM.CMSIS.5.6.0_SwParameter=CMSISOoDriverJjUSARTJjCustom\:true;DeviceJjOSOoTickJjPrivateOoTimer\:true;CMSISOoDriverJjUSBOoDeviceJjCustom\:true;CMSISOoDriverJjCANJjCustom\:true;CMSISOoDriverJjFlashJjCustom\:true;CMSISOoDriverJjNANDJjCustom\:true;CMSISOoDriverJjEthernetJjCustom\:true;CMSISOoDriverJjEthernetOoMACJjCustom\:true;CMSISOoDriverJjUSBOoHostJjCustom\:true;CMSISOoDriverJjSAIJjCustom\:true;CMSISOoDriverJjWiFiJjCustom\:true;CMSISJjDSP\:Library;CMSISOoDriverJjSPIJjCustom\:true;CMSISOoDriverJjMCIJjCustom\:true;CMSISOoDriverJjEthernetOoPHYJjCustom\:true;DeviceJjIRQOoControllerJjGIC\:true;CMSISJjNNOoLib\:true;DeviceJjStartup\:COoStartup;CMSISOoDriverJjI2CJjCustom\:true; ARM.CMSIS.5.6.0_SwParameter=CMSISOoDriverJjUSARTJjCustom\:true;DeviceJjOSOoTickJjPrivateOoTimer\:true;CMSISOoDriverJjUSBOoDeviceJjCustom\:true;CMSISOoDriverJjCANJjCustom\:true;CMSISOoDriverJjFlashJjCustom\:true;CMSISOoDriverJjNANDJjCustom\:true;CMSISOoDriverJjEthernetJjCustom\:true;CMSISOoDriverJjEthernetOoMACJjCustom\:true;CMSISOoDriverJjUSBOoHostJjCustom\:true;CMSISOoDriverJjSAIJjCustom\:true;CMSISOoDriverJjWiFiJjCustom\:true;CMSISJjDSP\:Library;CMSISOoDriverJjSPIJjCustom\:true;CMSISOoDriverJjMCIJjCustom\:true;CMSISOoDriverJjEthernetOoPHYJjCustom\:true;DeviceJjIRQOoControllerJjGIC\:true;CMSISJjNNOoLib\:true;DeviceJjStartup\:COoStartup;CMSISOoDriverJjI2CJjCustom\:true;
Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.ADC1.0.Instance=DMA1_Channel1 Dma.ADC1.0.Instance=DMA1_Channel1
@ -75,7 +75,7 @@ FREERTOS.INCLUDE_xTaskAbortDelay=1
FREERTOS.INCLUDE_xTaskGetCurrentTaskHandle=1 FREERTOS.INCLUDE_xTaskGetCurrentTaskHandle=1
FREERTOS.INCLUDE_xTaskGetHandle=1 FREERTOS.INCLUDE_xTaskGetHandle=1
FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configUSE_TICKLESS_IDLE,INCLUDE_xTaskGetCurrentTaskHandle,INCLUDE_xTaskGetHandle,configUSE_APPLICATION_TASK_TAG,FootprintOK,configUSE_IDLE_HOOK,configUSE_TICK_HOOK,configUSE_MALLOC_FAILED_HOOK,configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS,configUSE_TRACE_FACILITY,HEAP_NUMBER,configTOTAL_HEAP_SIZE,configCHECK_FOR_STACK_OVERFLOW,configUSE_TASK_NOTIFICATIONS,INCLUDE_xTaskAbortDelay,INCLUDE_xEventGroupSetBitFromISR,INCLUDE_xSemaphoreGetMutexHolder,INCLUDE_pcTaskGetTaskName,INCLUDE_vTaskCleanUpResources FREERTOS.IPParameters=Tasks01,configMAX_TASK_NAME_LEN,configUSE_TICKLESS_IDLE,INCLUDE_xTaskGetCurrentTaskHandle,INCLUDE_xTaskGetHandle,configUSE_APPLICATION_TASK_TAG,FootprintOK,configUSE_IDLE_HOOK,configUSE_TICK_HOOK,configUSE_MALLOC_FAILED_HOOK,configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS,configUSE_TRACE_FACILITY,HEAP_NUMBER,configTOTAL_HEAP_SIZE,configCHECK_FOR_STACK_OVERFLOW,configUSE_TASK_NOTIFICATIONS,INCLUDE_xTaskAbortDelay,INCLUDE_xEventGroupSetBitFromISR,INCLUDE_xSemaphoreGetMutexHolder,INCLUDE_pcTaskGetTaskName,INCLUDE_vTaskCleanUpResources
FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;LedBlinkTask,8,128,StartLedBlinkTask,Default,NULL,Dynamic,NULL,NULL;CoulombRead,8,128,StartCoulombRead,Default,NULL,Dynamic,NULL,NULL;PowerMonitTask,8,128,StartPowerMonitTask,Default,NULL,Dynamic,NULL,NULL;EventDetect,8,128,StartEventDetect,Default,NULL,Dynamic,NULL,NULL FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1 FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1
FREERTOS.configGENERATE_RUN_TIME_STATS=1 FREERTOS.configGENERATE_RUN_TIME_STATS=1
FREERTOS.configMAX_TASK_NAME_LEN=32 FREERTOS.configMAX_TASK_NAME_LEN=32
@ -188,8 +188,8 @@ Mcu.ThirdParty0=ARM.CMSIS.5.6.0
Mcu.ThirdPartyNb=1 Mcu.ThirdPartyNb=1
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32F107VCTx Mcu.UserName=STM32F107VCTx
MxCube.Version=6.1.0 MxCube.Version=6.2.0
MxDb.Version=DB.6.0.10 MxDb.Version=DB.6.0.20
NVIC.ADC1_2_IRQn=true\:5\:0\:false\:true\:true\:8\:true\:true\:true NVIC.ADC1_2_IRQn=true\:5\:0\:false\:true\:true\:8\:true\:true\:true
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.DMA1_Channel1_IRQn=true\:5\:0\:false\:true\:true\:9\:true\:false\:true NVIC.DMA1_Channel1_IRQn=true\:5\:0\:false\:true\:true\:9\:true\:false\:true
@ -558,8 +558,8 @@ ProjectManager.MainLocation=Core/Src
ProjectManager.NoMain=false ProjectManager.NoMain=false
ProjectManager.PreviousToolchain= ProjectManager.PreviousToolchain=
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=NaviKit_stm32.ioc ProjectManager.ProjectFileName=NaviKit_EC_stm32.ioc
ProjectManager.ProjectName=NaviKit_stm32 ProjectManager.ProjectName=NaviKit_EC_stm32
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x800 ProjectManager.StackSize=0x800
ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.TargetToolchain=STM32CubeIDE
@ -652,4 +652,4 @@ VP_SYS_VS_tim1.Signal=SYS_VS_tim1
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
board=custom board=custom
isbadioc=false isbadioc=true

View File

@ -3,7 +3,7 @@
* @Author: CK.Zh * @Author: CK.Zh
* @Date: 2020-02-20 11:39:38 * @Date: 2020-02-20 11:39:38
* @LastEditors: CK.Zh * @LastEditors: CK.Zh
* @LastEditTime: 2021-02-05 18:22:00 * @LastEditTime: 2021-03-10 11:40:42
--> -->
# NaviKit_stm32 # NaviKit_stm32
PM1导航套件中电源控制板源码STM32F107VCT6开发环境STM32CubeIDE PM1导航套件中电源控制板源码STM32F107VCT6开发环境STM32CubeIDE
@ -28,11 +28,16 @@
# Note # Note
在使用usb的时候 在使用usb的时候
`stm32f1xx_hal_pcd.c`文件内 文件`stm32f1xx_hal_pcd.c`
`void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)`函数内 函数`void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)`
`HAL_PCD_SuspendCallback(hpcd); `代码段 务必屏蔽,否则导致枚举失败,提示获取设备描述符失败。 代码段`HAL_PCD_SuspendCallback(hpcd); ` 务必屏蔽,否则导致枚举失败,提示获取设备描述符失败。
> EC日志输出口波特率为56000bps > EC日志输出口波特率为56000bps
# 维护指南
* 为提高可移植性、可维护性、可阅读性,开发(应用层)时尽量使用`CMSIS_OS2`的抽象接口特殊情况时再考虑使用RTOS的原生接口
* 线程任务实例及属性、句柄的声明及定义,独立存放在`App`文件夹
* 线程、定时器、事件标志、互斥锁、信号量、消息队列等功能的初始化统一在`freertos.c`文件中进行初始化(内核启动前的预装载)
* `freertos.c`中的任务实体只保留默认任务即可
# 勘误 # 勘误
硬件的v1.0以前版本中SYS_RESET脚和MOD_SLEEP到单片机的实际连接与网络标号是相反的问题发生在TXB0108PWR芯片附近故代码中在GPIO处进行了相反的设置。 硬件的v1.0以前版本中SYS_RESET脚和MOD_SLEEP到单片机的实际连接与网络标号是相反的问题发生在TXB0108PWR芯片附近故代码中在GPIO处进行了相反的设置。