ESP32-C3 Notions de base du didacticiel de démarrage (6. Minuterie matérielle TIMG et minuterie logicielle)

到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器
但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明。
所以硬件定时器也得熟悉,同时附带简单用一下软件定时器。

avant-propos

Les tests fonctionnels ESP32-C3 suivants sont basés sur la carte de développement conçue par nous-mêmes :

Dessinez vous-même une carte de développement d'ESP32-C3 (la première fois que vous utilisez Lichuang EDA) (PCB est disponible)

L'environnement de développement est l'ESP-IDF officiel d'Espressif, construit sur la base du plugin VScode :

L'environnement de développement ESP32-C3 VScode est construit (basé sur l'ESP-IDF officiel d'Espressif - double environnement Windows et Ubuntu)

Pour le test de la minuterie, nous pouvons directement utiliser le port série pour imprimer et voir les résultats du test.

1. Introduction de base de la minuterie

Pour l'introduction de la minuterie polyvalente ESP32-C3, le lien de description du site officiel d'Espressif est le suivant :

Description de la pièce de minuterie générale ESP32-C3 officielle Espressif

Dans le même temps, il existe également une introduction détaillée à TIMG dans le chapitre 10 du manuel officiel de la puce ESP32-C3 d'Espressif "esp32-c3_technical_reference_manual_cn"
insérez la description de l'image ici
.
insérez la description de l'image ici

  1. ESP32-C3 a 2 groupes de minuteries, chaque groupe a 2 minuteries, il y a 4 minuteries au total.insérez la description de l'image ici
  2. Les temporisateurs sont configurés à l'aide d'une timer_config_tstructure , puis initialisés.
    insérez la description de l'image ici
    Par exemple, l'initialisation dans l'exemple :
    insérez la description de l'image ici
  3. Après l'initialisation, timer_startla minuterie peut être démarrée directement, et bien sûr, certaines configurations peuvent être effectuées, puis la minuterie peut être démarrée.
    Utilisez pour timer_set_counter_valuedéfinir la première valeur de comptage de la minuterie :
    insérez la description de l'image iciIl existe d'autres fonctions propriétaires qui peuvent également être définies :
    insérez la description de l'image ici
    uniquement utilisées dans l'exemple timer_set_counter_value, comme indiqué ci-dessous :
    insérez la description de l'image ici
  4. Les alarmes et les interruptions, après l'activation de la minuterie, auront naturellement un traitement de temporisation ou interrompront le traitement du contenu lié. Après avoir configuré ces numéros pour les fonctions requises, vous pouvez utiliser pour timer_startdémarrer le temporisateur :
    utiliser pour timer_set_alarm_valuerégler l'alarme :
    insérez la description de l'image iciutiliser timer_isr_callback_addpour enregistrer la fonction de rappel d'interruption pour le temporisateur :
    insérez la description de l'image icila manière utilisée dans l'exemple est la suivante :
    insérez la description de l'image ici

Pour plus de détails et d'autres questions, vous pouvez vous référer au manuel Testons l'effet de la minuterie à travers la routine officielle.

2. Exemple de test de minuterie

Nous commençons toujours le test du chronomètre selon la routine officielle.

2.1 Exemple de test IDF

Un exemple de minuterie dans l'exemple officiel est timer grouple suivant :
insérez la description de l'image ici

La fonction de routine de cette minuterie est simple, et tout le monde peut compiler, télécharger et observer. Ici, je vais l'expliquer brièvement en fonction de ma propre modification.

Au app_maindébut, une file d'attente de messages est créée, puis 2 temporisateurs sont initialisés, dont l'un est réglé sur un temporisateur de rechargement pour une alarme de 3 secondes (le temporisateur 0 du groupe 0 est utilisé) et l'autre est réglé sur 5 -seconde alarme Temporisateur de chargement supplémentaire (temporisateur 0 dans le groupe 1).
insérez la description de l'image ici
Une fois que le temporisateur s'est exécuté, dans la whileboucle, il a attendu la file d'attente des messages au début.Évidemment, seulement lorsque le temporisateur a une interruption d'alarme et qu'un message est envoyé dans la fonction de service d'interruption, la boucle while sera bloquée et exécutée .

Ensuite, la description sera imprimée en fonction du contenu du message reçu (dans l'exemple, il s'agit en fait de voir s'il s'agit d'un temporisateur de rechargement).
insérez la description de l'image ici
L'impression suivante est la même, en obtenant la valeur du compteur et ainsi de suite.

Si vous utilisez directement l'exemple de programme pour voir les résultats d'impression, cela reste un peu déroutant. Lors des tests ici, nous examinerons une minuterie et une minuterie pour une meilleure compréhension :
insérez la description de l'image ici

Le résultat de l'exécution de cette minuterie seule est le suivant (bien compris):
insérez la description de l'image ici

Examinons ensuite un autre résultat de test distinct du minuteur de rechargement : à
insérez la description de l'image ici
partir de ces deux résultats distincts, nous pouvons très bien comprendre le fonctionnement du minuteur. Couplé à l'introduction ci-dessus, il ne devrait pas être difficile d'utiliser le minuteur. .

2.2 Minuterie logicielle


Étant donné que le système d'exploitation FreeRTOS est utilisé, bien sûr, des minuteries logicielles peuvent également être utilisées. Dans l'exemple de projet d'IDF, la configuration par défaut des minuteries logicielles est la suivante :
insérez la description de l'image ici

Les paramètres correspondants dans STM32CubeMX sont les suivants :
insérez la description de l'image ici

2.2.1 Affichage des tâches FreeRTOS dans le projet ESP-IDF

Je me souviens encore que dans mon article de blog expliquant l'enregistrement FreeRTOS, j'ai expliqué comment vérifier l'état d'exécution de la tâche de FreeRTOS :

Enregistrement FreeRTOS (quatre, problème de débordement de la pile de tâches FreeRTOS et section critique)

Donc puisque le projet ESP-IDF utilise FreeRTOS, bien sûr il peut aussi voir :
insérez la description de l'image ici

Après avoir activé l'affichage des informations sur les tâches, nous pouvons imprimer l'état d'exécution de la tâche. Ici, nous utilisons simplement le minuteur matériel pour imprimer périodiquement l'état d'exécution de chaque tâche. Modifiez simplement le code. La méthode de modification est la même que dans le blog d'enregistrement FreeRTOS post ci-dessus : l'
insérez la description de l'image ici
effet de test est le suivant ( la figure ci-dessous devrait être erronée, et plus tard, le test a révélé qu'esp_timer n'est pas une tâche de minuterie logicielle... ) :
insérez la description de l'image ici

2.2.2 Test simple du temporisateur logiciel

Pour toute question sur les minuteurs logiciels FreeRTOS, veuillez consulter le billet de blog :

Enregistrement FreeRTOS (8. Minuterie logicielle FreeRTOS)

Nous sommes ici sur ESP32-C3, et aussi testons simplement :

1. Ajoutez le fichier d'en-tête du minuteur logiciel :
insérez la description de l'image ici
/2. Créez un minuteur dans le programme, puis activez-le : les
insérez la description de l'image ici
résultats du test sont les suivants :
insérez la description de l'image ici

Quand j'ai vu la tâche esp_timer dans la tâche d'impression, j'ai pensé que c'était le cas, mais plus tard, j'ai découvert qu'il ne s'agissait pas d'un minuteur logiciel.Quant à ce qu'est cette tâche, je l'expliquerai plus tard quand je l'apprendrai.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42328389/article/details/122588053
conseillé
Classement