到了测试第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の詳細な紹介があり
ます。
- ESP32-C3には2つのタイマーグループがあり、各グループには2つのタイマーがあり、合計で4つのタイマーがあります。
- タイマーは
timer_config_t
構造体され、初期化されます。
たとえば、次の例の初期化:
- 初期化後
timer_start
、タイマーを直接開始することができます。もちろん、いくつかの構成を行ってから、タイマーを開始することもできます。タイマーの最初のカウント値
を設定するために使用します。設定できる他の独自の関数がいくつかあります。以下に示すように、例でのみ使用されます。timer_set_counter_value
timer_set_counter_value
- タイマーがオンになった後のアラームと割り込みは、当然、タイムアウト処理、または割り込み処理関連のコンテンツを持ちます。必要な関数にこれらの番号を設定した後
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タスクを見たとき、そうだと思っていましたが、後でソフトウェアタイマーではないことがわかりました。このタスクとは、後で学習したときに説明します。