STM32 でのシリアル通信 - HAL ライブラリ


1. シリアルポート通信の方法

1. シリアルおよびパラレル通信

  • シリアル通信:デバイス間でデータ信号線を使用して、データを 1 つずつデータ ビットの形で伝送し、同時に 1 ビットのデータしか伝送できません。
    ここに画像の説明を挿入
  • パラレル通信:通信に 8、16、32、またはそれ以上のデータ ラインを使用し、複数のデータ ビットを同時に送信できます。
    ここに画像の説明を挿入

両者の通信方式を比較すると、パラレル通信方式はシリアル通信方式よりもはるかに高速であることがわかりますが、パラレル通信方式は伝送に複数のデータ線が必要であり、シリアル通信よりもコストがかかり、伝送クロックの同期が必要な場合比較的高い場合、多くの信号干渉の問題が発生します。

2. 同期通信と非同期通信

  • 非同期通信:データ同期にクロック信号は必要ありません. データ信号にいくつかの同期信号ビットを直接散在させるか, メインデータをパックして, データフレームの形式でデータを送信します. 一部の通信では, 双方が同意する必要がありますより良い同期のためのデータ転送速度 (ボーレート)。
  • 同期通信:反対に、同期通信トランシーバ デバイスの両側は、信号線を使用してクロックを制約し、クロック信号の駆動下でデータを同期して送信します。

3. シンプレックス、全二重、半二重通信

  • シンプレックス通信:情報は一方向にのみ送信できます. 一方は送信デバイスとして固定され、もう一方は受信デバイスとして固定されています. 送信側は情報を送信することはできますが、情報を受信することはできません, 受信側は情報を受信することしかできませんが、信号線1本で通信が完結します。
  • 全二重通信:同時に、送信側と受信側のデバイスが同時にデータを送受信できますが、この方法では、通信する側の両方に送信側と受信側のデバイスが必要です。通信を完了するには、2 本のデータ ワイヤが必要です。
  • 半二重通信:半二重通信は双方向通信を実現できますが、全二重と比較して、同時に2方向に実行することはできず、同時に1方向にしか情報を送信できません。ただし、送信方向は切り替えることができます(同時に送信できるのは一方向の情報のみです)。

2. シリアルポートの通信プロトコル

1. レベル基準

通信規格 レベル基準
5V TTL ロジック 0: 0 ~ 0.5v ロジック 1: 2.4 ~ 5v
RS-232 ロジック 0: +3v ~ +15v ロジック 1: -15v ~ -3v

2. プロトコル層

シリアル ポート通信のデータ パケットは、送信デバイスから受信デバイスの RXD インターフェイスに、それ自体の TXD インターフェイスを介して送信されます。シリアルポート通信のプロトコル層では、スタートビット、メインデータ、チェックビット、ストップビットからなるデータパケットの内容が規定されており、データの送受信には通信相手のデータパケットフォーマットが合意されている必要があります。通常は。

3. シリアルデータパケットの基本構成

  • ボーレート: 2 つの通信デバイス間で合意された通信速度は、各シンボルの長さです。
  • スタートビットとストップビット:通信データパケットのスタート信号は一般に論理レベル「0」であり、ストップ信号は通常、通信当事者が同意する限り、0.5、1、1.5などのデータビットで表すことができます。
  • 有効なデータ:開始ビットが yo によって送信されるデータの本体である後、一般的に合意された長さは 5、6、7、8 ビットです。
  • データチェックディジット:有効なデータディジットの直後に任意のデータチェックディジットがあります。通信伝送の過程では、外界の影響を受けやすいため、伝送中に奇数パリティ、偶数パリティ、0 パリティ、1 パリティなどのパリティ ビットを追加して、この問題を解決できます。

3.STM32シリアルポートとUSBからTTLへ

这里我们学习的是stm32下完成串口通信,我们就介绍一下stm32下的串口。

1.STM32シリアルポートの導入

USART-Universal Synchronous Asynchronous Receiver Receiver は、外部デバイスとの全二重データ交換を柔軟に実行できるシリアル通信デバイスです。USARTとは異なり、USARTをベースに同期通信機能(クロック同期)を省略し、非同期通信のみを行うUARTもあります。同期と非同期の単純な違いは、通信中に外部クロック出力を提供する必要があるかどうかです. 私たちが通常使用するシリアル通信は基本的にUARTです.

USART 機能ブロック図:
ここに画像の説明を挿入

2. USB to TTLの導入

私たちが一般的に使用する USB-to-serial モジュールはCH340モジュールであり、USB-to-serial ポートは主にデバイス (stm32) と PC 間の通信に使用されます。

  • USB から TTL へのブロック図:
    ここに画像の説明を挿入

4. HAL ライブラリを使用して、STM32 でシリアル通信を実現する

1. File -> New Project
ここに画像の説明を挿入
2. クロック関連の設定
ここに画像の説明を挿入
3. シリアル ポート USART1 を選択
ここに画像の説明を挿入
4. クロック ツリーを設定
ここに画像の説明を挿入

5. プロジェクト名とプロジェクト格納ディレクトリを設定する

ここに画像の説明を挿入
6. 生成されたコードをエクスポートする

ここに画像の説明を挿入
7. keil でプロジェクト ファイルを開き、メイン プログラムにコードを追加します。
ここに画像の説明を挿入

HAL_UART_Transmit(&huart1,(uint8_t *)("hello windows!\n"),15,0xffff);

8. デバッグ シミュレーション設定

ここに画像の説明を挿入
9. ソフトウェア シミュレーションを実行する

ここに画像の説明を挿入
10. 観測結果のシリアルポート印刷成功!
ここに画像の説明を挿入
11. MCUをPCに接続し、プログラムを書き込む

ここに画像の説明を挿入
ホスト コンピュータの電源を入れて、シリアル出力が正常であることを確認します。

要約する

今回行ったシリアルポートの実験はクエリ型のシリアルポート送信、つまり受信しても受信しなくてもシングルチップマイコンは送信するだけでリソースの無駄遣いであることがわかります。予備学習によるシリアルポートの送信と通信. 後で、割り込みを使用してシリアルポートを実装する方法について説明します. , 割り込みでシリアルポートの送信を実現.

おすすめ

転載: blog.csdn.net/wer4567/article/details/127374342