アプリケーション層ソフトウェア開発におけるシングルチップ学習の道-UARTシリアル通信とc#インタラクション

アプリケーション層ソフトウェア開発におけるシングルチップ学習の道-UARTシリアル通信とc#インタラクション

UARTシリアルポート通信とC#シリアルポート通信の例、割り込みとは何か、割り込みの役割と実践

最后更新 2022/10/25 21:58
陈显达
预计阅读 4 分钟
分类
共有する。
标签
.NET C# ハードウェア関連の

この記事はネチズンが投稿した。

著者:陳明達

原文タイトル:【シングルチップマイクロコントローラ入門】(三)アプリケーション層ソフトウェア開発のシングルチップ学習路----UARTシリアル通信とc#相互作用

原文へのリンク:https//www.example.com

はじめに

ブログの最初の章では、ArduinoのEsp 32環境設定について話し、SPI、IIC、UARTなどを含む一般的に使用されるバス通信プロトコルについて学びました。今日はUARTシリアル通信とc#シリアルポート通信のケースを紹介し、割り込みとは何か、割り込みの役割と実践は何か、言うことはあまりありません。正式に始めましょう。

UART

最初のブログ記事では、UARTは送信ピンを受信する必要があると述べました。合計2つ、それぞれTXD(送信ピン)、RXD(受信ピン)で、シングルチップシリアルポートピンの種類に関係なく、これらの2つであり、最後のDよりも少ないかもしれませんが、すべて同じことです。ESP 32開発ボードでは、UARTピンの3つのペアがあります。つまり、ボード上には3つのシリアルポートがあります。シリアル0はピン1と3に対応し、シリアル1はピン9と10に対応し、シリアル2はピン16と17に対応しますが、書き込み中に1と3は使用できません。USB経由でシングルチップをコンピュータに接続し、シリアルポートピン1と3を使用しているので、シリアルポートは2つしか使用できません。Serialには、Serial、Serial 1、Serial 2、Serial 3の4つの静的クラスがあります。彼の数はESP 32のシリアルポート数と同じですが、最初の1つだけが使用でき、最後の2つは使用できません。最後の2つの対応するピンとESP 32のピンは同じではないため、下の2番目の図から見ることができます。シリアル1、シリアル2のPINSはESP 32のピンと一致しないので、シリアルポートの開発では、これらの2つを使用しません。最初のシリアルには使用できます。

ESP 32シリアルポート開発を使用する必要がある場合、ESP開発パッケージでは、公式にHardware Serialシリアルシリアルポートライブラリが提供されています。開発ボード上のシリアルポートを使用でき、ピンはピンマップ上のピンとして指定されます。このライブラリは、Arduino IDEディレクトリのhardware/espressif/esp 32/cores/esp 32にあります。このディレクトリにはESP 32の公式ライブラリが含まれています。このHardwareSerial.hファイルを使用して、ESP 32ボード上のシリアルポートを使用して開発を行うことができます。

コード化

以下のコードでは、簡単なシリアルポート通信を開始します。コードの最初の行では、C言語と同じライブラリファイルを導入します。次に、2行目では、HardwareSerialクラスのMy Serial 1オブジェクトを定義し、コンストラクタの値は1です。つまり、最初のシリアルポートを使用します。以下のセットアップでは、My Serial 1シリアルポートオブジェクトを起動し、起動ボーレートは96 00です。データ長は8、チェックビットはNONE、ストップビットは1、シリアルポートのrxはピン16、txはピン17です。コードの次の行では、以下で定義したreceiveEventメソッドの1つを渡します。このメソッドは、シリアルデータを受信するコールバックを受け取り、シリアルデータが受信された後にメソッドに入るメソッドポインタを渡します。

コードの最後の行では、ボーレート9600の0番目のシリアルポートを有効にしています。

上記のコードは友人が疑問を持っているかもしれませんが、ピン図で定義された16と17のシリアルポートは2ですが、なぜここで定義された1なのですが、実際には、このシリアルポートの定義とピンを変更することができます、コンストラクタは0、1、2の範囲を入力し、開発ボード上の3つのシリアルポートUARTに対応しています。ピンとこの0、1、2は関係ありません。しかし、この入力ピンはボード上の3つのUARTシリアルポートのうちの1つでなければならないため、My Serial 2.begin(96 00,SERIAL_8 N 1,10,9)と定義することもできます。ここで、0、1、2は3つのシリアルポートのペアにのみ対応し、対応するピンを指定しません。beginメソッドで対応するシリアルポートのピンを指定します。

次のシリアルメッセージのコールバックでは、コードの最初の行はavailableメソッドを呼び出し、このメソッドはintパラメータを返し、もちろん、我々はまたavailable()> 0を書くことができます、また、このメソッドはシリアルキャッシュから受信したデータの長さを読み取ることです、この条件は、我々がデータを受信していることを示し、データを読み取り始めます。

すべてのSerialはArduinoプログラムのストリームの基本クラスであり、このクラスはデータを処理するためのいくつかのメソッドを提供しています。次のコードでは、読み込んだデータを文字列に変換し、コードを1秒間中断してから、シリアルオブジェクトを使用して受信したデータをバッファに書き込み、バッファは書き込んだデータを送信します。つまり、printlnで渡されたパラメータはシリアルトランスミッタに送信され、データを送信した人は“i am receive!”を受け取ります。“+str。

#include <HardwareSerial.h>
HardwareSerial MySerial1(1);
void setup() {
  // put your setup code here, to run once:
  MySerial1.begin(9600,SERIAL_8N1,16,17);
  MySerial1.onReceive(receiveEvent);
  Serial.begin(9600);
}

void loop() {

}
void receiveEvent()
{
  if(MySerial1.available())
  {
     String str= MySerial1.readString();
     delay(1000);
     MySerial1.println("i am receive!!"+str);
  }
  delay(1000);
}            

Streamには、Streamを継承するシリアルポート、IIC通信用のWire、SDカード用のクラス、ネットワーク接続用のEthernetクラスなどのメソッドが含まれており、これらのメソッドを使用してデータを操作できます。

C#コード。

C#のコードははるかにシンプルで、インターフェイスにはシリアルポートを開くボタン、データを送信するボタンとテキストボックス、データ表示を受信するためのテキストボックスがあります。

コードでは、シリアルポートを開き、どのシリアルポートを開くかを指定し、いくつかのプロパティはESP 32側と同じ設定が必要です。上記では、ボーレートを96 00に設定し、データは8で、ストップビットは1で、検証ビットはNONEなので、c#側でも設定する必要がありますが、検証ビットはデフォルトではNONEなので、ここでは設定していませんが、シリアルポートを開き、受信したデータを登録します。次に、1024バイト配列を定義し、シリアルポートからデータを読み取り、読み取られたデータの長さを返し、定義した1024バイト配列を傍受し、UTF-8フォーマットを介して文字列に変換し、インターフェイス上のリッチテキストボックスに表示し、送信ボタンイベントでは、入力ボックスからデータをバイト配列に読み取り、シリアルポートにデータを書き込むだけです。

public partial class Form1 : Form
    {
        private SerialPort serialPort = new SerialPort("COM6");
        public Form1()
        {
            InitializeComponent();
        }

        private async void button1_Click(object sender, EventArgs e)
        {
            serialPort.BaudRate = 9600;
            serialPort.StopBits = StopBits.One;
            serialPort.DataBits = 8;
            serialPort.Open();
            serialPort.DataReceived += (a, b) => {
                var serial = a as SerialPort;
                var data = new byte[1024];
                var res=serial.Read(data,0, data.Length);
                data = data[..res];
                string st = Encoding.UTF8
                .GetString(data);
                BeginInvoke(() => { richTextBox1.Text += st; });
            };
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var str = Encoding.UTF8.GetBytes(textBox1.Text);
            serialPort.Write(str, 0, str.Length);
        }
    }       

配線図の概要

この例では、USB TTLモジュール、4つの親デュポンラインを準備する必要があります。プログラムを燃やした後、デュポンラインを使用してTTLモジュールとシングルチップにUSBを接続する必要があります。VCCまたは5 Vマイクロコントローラの5 Vピン、USB TTL GNDとシングルチップGND接続、その後、USB TTL rxdピンとシングルチップ17ピン接続、txdピンとシングルチップチップ16ピンは、以下の図に示すように配線され、5 VはGNDと反転することはできません。そうでなければ、モジュールを燃やす可能性があります。配線が正しいことを確認した後、USBをTTLモジュールに挿入し、コード内のc#プログラムを実行し、モータはシリアルポートを開き、データを送信し、シングルチップチップチップからフィードバックを受信することができます。

おわりにまとめ

シリアル通信は、物事のインターネットでは、通信の不可欠な方法であり、通常はRX接続TX、TX接続RXであり、モジュールメーカーの規定でない限り、この配線であり、後のコースでは、私はIIC、PWM、SPI、および割り込みに順番になりますが、注意を払い、学習し、議論することを歓迎し、私は私が知っていることを共有し、同時に、STM 32シリーズのチュートリアルがあります。興味のある友人がいる場合は、QQグループを追加して822 0 84696を議論できます。

Keep Exploring

延伸阅读

更多文章
同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读