到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器
但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明。
所以硬件定时器也得熟悉,同时附带简单用一下软件定时器。
contenu
avant-propos
Les tests fonctionnels ESP32-C3 suivants sont basés sur la carte de développement conçue par nous-mêmes :
L'environnement de développement est l'ESP-IDF officiel d'Espressif, construit sur la base du plugin VScode :
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"
.
- ESP32-C3 a 2 groupes de minuteries, chaque groupe a 2 minuteries, il y a 4 minuteries au total.
- Les temporisateurs sont configurés à l'aide d'une
timer_config_t
structure , puis initialisés.
Par exemple, l'initialisation dans l'exemple :
- Après l'initialisation,
timer_start
la 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 pourtimer_set_counter_value
définir la première valeur de comptage de la minuterie :
Il existe d'autres fonctions propriétaires qui peuvent également être définies :
uniquement utilisées dans l'exempletimer_set_counter_value
, comme indiqué ci-dessous :
- 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_start
démarrer le temporisateur :
utiliser pourtimer_set_alarm_value
régler l'alarme :
utilisertimer_isr_callback_add
pour enregistrer la fonction de rappel d'interruption pour le temporisateur :
la manière utilisée dans l'exemple est la suivante :
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 group
le suivant :
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_main
dé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).
Une fois que le temporisateur s'est exécuté, dans la while
boucle, 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).
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 :
Le résultat de l'exécution de cette minuterie seule est le suivant (bien compris):
Examinons ensuite un autre résultat de test distinct du minuteur de rechargement : à
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 :
Les paramètres correspondants dans STM32CubeMX sont les suivants :
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 :
Donc puisque le projet ESP-IDF utilise FreeRTOS, bien sûr il peut aussi voir :
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'
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... ) :
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 :
/2. Créez un minuteur dans le programme, puis activez-le : les
résultats du test sont les suivants :
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.