芯片选型
Ciga Device — GD32F470系列
PWU介绍
PMU全称Power Management Unit,电源管理单元。
电源域
总共有三大电源域,包括VDD / VDDA域,1.2V域和备份域。
VDD/VDDA 域
提供PMU 常规电源供应以下模块的供电:
- 看门狗
- 主频晶振
- 内部晶振
- ADC和DAC
- LDO电源转换
- 上电复位
- 锁相环
备份域
备份域提供以下供电:
- 外部低频时钟晶振
- RTC
- 上电复位
- 电源转换
1.2V域
主要提供:
- AHB高速总线的供电
- APB外设总线的供电
- 内存
- Cortex-M4的供电
节电模式总结
代码案例
功能需求:
- 让LED1(引脚PE3) 每间隔一段时间闪烁(500ms)
- 通过串口切换睡眠模式、深度睡眠模式、待机模式
- 为KEY1(PA0)配置外部中断按键,按下时恢复
#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include <string.h>
#include "main.h"
#include "USART0.h"
#include "EXTI.h"void EXTI_on_trig(exti_line_enum linex){if(linex==EXTI_1){printf("key trig\n");}
}
void sleep_mode(){ // 睡眠模式rcu_periph_clock_enable(RCU_PMU);printf("sleep_mode 1 \n");pmu_to_sleepmode(WFI_CMD);printf("sleep_mode 2 \n");
}void deep_sleep_mode(){ //深度睡眠模式rcu_periph_clock_enable(RCU_PMU);printf("deep_sleep_mode 1 \n");pmu_to_deepsleepmode(PMU_LDO_LOWPOWER,PMU_LOWDRIVER_ENABLE,WFI_CMD);//设置主频SystemInit();printf("deep_sleep_mode 2 \n");
}void standby_mode(){ //待机模式rcu_periph_clock_enable(RCU_PMU);// 清理待机模式标记pmu_flag_clear(PMU_FLAG_RESET_STANDBY);//启用唤醒按钮pmu_wakeup_pin_enable();printf("standby_mode 1\n");//待机模式pmu_to_standbymode();printf("standby_mode 2\n");
}void USART0_on_recv(uint8_t* data, uint32_t len) {printf("recv: %s\n", data);switch(data[0]){case 0x00:sleep_mode();break;case 0x01:deep_sleep_mode();break;case 0x02:standby_mode();break;default:break;}}
static void GPIO_config(){//初始化GPIO PE3rcu_periph_clock_enable(RCU_GPIOE);gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_3);gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_MAX, GPIO_PIN_3);
}
static void delay(){uint32_t i = 50000000;while(i--){__NOP();}}int main(void)
{nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);systick_config();USART0_init();EXTI_init();GPIO_config();printf("Main Init\n");while(1){ gpio_bit_toggle(GPIOE,GPIO_PIN_3);delay();}
}