Despertar en experimento de espera

1. Introducción al modo de espera STM32

1.1 Introducción al modo de baja potencia STM32

  Muchos microcontroladores tienen modos de baja potencia, como MSP430, STM8L, etc., y nuestro STM32 no es una excepción. Por defecto, después de un reinicio del sistema o reinicio de encendido, el microcontrolador ingresa al modo operativo. En el modo de ejecución, HCLK proporciona el reloj a la CPU y ejecuta el código del programa. Cuando la CPU no necesita continuar ejecutándose (como esperar eventos externos), puede usar una variedad de modos de bajo consumo para ahorrar energía. El usuario debe seleccionar un modo óptimo de bajo consumo de energía en función de las condiciones, como el consumo de energía más bajo, el tiempo de inicio más rápido y la fuente de activación disponible.

  Por supuesto, en el modo de funcionamiento, el consumo de energía también se puede reducir de las siguientes maneras:

(1) Reduzca la velocidad del reloj del sistema

(2) Cuando no use los periféricos APBx y AHB, apague el reloj periférico correspondiente

  STM32 proporciona tres modos de baja potencia para lograr el objetivo de reducir el consumo de energía a diferentes niveles. Los tres modos son los siguientes:

(1) Modo de suspensión (el núcleo CM3 deja de funcionar, los periféricos siguen funcionando)

(2) Modo de parada (todos los relojes están detenidos)

(3) Modo de espera (núcleo apagado de 1,8 V) El consumo de energía requerido por estos tres modos se reduce gradualmente, es decir, el consumo de energía en modo de espera es el más bajo. La tabla resumen de los tres modos de baja potencia se muestra en la figura:

 

 

 Segundo, la comparación de tres modos de baja potencia.

(1) En el modo de suspensión, solo el reloj central se apaga y el núcleo deja de funcionar , pero sus periféricos en chip y los periféricos centrales CM3 funcionan como de costumbre.

(2) En el modo de parada, todos los demás relojes se apagan aún más, por lo que todos los periféricos y el núcleo han dejado de funcionar , pero debido a que parte de la fuente de alimentación en el área de 1.8V no se ha apagado, la información de los registros y la memoria del núcleo también se conserva , Así que después de despertar del modo de parada y reiniciar el reloj, puede continuar ejecutando el código desde la última parada.

(3) En el modo de espera, además de apagar todos los relojes, también apaga completamente la fuente de alimentación en el área de 1.8V, es decir, después de despertar del modo de espera, ya que no hay un registro de ejecución de código anterior, el chip solo se puede restablecer , Vuelva a detectar la condición de ARRANQUE y ejecute el programa desde el principio.

Cómo ingresar al modo de espera

 

 

 

  Después de salir del modo de espera, el programa se volverá a ejecutar de la misma manera después del reinicio (iniciar el muestreo del pin, se ha adquirido el vector de reinicio, etc.) El control de potencia / registro de estado (PWR_CSR) indicará al núcleo que salga del modo de espera.

  Después de ingresar al modo de espera, excepto el pin de reinicio y el pin TAMPER (PC13) cuando está configurado para evitar la intrusión o la salida de calibración y el pin de activación habilitado (pin WK_UP (PA0)), se pondrán otros pines IO Está en un estado de alta resistencia.

 

En tercer lugar, los pasos de configuración del modo de espera

(1) Habilitar reloj de energía

  RCC_APB1PeriphClockCmd (RCC_APB1Periph_PWR, ENABLE);

 

 

(2) Establecer el pin WK_UP como la fuente de activación

  PWR_WakeUpPinCmd (ENABLE); 

(3) Ingrese al modo de espera

  PWR_ClearFlag (PWR_FLAG_WU); // Borrar indicador de activación

  PWR_EnterSTANDBYMode (); // Ingresa al modo de espera

 

 

Cuarto, escribir un programa de despertador en espera

  La función que se realizará en este capítulo es: el indicador D1 parpadea cuando el sistema está funcionando, ingresa al modo de espera después de 5 segundos, el indicador D1 se apaga y el puerto serie printf emite información de aviso relacionada, y se activa con el botón K_UP.

El marco del programa es el siguiente:

(1) Configurar para entrar y salir del modo de espera (2) Escribir la función principal

 

1 #ifndef _wkup_H
2 #define _wkup_H
3 
4 #include "system.h"
5 
6 
7 void Enter_Standby_Mode(void);
8 
9 #endif

 

  

 

 

 1 #include "wkup.h"
 2 
 3 /*******************************************************************************
 4 * 函 数 名         : Enter_Standby_Mode
 5 * 函数功能           : 进入待机模式
 6 * 输    入         : 无
 7 * 输    出         : 无
 8 *******************************************************************************/
 9 void Enter_Standby_Mode(void)
10 {
11         
12     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能PWR外设时钟
13     
14     PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up(唤醒)标志
15     
16     PWR_WakeUpPinCmd(ENABLE);//使能唤醒管脚    使能或者失能唤醒管脚功能
17     
18     
19     PWR_EnterSTANDBYMode();//进入待机模式
20 }

 

 

 

 

 

 1 #include "system.h"
 2 #include "SysTick.h"
 3 #include "led.h"
 4 #include "usart.h"
 5 #include "wkup.h"
 6 
 7 
 8 /*******************************************************************************
 9 * 函 数 名         : main
10 * 函数功能           : 主函数
11 * 输    入         : 无
12 * 输    出         : 无
13 *******************************************************************************/
14 int main()
15 {
16 
17     SysTick_Init(72);
18     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中断优先级分组 分2组
19     LED_Init();
20     USART1_Init(9600);
21     
22     while(1)
23     {
24         printf("time: 5\r\n");
25         led1=0;
26         delay_ms(1000);    //隔1秒显示计数
27         
28         printf("time: 4\r\n");
29         led1=1;
30         delay_ms(1000);
31         
32         printf("time: 3\r\n");
33         led1=0;
34         delay_ms(1000);
35         
36         printf("time: 2\r\n");
37         led1=1;
38         delay_ms(1000);
39         
40         printf("time: 1\r\n");
41         led1=0;
42         delay_ms(1000);
43         
44         printf("进入系统待机模式\r\n");
45         Enter_Standby_Mode();    
46     }
47 }

 

Supongo que te gusta

Origin www.cnblogs.com/zhj868/p/12687978.html
Recomendado
Clasificación