本帖最后由 xiaolinen 于 2024-7-6 22:03 编辑
一:电路图修改
将下图中的D1(LED灯)和R1电阻拆除,减少电流的耗损。
二:低功耗模式
2.1,CH32V208的低功耗模式包括:睡眠模式,停止模式,待机模式,具体如下图所示:
2.1,active模式
CH32V208在正常运行工作状态的电流情况,如下图所示:
2.3,sleep模式
2.3.1,PA0引脚输入低电平触发外部中断EXTI_Line0退出sleep睡眠模式,程序在唤醒后继续执行。
2.3.2,重点代码,如下图所示:
-
- void EXTI0_INT_INIT(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure = {0};
- EXTI_InitTypeDef EXTI_InitStructure = {0};
- NVIC_InitTypeDef NVIC_InitStructure = {0};
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
- EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
-
-
- void sleep_mode_enable(void)
- {
- __WFI();
- }
-
2.3.3,sleep模式下电流情况,如下图所示:
2.4,stop模式
2.4.1,PA0引脚输入低电平触发外部中断EXTI_Line0退出stop睡眠模式,程序在唤醒后继续执行。
2.4.2,重点代码,如下图所示:
-
- void EXTI0_INT_INIT(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure = {0};
- EXTI_InitTypeDef EXTI_InitStructure = {0};
- NVIC_InitTypeDef NVIC_InitStructure = {0};
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
-
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
- EXTI_InitStructure.EXTI_Line = EXTI_Line0;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
- }
-
-
- void stop_mode_enable(void)
- {
- PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
- }
2.4.3,stop模式下电流情况,如下图所示:
2.5,standby模式
2.5.1,WKUP (PA0)引脚的上升沿退出待机模式,唤醒后程序复位。
2.5.2,重点代码,如下图所示:
-
- void gpio_init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure = {0};
-
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
- RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
-
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_Init(GPIOC, &GPIO_InitStructure);
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- }
-
-
-
- void PWR_WakeUpPinCmd(FunctionalState NewState)
- {
- if(NewState)
- {
- PWR->CSR |= (1 << 8);
- }
- else
- {
- PWR->CSR &= ~(1 << 8);
- }
- }
-
-
- void PWR_EnterSTANDBYMode(void)
- {
- PWR->CTLR |= PWR_CTLR_CWUF;
- PWR->CTLR |= PWR_CTLR_PDDS;
- NVIC->SCTLR |= (1 << 2);
-
- __WFI();
- }
2.5.3,standby模式下电流情况,如下图所示:
三:声明
本次记录的实验,主要是为了熟悉芯片各种低功耗模式的进入和退出方法,所记录的电流情况,并不是各个低功耗模式下的最低情况。