static void power_init(void) {
drv_pmu_dcdc_enable(true);
drv_pmu_xtal32m_startup();
drv_pmu_select_32k(PMU_32K_SEL_RC);
}
int main(void)
{
power_init();
static const pin_config_t pin_config[] = {
{5, {PINMUX_PAD5_UART1_TRX_CFG}, PMU_PIN_MODE_PU, PMU_PIN_DRIVER_CURRENT_NORMAL},
{6, {PINMUX_PAD6_UART1_RX_CFG}, PMU_PIN_MODE_PU, PMU_PIN_DRIVER_CURRENT_NORMAL},
};
drv_wdt_init(0);
drv_pin_init(pin_config, sizeof(pin_config)/sizeof(pin_config[0]));
static const uart_config_t uart_cfg = {
.baudrate = 115200,
.flow_control = UART_FLOW_CONTROL_NONE,
.data_bit = UART_DATA_BIT_8,
.stop_bit = UART_STOP_BIT_1,
.parity = UART_PARITY_NONE,
};
drv_uart_init(OM_UART1, &uart_cfg);
om_printf("Example project\r\n");
/* 3. ?? GPIO ??????(?????) */
for (uint8_t i = 0; i < 39; i++) {
drv_pmu_pin_mode_set(i, PMU_PIN_MODE_FLOAT);
drv_pmu_pin_input_enable(i, 0);
drv_pmu_pin_driven_current_set(i, PMU_PIN_DRIVER_CURRENT_NORMAL);
drv_pmu_wakeup_pin_set(i, PMU_PIN_WAKEUP_DISABLE);
}
OM_PMU->GPIO_WAKEUP[0] = 0;
OM_PMU->GPIO_WAKEUP[1] = 0;
pm_init();
pm_sleep_enable(true);
pm_sleep_ultra_sleep_mode_enable(true);
DRV_RCC_CLOCK_ENABLE(RCC_CLK_UART1, 0);
DRV_RCC_CLOCK_ENABLE(RCC_CLK_AES, 0);
DRV_RCC_CLOCK_ENABLE(RCC_CLK_EFUSE, 0);
// drv_pmu_dump();
pm_power_manage();
drv_pmu_sleep_enter(1, false);
while(1) {
__WFI();
}
}
void om_putchar(char character)
{
drv_uart_write(OM_UART1, (uint8_t *)&character, 1, DRV_MAX_DELAY);
}这是修改ble_app_simple例程,仅修改上电进入休眠,打印如下 [17:48:18.441]收←◆Example project sleep_enable is true ultra_sleep_enable is false min_sleep_time is 98 ms prevent sleep reason is 0x00000000, if reason is not 0, you can look pm_id_t enum [PMU] GPIO0 GROUP wakeup pin: 0x00000000(cur_level: 0x00000000 sleep_level: 0x00000000) [PMU] GPIO0 GROUP pull up: 0x00000000(cur_level:0x00000000) pull down: 0x00000000(cur_level:0x00000000) all cur_level: 0x00000000 [PMU] GPIO1 GROUP wakeup pin: 0x00000000(cur_level: 0x00000000 sleep_level: 0x00000000) [PMU] GPIO1 GROUP pull up: 0x00000000(cur_level:0x00000000) pull down: 0x00000000(cur_level:0x00000000) all cur_level: 0x00000000 [PMU] clocking CPU[32MHZ] SF UART1 测试休眠电流一直是100uA左右,降不下去 ![]() |

