ESP32-C3入門チュートリアルの基本(6. TIMGハードウェアタイマーとソフトウェアタイマー)

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

序文

次のESP32-C3機能テストは、自社で設計した開発ボードに基づいています。

ESP32-C3の開発ボードを自分で作成します(Lichuang EDAを初めて使用する場合)(PCBが利用可能です)

開発環境は、VScodeプラグインに基づいて構築されたEspressifの公式ESP-IDFです。

ESP32-C3 VScode開発環境が構築されています(Espressifの公式ESP-IDF-WindowsとUbuntuのデュアル環境に基づいています)

タイマーのテストでは、シリアルポートを直接使用して、テスト結果を印刷して確認できます。

1.タイマーの基本的な紹介

ESP32-C3汎用タイマーの紹介については、Espressifの公式ウェブサイトの説明リンクは次のとおりです。

Espressif公式ESP32-C3一般的なタイマー部品の説明

同時に、Espressifの公式ESP32-C3チップマニュアル「esp32-c3_technical_reference_manual_cn」の第10章にもTIMGの詳細な紹介があり
ここに画像の説明を挿入
ます。
ここに画像の説明を挿入

  1. ESP32-C3には2つのタイマーグループがあり、各グループには2つのタイマーがあり、合計で4つのタイマーがあります。ここに画像の説明を挿入
  2. タイマーはtimer_config_t構造体され、初期化されます。
    ここに画像の説明を挿入
    たとえば、次の例の初期化:
    ここに画像の説明を挿入
  3. 初期化後timer_start、タイマーを直接開始することができます。もちろん、いくつかの構成を行ってから、タイマーを開始することもできます。タイマーの最初のカウント値
    を設定するために使用します。設定できる他の独自の関数がいくつかあります。以下に示すように、例でのみ使用されます。timer_set_counter_value
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    timer_set_counter_value
    ここに画像の説明を挿入
  4. タイマーがオンになった後のアラームと割り込みは、当然、タイムアウト処理、または割り込み処理関連のコンテンツを持ちます。必要な関数にこれらの番号を設定した後timer_start、タイマーを開始するために使用できます:アラーム
    を設定するために使用します:タイマーの割り込みコールバック関数を登録するために使用します:例で使用される方法は次のとおりです。timer_set_alarm_value
    ここに画像の説明を挿入timer_isr_callback_add
    ここに画像の説明を挿入
    ここに画像の説明を挿入

詳細やその他の質問については、マニュアルを参照してください。公式ルーチンでタイマーの効果をテストしてみましょう。

2.タイマーサンプルテスト

公式のルーチンに従って、タイマーテストを開始します。

2.1IDFサンプルテスト

公式例のタイマーの例はtimer group次のとおりです。
ここに画像の説明を挿入

このタイマーの定型機能はシンプルで、誰でもコンパイル、ダウンロード、観察できるので、ここでは自分の修正で簡単に説明します。

最初app_mainにメッセージキューが作成され、次に2つのタイマーが初期化されます。1つは3秒アラームのリロードタイマーに設定され(グループ0のタイマー0が使用されます)、もう1つは5に設定されます。 -2番目のアラーム補助ローディングタイマー(グループ1のタイマー0)。
ここに画像の説明を挿入
タイマーが実行された後、whileループでは、最初はメッセージキューを待機していました。明らかに、タイマーにアラーム割り込みがあり、割り込みサービス機能でメッセージが送信された場合にのみ、whileループがブロックされて実行されます。 。

次に、受信したメッセージの内容に応じて説明を出力します(例では、実際にリロードタイマーかどうかを確認します)。
ここに画像の説明を挿入
次の印刷も同じで、カウンターの値などを取得します。

サンプルプログラムを直接使用して印刷結果を確認する場合でも、少し混乱します。ここでテストするときは、理解を深めるために1つのタイマーと1つのタイマーを確認します。
ここに画像の説明を挿入

このタイマーを単独で実行した結果は次のとおりです(よく理解されています)。
ここに画像の説明を挿入

次に、リロードタイマーの別のテスト結果を見てみましょう。
ここに画像の説明を挿入
これら2つの別々の結果から、タイマーの動作を非常によく理解できます。上記の紹介と相まって、タイマーの使用は難しくありません。

2.2ソフトウェアタイマー

もちろん、FreeRTOSオペレーティングシステムを使用しているため、ソフトウェアタイマーも使用できます。IDFのサンプルプロジェクトでは、ソフトウェアタイマーの
デフォルト設定は次のとおりです。
ここに画像の説明を挿入

STM32CubeMXの対応する設定は次のとおりです。
ここに画像の説明を挿入

2.2.1ESP-IDFプロジェクトでのFreeRTOSタスクの表示

FreeRTOSレコードを説明するブログ投稿で、FreeRTOSのタスク実行ステータスを確認する方法について話したことを今でも覚えています。

FreeRTOSレコード(4つ、FreeRTOSタスクスタックオーバーフローの問題とクリティカルセクション)

したがって、ESP-IDFプロジェクトはFreeRTOSを使用しているため、もちろん彼は次のことも表示できます。
ここに画像の説明を挿入

タスク情報の表示を有効にした後、タスクの実行ステータスを印刷できます。ここでは、ハードウェアタイマーを使用して、各タスクの実行ステータスを定期的に印刷します。コードを変更するだけです。変更方法は、FreeRTOSレコードブログと同じです。上記の投稿:
ここに画像の説明を挿入
テスト効果は次のとおりです(下の図は間違っているはずですが、後でテストにより、esp_timerはソフトウェアタイマータスクではないことがわかりました...):
ここに画像の説明を挿入

2.2.2ソフトウェアタイマーの簡単なテスト

FreeRTOSソフトウェアタイマーに関する質問については、ブログ投稿を参照してください。

FreeRTOSレコーディング(8. FreeRTOSソフトウェアタイマー)

ここではESP32-C3を使用しており、以下をテストするだけです。

1.ソフトウェアタイマーヘッダーファイルを追加します。/2
ここに画像の説明を挿入
。プログラムでタイマーを作成し、オンにします。
ここに画像の説明を挿入
テスト結果は次のとおりです。
ここに画像の説明を挿入

印刷タスクでesp_timerタスクを見たとき、そうだと思っていましたが、後でソフトウェアタイマーではないことがわかりました。このタスクとは、後で学習したときに説明します。

おすすめ

転載: blog.csdn.net/weixin_42328389/article/details/122588053