20230731_XiaoFuZi_emb/ZheDaXiaoFuZi/Src/Usr/Task/McuTaskLowPower.c
Rjh913828050 b0e4bfe45a 类型:更新
内容:浙大小浮子项目下位机软件第一版完整程序
人员:任家豪
2024-07-31 08:52:45 +08:00

366 lines
20 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "McuTaskLowPower.h"
#include "McuTaskImu.h"
#include "McuTaskInpara.h"
#include "McuTaskManyPara.h"
#include "McuTaskPosition.h"
#include "McuTaskBlueTooth.h"
#include "McuTaskFlash.h"
#include "McuBspGpio.h"
#include "McuBspRtc.h"
#include "McuBspAdc.h"
#include "McuBspGpio.h"
#include "McuBspI2c.h"
#include "McuBspSpi.h"
#include "McuBspTimer.h"
#include "McuBspUart.h"
#include "McuBspSys.h"
#include "BeiDouHtyDrv.h"
#include "Usr_4GCatDtuDrv.h"
static uint8_t gMcuTaskLowerPowerPeriod = 1;
static uint8_t gMcuTaskPeriod = 1;
static uint32_t gMcuTaskCount = 0;
static uint8_t gMcuTaskLowerPowerMode = 0;
static uint8_t gMcuTaskLowerPowerBlth = 0;
static uint8_t gMcuTaskRestartBlue = 0;
static void McuTaskLowPowerWakeUpCallback(void);
static void McuTaskLowPowerEndRtcAlarm(void);
static void McuTaskLowPowerStartRTCAlarm(void);
void McuTaskLowPowerSetPeriod(uint8_t Period)
{
if (Period != 0) {
if ((24 % Period) != 0) {
McuTaskLowPowerStartRTCAlarm();
return;
}
} else {
return;
}
gMcuTaskPeriod = Period;
McuTaskLowPowerStartRTCAlarm();
}
/* 低功耗进入 */
void McuTaskLowPowerJoin(void)
{
uint8_t mode = 0;
mode = TaskBlueToothGetAppMode();
if (mode == 0) {
McuTaskLowPowerEndRtcAlarm();
} else {
McuTaskLowPowerStartRTCAlarm();
}
/* 进入低功耗之前的处理*/
// McuTaskFlashJoinLowerPow();
McuBspTimerSleep(); // 定时器低功耗
McuBspAdcSleep(); // ADC低功耗
McuBspI2cSleep(); // I2C低功耗
McuBspSpiSleep(); // SPI低功耗
HAL_Delay(5000);
McuBspUartSleep(); // 串口低功耗
McuTaskBlueToothSleep(); // 蓝牙低功耗
McuBspGpioSleep(); // GPIO低功耗
HAL_SuspendTick();
gMcuTaskLowerPowerMode = 1;
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
HAL_ResumeTick();
McuBspGpioWakeUp();
McuTaskBlueToothWakeUp();
if (gMcuTaskRestartBlue == 1) {
TaskBlueToothRestart();
gMcuTaskRestartBlue = 0;
}
McuBspUart1WakeUp();
McuBspUart2WakeUp();
McuBspUart3WakeUp();
McuBspUart4WakeUp();
McuBspTimerWakeUp();
McuBspSpiWakeUp();
McuBspI2cWakeUp();
McuBspAdcWakeUp();
// McuTaskFlashJoinUperPow();
if ((McuTaskImuAskStatus() & 0x01) || (McuTaskInParaAskStatus() & 0x01) ||
(McuTaskManyParaAskStatus() & 0x01) || (McuTaskPositionAskStatus() & 0x01)) {
int qos = -1;
int j = 0;
/* 关闭北斗 */
McuDrvBeiDouHtyClosePower();
/* 打开4G通信 */
if (0 == McuDrv4GCatDtuPowerSta()) {
McuDrv4GCatDtuOpenPower();
}
for (j = 0; j < 6; j++) {
HAL_Delay(10000);
if (0 != TaskBlueToothGetBluetoothMode()) {
TaskBlueToothNewTimer();
}
}
/* 判断4G信号质量 */
qos = McuDrv4GCatDtuSta();
if (qos > 0 && qos < 99) {
/* 4G通信 */
} else {
/* 断开4G通信 */
// McuDrv4GCatDtuClosePower();
// /* 打开北斗通信 */
// if (0 == McuDrvBeiDouHtyPowerSta()) {
// McuDrvBeiDouHtyOpenPower();
// }
// for (j = 0; j < 6; j++) {
// HAL_Delay(10000);
// if (0 != TaskBlueToothGetBluetoothMode()) {
// TaskBlueToothNewTimer();
// }
// }
}
}
}
/* 进入休眠 */
void McuTaskSleep(void)
{
// McuTaskFlashJoinLowerPow();
McuTaskLowPowerEndRtcAlarm();
McuTaskLowPowerInit();
McuBspTimerSleep(); // 定时器低功耗
McuBspAdcSleep(); // ADC低功耗
McuBspI2cSleep(); // I2C低功耗
McuBspSpiSleep(); // SPI低功耗
HAL_Delay(5000);
McuBspUartSleep(); // 串口低功耗
McuTaskBlueToothSleep(); // 蓝牙低功耗
McuBspGpioSleep(); // GPIO低功耗
HAL_SuspendTick();
gMcuTaskLowerPowerMode = 1;
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
HAL_ResumeTick();
McuBspGpioWakeUp();
McuBspSpiWakeUp();
McuTaskBlueToothWakeUp();
//McuTaskLowPowerStartRTCAlarm();
//McuTaskFlashJoinUperPow();
}
void McuTaskLowPowerSetGpioCallback(void)
{
/* 初始化系统时钟由于唤醒时候时钟会切换为HSI */
if (gMcuTaskLowerPowerMode == 1) {
McuBspSysClockInit();
gMcuTaskLowerPowerMode = 0;
}
/* 初始化蓝牙串口 */
McuBspUart5WakeUp();
//McuTaskBlueToothWakeUp();
McuTaskLowPowerSetLowerPowerBlth(1);
TaskBlueToothNewTimer();
}
void McuTaskLowPowerSetLowerPowerBlth(uint8_t Flag)
{
if (Flag == 0) {
gMcuTaskLowerPowerBlth = 0;
} else {
gMcuTaskLowerPowerBlth = 1;
}
}
uint8_t McuTaskLowPowerGetLowerPowerBlth(void)
{
return gMcuTaskLowerPowerBlth;
}
static void McuTaskLowPowerStartRTCAlarm(void)
{
McuBspRtcStartAlarm(gMcuTaskLowerPowerPeriod, McuTaskLowPowerWakeUpCallback);
}
static void McuTaskLowPowerEndRtcAlarm(void)
{
McuBspRtcEndAlarm();
}
void McuTaskLowPowerInit(void)
{
/* GPIO初始化未使用的引脚 */
McuBspGpioInit(GPIOE, GPIO_PIN_2, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE2没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE4没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE5没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE6没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_13, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC13没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF0没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF1没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_2, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF2没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_3, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF3没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF4没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF5没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF6没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_7, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF7没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF8没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF9没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_10, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF10没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC1没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_2, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC2没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_3, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC3没有被使用
McuBspGpioInit(GPIOA, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA0没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC4没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC5没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_11, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF11没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_13, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF13没有被使用
McuBspGpioInit(GPIOF, GPIO_PIN_14, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PF14没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG0没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_7, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE7没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE9作为外部开关
McuBspGpioInit(GPIOE, GPIO_PIN_14, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE14没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_15, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE15没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_14, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB14没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_15, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB15没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_10, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD10没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_11, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD11没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_12, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD12没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_13, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD13没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG6
McuBspGpioInit(GPIOG, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG8
McuBspGpioInit(GPIOC, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC6没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_7, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC7没有被使用
McuBspGpioInit(GPIOC, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC8没有被使用
McuBspGpioInit(GPIOA, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA8没有被使用
McuBspGpioInit(GPIOA, GPIO_PIN_11, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA11没有被使用
McuBspGpioInit(GPIOA, GPIO_PIN_12, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA12没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD0没有被使用
McuBspGpioInit(GPIOD, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PD1没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG9没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_10, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG10没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_11, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG11没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_12, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG12没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_13, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG13没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_14, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG14没有被使用
McuBspGpioInit(GPIOG, GPIO_PIN_15, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PG15没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB6没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_7, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB7没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB8没有被使用
McuBspGpioInit(GPIOB, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB9没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE0没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PE1没有被使用
/* PE3用作LED灯默认关闭 */
McuBspGpioInit(GPIOE, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL);
McuBspGpioSetLevel(GPIOE, GPIO_PIN_3, MCU_BSP_GPIO_OUT_LOW);
/* ADC */
McuBspGpioInit(GPIOC, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PC0,ADC2
McuBspGpioInit(GPIOA, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA1,ADC_RE
McuBspGpioInit(GPIOA, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA4,ADC_DC
McuBspGpioInit(GPIOA, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA5,ADC_PH
McuBspGpioInit(GPIOA, GPIO_PIN_6, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA6,ADC_TEM
McuBspGpioInit(GPIOA, GPIO_PIN_7, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PA7,ADC_EC
McuBspGpioInit(GPIOB, GPIO_PIN_0, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB0,ADC_DO
McuBspGpioInit(GPIOB, GPIO_PIN_1, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB1,ADC1
/* 串口 */
McuBspGpioInit(GPIOA, GPIO_PIN_2, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PA2,UART1_TX
McuBspGpioInit(GPIOA, GPIO_PIN_3, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PA3,UART2_RX
McuBspGpioInit(GPIOD, GPIO_PIN_8, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD8--GPS_TX
McuBspGpioInit(GPIOD, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD9--GPS_RX
McuBspGpioInit(GPIOA, GPIO_PIN_9, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PA9--UART_TX
McuBspGpioInit(GPIOA, GPIO_PIN_10, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PA10--UART_RX
McuBspGpioInit(GPIOC, GPIO_PIN_10, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PC10--UART_TX
McuBspGpioInit(GPIOC, GPIO_PIN_11, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PC11--UART_RX
McuBspGpioInit(GPIOC, GPIO_PIN_12, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PC12--UART_TX
McuBspGpioInit(GPIOD, GPIO_PIN_2, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD2 -- UART_RX
/* 外部控制口 */
McuBspGpioInit(GPIOF, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PF12作为外部开关
McuBspGpioSetLevel(GPIOF, GPIO_PIN_12, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOF, GPIO_PIN_15, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PF15作为外部开关
McuBspGpioSetLevel(GPIOF, GPIO_PIN_15, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOG, GPIO_PIN_1, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG1作为外部开关
McuBspGpioSetLevel(GPIOG, GPIO_PIN_1, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOE, GPIO_PIN_8, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE8作为外部开关
McuBspGpioSetLevel(GPIOE, GPIO_PIN_8, MCU_BSP_GPIO_OUT_LOW);
// McuBspGpioInit(GPIOE, GPIO_PIN_9, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE9作为外部开关,4G
// McuBspGpioSetLevel(GPIOE, GPIO_PIN_9, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOB, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PB12作为外部开关
McuBspGpioSetLevel(GPIOB, GPIO_PIN_12, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOB, GPIO_PIN_13, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PB13作为外部开关
McuBspGpioSetLevel(GPIOB, GPIO_PIN_13, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOD, GPIO_PIN_14, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD14 OUTPUT_SD
McuBspGpioSetLevel(GPIOD, GPIO_PIN_14, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOD, GPIO_PIN_15, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD15 OUTPUT1 备用
McuBspGpioSetLevel(GPIOD, GPIO_PIN_15, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOG, GPIO_PIN_2, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG2 OUTPUT2 备用
McuBspGpioSetLevel(GPIOG, GPIO_PIN_2, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOG, GPIO_PIN_3, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG3 OUTPUT3 备用
McuBspGpioSetLevel(GPIOG, GPIO_PIN_3, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOG, GPIO_PIN_4, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG4 OUTPUT4 备用
McuBspGpioSetLevel(GPIOG, GPIO_PIN_4, MCU_BSP_GPIO_OUT_LOW);
McuBspGpioInit(GPIOG, GPIO_PIN_5, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG5 OUTPUT5 备用
McuBspGpioSetLevel(GPIOG, GPIO_PIN_5, MCU_BSP_GPIO_OUT_LOW);
// McuBspGpioInit(GPIOD, GPIO_PIN_7, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD7 OUTPUT7 蓝牙不需要关闭
// McuBspGpioSetLevel(GPIOD, GPIO_PIN_7, MCU_BSP_GPIO_OUT_LOW);
/* 输入检测 */
McuBspGpioInit(GPIOE, GPIO_PIN_10, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE10没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE11没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_12, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE12没有被使用
McuBspGpioInit(GPIOE, GPIO_PIN_13, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PE13没有被使用
/* IIC */
McuBspGpioInit(GPIOB, GPIO_PIN_10, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP, 0, NULL); // PB10 IIC_SCL
McuBspGpioInit(GPIOB, GPIO_PIN_11, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP, 0, NULL); // PB11 IIC_SDA
McuBspGpioSetLevel(GPIOB, GPIO_PIN_10, MCU_BSP_GPIO_OUT_HIGH);
McuBspGpioSetLevel(GPIOB, GPIO_PIN_11, MCU_BSP_GPIO_OUT_HIGH);
/* SPI */
// McuBspGpioInit(GPIOA, GPIO_PIN_15, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP, 0, NULL); // PA15 NSS
// McuBspGpioSetLevel(GPIOA, GPIO_PIN_15, MCU_BSP_GPIO_OUT_HIGH);
// McuBspGpioInit(GPIOB, GPIO_PIN_3, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB3 SPI_MOSI
// McuBspGpioInit(GPIOB, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB4 SPI_MISO
// McuBspGpioInit(GPIOB, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_NOPULL, 0, NULL); // PB5 SPI_SCK
/* 特殊输出口 */
McuBspGpioInit(GPIOG, GPIO_PIN_7, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PG7 GPS_FORCE
McuBspGpioInit(GPIOC, GPIO_PIN_9, GPIO_MODE_OUTPUT_OD, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PC9 485_CRL1
// McuBspGpioInit(GPIOD, GPIO_PIN_3, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD3 DATA
// McuBspGpioInit(GPIOD, GPIO_PIN_4, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD4 LINK
// McuBspGpioInit(GPIOD, GPIO_PIN_5, GPIO_MODE_ANALOG, GPIO_SPEED_FREQ_LOW, GPIO_PULLDOWN, 0, NULL); // PD5 WKP
// McuBspGpioInit(GPIOD, GPIO_PIN_6, GPIO_MODE_OUTPUT_PP, GPIO_SPEED_FREQ_LOW, GPIO_PULLUP, 0, NULL); // PD6 E_RST
}
void McuTaskLowPowerUpclk(void)
{
if (gMcuTaskLowerPowerMode == 1) {
/* 初始化系统时钟由于唤醒时候时钟会切换为HSI */
McuBspSysClockInit();
gMcuTaskLowerPowerMode = 0;
}
}
static void McuTaskLowPowerWakeUpCallback(void)
{
if (gMcuTaskLowerPowerMode == 1) {
/* 初始化系统时钟由于唤醒时候时钟会切换为HSI */
McuBspSysClockInit();
gMcuTaskLowerPowerMode = 0;
}
gMcuTaskCount++;
if (gMcuTaskCount % gMcuTaskPeriod == 0) {
McuTaskImuBeiDouAsk();
McuTaskInParaBeiDouAsk();
McuTaskManyParaBeiDouAsk();
McuTaskPositionBeiDouAsk();
gMcuTaskCount = 0;
}
gMcuTaskRestartBlue = 1;
McuTaskLowPowerStartRTCAlarm();
}