Série STM32CubeMX | Réveil en veille

Veille en veille

1. Introduction au mode faible consommation

Après la réinitialisation du système ou de l'alimentation électrique, le microprocesseur est à l'état de fonctionnement, HCLK fournit l'horloge de la CPU à l'état de fonctionnement et le noyau exécute le code du programme. Lorsque le processeur n'a pas besoin de continuer à fonctionner (par exemple, en attente d'un événement externe), plusieurs modes de faible consommation peuvent être utilisés pour économiser l'énergie. L'utilisateur doit sélectionner un mode d'économie d'énergie optimal en fonction de la consommation d'énergie la plus faible, du temps de démarrage le plus rapide et des sources de réveil disponibles. STM32 propose trois modes de faible consommation d'énergie pour atteindre différents niveaux de réduction de la consommation d'énergie:

  • Mode veille (le cœur CM3 cesse de fonctionner, les périphériques fonctionnent toujours) (consommation électrique la plus élevée)
  • Mode d'arrêt (toutes les horloges sont arrêtées) (la consommation de courant typique est d'environ 20uA)
  • Mode veille (l'alimentation principale de 1,8 V est désactivée) (la consommation de courant minimale est d'environ 2 uA)

En mode de fonctionnement, la consommation d'énergie peut également être réduite par les méthodes suivantes:

  • Réduisez l'horloge système
  • Désactivez les horloges des périphériques inutilisés sur les bus APB et AHB

Insérez la description de l'image ici

Cette expérience ne présente que le mode de consommation d'énergie le plus faible du STM32 (c'est-à-dire le mode veille). Le mode veille peut atteindre la plus faible consommation d'énergie de STM32. Ce mode désactive le régulateur de tension en mode veille profonde CM3, toute la zone d'alimentation 1,8 V est mise hors tension, l'oscillateur PLL / HSI / HSE est également mis hors tension et le contenu de la SRAM et du registre est perdu. Seuls les registres de sauvegarde et le circuit de veille assurent l'alimentation électrique. La
figure suivante montre les conditions pour que le STM32 entre et quitte le mode veille:

Insérez la description de l'image ici

2. Conception matérielle

Dans cette expérience, le voyant D1 est utilisé pour indiquer que le système fonctionne normalement. Le voyant lumineux est éteint pour indiquer qu'il entre en mode veille. Le bouton K_UP est utilisé pour réactiver le mode veille et utiliser le port série 1 pour imprimer les informations de débogage associées.

  • Indicateur D1
  • Bouton K_UP
  • Port série USART1

3. Conception de logiciels

3.1 Paramètres du STM32CubeMX
  • RCC réglé HSE externe, l'horloge est réglée sur 72M
  • PC0 est réglé sur le mode de sortie GPIO push-pull, pull-up, haute vitesse et le niveau de sortie par défaut est élevé
  • PA0 est réglé sur le mode d'entrée déroulant GPIO
  • USART1 est sélectionné comme mode de communication asynchrone, le débit en bauds est réglé à 115200Bits / s, la longueur des données de transmission est de 8 bits, pas de parité, 1 bit d'arrêt

Insérez la description de l'image ici

  • Entrez le nom du projet, sélectionnez le chemin du projet (pas de chinois), sélectionnez MDK-ARM V5; cochez Initialisation des périphériques générés comme une paire de fichiers «c / .h» par IP; cliquez sur GÉNÉRER LE CODE pour générer le code du projet
3.2 Programmation MDK-ARM
  • Ajouter une fonction pour entrer en mode veille dans le fichier main.c
/* USER CODE BEGIN 4 */
void Sys_Enter_Standby(void){
    
    
	__HAL_RCC_PWR_CLK_ENABLE();		//使能PWR时钟
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);		//清除Wake_UP标志
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);	//设置WAKEUP用于唤醒
	HAL_PWR_EnterSTANDBYMode();		//进入待机模式
}
/* USER CODE END 4 */
  • Ajoutez le programme de test suivant dans la boucle while de la fonction principale
while (1){
    
    
	printf("Time: 5\r\n");
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);		
	HAL_Delay(1000);
		
	printf("Time: 4\r\n");
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);		
	HAL_Delay(1000);

	printf("Time: 3\r\n");
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);		
	HAL_Delay(1000);

	printf("Time: 2\r\n");
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);		
	HAL_Delay(1000);

	printf("Time: 1\r\n");
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);		
	HAL_Delay(1000);

	printf("Entered Standby Mode...Please press KEY_UP to wakeup system!\r\n");
	Sys_Enter_Standby();
}

4. Télécharger la vérification

Une fois la compilation correcte, téléchargez-la sur la carte de développement, vous pouvez voir que l'indicateur D1 clignote en continu lorsque le système est en cours d'exécution et entre en mode veille après 5 secondes, moment auquel l'indicateur D1 est éteint. Lorsque le bouton KEY_UP ou le bouton de réinitialisation est enfoncé, le mode veille est réveillé, le système redémarre et le port série imprime un message d'invite
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/Chuangke_Andy/article/details/108734308
conseillé
Classement