VCC常供电,SPI管脚 不测气压的时候低功耗输入上拉,静态功耗最低了

This commit is contained in:
stark1898y 2024-11-19 17:45:09 +08:00
parent f4b6ae581c
commit 1eeff59c4a
3 changed files with 188 additions and 41 deletions

View File

@ -1,21 +1,30 @@
#include "bsp_wf5803.h"
#include "CONFIG.h"
static uint8_t Peripheral_TaskID = 0xff;
static tmosTaskID wf5803_task_id = INVALID_TASK_ID;
#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17)
#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17)
#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17)
#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17)
#define WF5803_CSB4_HIGH() GPIOB_SetBits(GPIO_Pin_17)
#define WF5803_CSB4_LOW() GPIOB_ResetBits(GPIO_Pin_17)
uint8_t volatile vcc4_state = 0;
#define WF5803_CSB1_HIGH() GPIOB_SetBits(GPIO_Pin_17)
#define WF5803_CSB1_LOW() GPIOB_ResetBits(GPIO_Pin_17)
void SPICs_Start(void)
{
// GPIOA_ResetBits(GPIO_Pin_6);
WF5803_CSB1_LOW();
WF5803_CSB4_LOW();
}
void SPICs_Stop(void)
{
// GPIOA_SetBits(GPIO_Pin_6);
WF5803_CSB1_HIGH();
WF5803_CSB4_HIGH();
}
uint8_t WF5803_SendByte(uint8_t data)
@ -63,33 +72,50 @@ void WF5803_Init(void)
// SDA: MOSI
// SDO: MISO
#if 1
// CSB1: PA3
// VCC1: PA2
// GPIOA_SetBits(GPIO_Pin_2);
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeOut_PP_20mA);
// GPIOA_SetBits(GPIO_Pin_2);
GPIOA_SetBits(GPIO_Pin_3);
GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
GPIOA_SetBits(GPIO_Pin_3);
// // CSB1: PA3
// GPIOA_SetBits(GPIO_Pin_3);
// GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
// GPIOA_SetBits(GPIO_Pin_3);
// // VCC2: PB8
// GPIOB_SetBits(GPIO_Pin_8);
// GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeOut_PP_5mA);
// GPIOB_SetBits(GPIO_Pin_8);
// CSB2: PB9
GPIOB_ResetBits(GPIO_Pin_9);
GPIOB_SetBits(GPIO_Pin_9);
GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
GPIOB_ResetBits(GPIO_Pin_9);
GPIOB_SetBits(GPIO_Pin_9);
// WF5803_CSB1_HIGH();
// // VCC3: PB3
// GPIOB_SetBits(GPIO_Pin_3);
// GPIOB_ModeCfg(GPIO_Pin_3, GPIO_ModeOut_PP_5mA);
// GPIOB_SetBits(GPIO_Pin_3);
// CSB3: PB4
GPIOB_ResetBits(GPIO_Pin_4);
GPIOB_SetBits(GPIO_Pin_4);
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);
GPIOB_ResetBits(GPIO_Pin_9);
GPIOB_SetBits(GPIO_Pin_4);
// // VCC4: PB16
// GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PU);
// // GPIOB_SetBits(GPIO_Pin_17);
// mDelayuS(5);
// CSB4: PB17
GPIOB_SetBits(GPIO_Pin_17);
GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeOut_PP_5mA);
// WF5803_CSB1_HIGH();
// PRINT("WF5803_CSB1_HIGH()\r\n");
GPIOB_SetBits(GPIO_Pin_17);
// spi³õʼ»¯£¬Ä£Ê½0
GPIOA_ModeCfg(GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14, GPIO_ModeOut_PP_5mA);
GPIOA_ModeCfg(GPIO_Pin_15, GPIO_ModeIN_PU);
#endif
// PRINT("GPIOA_ModeCfg ok\r\n");
@ -105,16 +131,96 @@ void WF5803_Init(void)
// PRINT("SPI_Init ok\r\n");
}
void WF5803_DeInit(void)
{
// GPIOA_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6, GPIO_ModeIN_PD);
// SPI
// if (vcc4_state == 1)
// {
// GPIOA_ResetBits(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
// GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU);
// // CSB4: PB11
// GPIOB_ResetBits(GPIO_Pin_17);
// GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeIN_PU);
// }
// else
if (vcc4_state == 0)
{
GPIOA_ResetBits(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
GPIOA_ModeCfg(GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15, GPIO_ModeIN_PU);
GPIOB_ResetBits(GPIO_Pin_17);
GPIOB_ModeCfg(GPIO_Pin_17, GPIO_ModeIN_PU);
}
// // VCC1: PA2
// GPIOA_ResetBits(GPIO_Pin_2);
// GPIOA_ModeCfg(GPIO_Pin_2, GPIO_ModeIN_PD);
// GPIOA_ResetBits(GPIO_Pin_4);
// GPIOA_ResetBits(GPIO_Pin_5);
// GPIOA_ResetBits(GPIO_Pin_12);
// CSB1: PA3
// GPIOA_ResetBits(GPIO_Pin_3);
// GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PD);
// GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12, GPIO_ModeIN_PD);
// GPIOA_SetBits(GPIO_Pin_3);
// GPIOA_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PU);
// // VCC2: PB8
// GPIOB_ResetBits(GPIO_Pin_8);
// GPIOB_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PD);
// // CSB2: PB9
GPIOB_ResetBits(GPIO_Pin_9);
GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PD);
// GPIOB_SetBits(GPIO_Pin_9);
// GPIOB_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PU);
// // VCC3: PB3
// GPIOB_ResetBits(GPIO_Pin_3);
// GPIOB_ModeCfg(GPIO_Pin_3, GPIO_ModeIN_PD);
// CSB3: PB4
GPIOB_ResetBits(GPIO_Pin_4);
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PD);
// GPIOB_SetBits(GPIO_Pin_4);
// GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PU);
// if (vcc4_state == 1)
// {
// // VCC4: PB16
// // GPIOB_SetBits(GPIO_Pin_16);
// // GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeOut_PP_5mA);
// // GPIOB_SetBits(GPIO_Pin_16);
// }
// else
// {
// // VCC4: PB16
// GPIOB_ResetBits(GPIO_Pin_16);
// GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PD);
// PRINT("vcc4_state = 0\r\n");
// }
// LED
GPIOA_ResetBits(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12);
GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12, GPIO_ModeIN_PD);
// KEY
GPIOA_ResetBits(GPIO_Pin_7);
GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU);
// motor
GPIOB_ResetBits(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2);
GPIOB_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2, GPIO_ModeIN_PD);
// COIL_ADC
GPIOA_ResetBits(GPIO_Pin_6);
GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PD);
// ADC_CTRL,ADC_VBAT
GPIOA_ResetBits(GPIO_Pin_0 | GPIO_Pin_1);
GPIOA_ModeCfg(GPIO_Pin_0 | GPIO_Pin_1, GPIO_ModeIN_PD);
}
long reading = 0;
@ -197,16 +303,40 @@ void SensorData_Process(void)
PRINT("T=%d.%d \r\n", (int)temp, ((int)(temp * 100.0f) % 100));
}
uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events)
// __HIGH_CODE
// __attribute__((noinline))
uint16_t WF5803_ProcessEvent(uint8_t task_id, uint16_t events)
{
if (events & WF5803_EVT_START)
if (events & WF5803_EVT_VCC)
{
if (vcc4_state == 0)
{
vcc4_state = 1;
// GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PU);
// mDelaymS(20);
// GPIOB_SetBits(GPIO_Pin_16);
// GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeOut_PP_5mA);
// GPIOB_SetBits(GPIO_Pin_16);
PRINT("WF5803_EVT_VCC\r\n");
}
tmos_start_task(wf5803_task_id, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(20));
return (events ^ WF5803_EVT_VCC);
}
else if (events & WF5803_EVT_START)
{
// SensorData_Process();
// WF5803_WriteReg(0x30, 0x0a);
vcc4_state = 1;
WF5803_Init();
WF5803_WriteReg(0x30, 0x0A);
tmos_start_task(Peripheral_TaskID, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50));
tmos_start_task(wf5803_task_id, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(5));
return (events ^ WF5803_EVT_START);
}
else if (events & WF5803_EVT_READ)
@ -214,7 +344,13 @@ uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events)
SensorData_Process();
// WF5803_WriteReg(0x30, 0x0a);
tmos_start_task(Peripheral_TaskID, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(800));
tmos_start_task(wf5803_task_id, WF5803_EVT_START, MS1_TO_SYSTEM_TIME(800));
// GPIOB_ResetBits(GPIO_Pin_16);
// GPIOB_ModeCfg(GPIO_Pin_16, GPIO_ModeIN_PD);
// PRINT("vcc4_state = 0\r\n");
vcc4_state = 0;
return (events ^ WF5803_EVT_READ);
}
return 0;
@ -222,10 +358,9 @@ uint16_t wf5803_ProcessEvent(uint8_t task_id, uint16_t events)
void BSPWF5803_Init(void)
{
WF5803_Init();
Peripheral_TaskID = TMOS_ProcessEventRegister(wf5803_ProcessEvent);
// WF5803_WriteReg(0x30, 0x2B);
tmos_set_event(Peripheral_TaskID, WF5803_EVT_START);
// tmos_start_task(Peripheral_TaskID, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50));
// PRINT("WF5803_Init\r\n");
// WF5803_Init();
wf5803_task_id = TMOS_ProcessEventRegister(WF5803_ProcessEvent);
tmos_set_event(wf5803_task_id, WF5803_EVT_START);
// tmos_start_task(wf5803_task_id, WF5803_EVT_READ, MS1_TO_SYSTEM_TIME(50));
}

View File

@ -3,17 +3,17 @@
#include "CH58x_common.h"
#define WF5803_EVT_START 0x0010
#define WF5803_EVT_READ 0x0100
#define WF5803_EVT_START (0x0001 << 0)
#define WF5803_EVT_READ (0x0001 << 1)
#define WF5803_EVT_VCC (0x0001 << 2)
void WF5803_Init(void);
void WF5803_WriteReg(uint8_t Address, uint8_t value);
uint8_t WF5803_ReadReg(uint8_t addr);
uint8_t *GetSensorData(void);
void SensorData_Process(void);
// void WF5803_WriteReg(uint8_t Address, uint8_t value);
// uint8_t WF5803_ReadReg(uint8_t addr);
// uint8_t *GetSensorData(void);
// void SensorData_Process(void);
void BSPWF5803_Init(void);
void WF5803_DeInit(void);
#endif

View File

@ -58,6 +58,9 @@ uint32_t CH58x_LowPower(uint32_t time)
RTC_SetTignTime(time_tign);
SYS_RecoverIrq(irq_status);
#if(DEBUG == Debug_UART0) // 使用其他串口输出打印信息需要修改这行代码
while((R8_UART0_LSR & RB_LSR_TX_ALL_EMP) == 0)
{
@ -67,12 +70,21 @@ uint32_t CH58x_LowPower(uint32_t time)
// LOW POWER-sleep模式
if(!RTCTigFlag)
{
// extern uint8_t volatile vcc4_state;
// if (vcc4_state == 0)
// {
// WF5803_DeInit();
// }
WF5803_DeInit();
LowPower_Sleep(RB_PWR_RAM32K | RB_PWR_RAM96K | RB_PWR_EXTEND |RB_XT_PRE_EN );
HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)
WF5803_Init();
// if (vcc4_state)
// {
// WF5803_Init();
// }
return 0;
}
#endif