技術共有

STM32シリアルポートの動作原理

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

STM32 シリアル ポートは非​​常に豊富で強力な機能を備えています。分数ボー レート ジェネレーターを備えた最大 5 つのシリアル ポートを提供でき、単線光通信および半二重単線通信をサポート、LIN、スマート カード プロトコルおよび IrDA SIRENDEC 仕様 (シリアル ポート 3 でのみサポート)、DMA をサポート、など。

シリアルポートの最も基本的な設定はボーレート設定です。 STM32 シリアル ポートの使用は非常に簡単で、シリアル ポート クロックをオンにし、対応する IO ポートのモードを設定し、ボー レート、データ ビット長、パリティ ビットなどの情報を設定するだけで使用できます。それ。以下では、シリアル ポートの基本構成に直接関係するこれらのレジスタを簡単に紹介します。

1. シリアルポートクロックを有効にします。 STM32 のペリフェラルとして、シリアル ポートのクロックはペリフェラル常時イネーブル レジスタによって制御されます。ここで使用するシリアル ポート 1 は、APB2ENR レジスタのビット 14 です。 APB2ENR レジスタのシリアル ポート 1 のクロック イネーブルを除き、他のシリアル ポートのクロック イネーブル ビットはすべて APB1ENR にあります。

2. シリアルポートのリセット 。ペリフェラルに異常が発生した場合、リセットレジスタの対応するビットをセットすることでペリフェラルをリセットし、再構成することでペリフェラルを再動作させることができます。一般に、システムが最初に周辺機器を設定するとき、最初に
このペリフェラルをリセットする操作を実行します。シリアルポート 1 のリセットは、APB2RSTR レジスタのビット 14 を設定することによって実現されます。

3. シリアルポートのボーレート設定。各シリアル ポートには独自の独立したボー レート レジスタ USART BRR があり、このレジスタを設定することで、異なるボー レートを設定できます。このレジスタのビットの説明は次のとおりです。

 

4. シリアルポート制御。 STM32 の各シリアル ポートには 3 つの制御レジスタ USART CR1 ~ 3 があり、シリアル ポートの多くの設定はこれら 3 つのレジスタを通じて設定されます。

5. データの送受信。 STM32 の送受信はデータ レジスタ USART _DR を介して実現されます。これは TDR と RDR を含む 2 つのレジスタであり、このレジスタにデータを書き込むと、データが受信されるとシリアル ポートが自動的に送信します。
時間もこのレジスタに保存されます。

32 ビットのレジスタですが、下位 9 ビット (DR[8:0]) のみが使用され、残りは予約されていることがわかります。 DR[8:0] は、送受信データを含むシリアル ポート データです。送信用(TDR)と受信用(RDR)の2つのレジスタで構成されているため、読み出しと書き込みの両方の機能を持ちます。 TDR レジスタは、内部バスと出力シフト レジスタ間のパラレル インターフェイスを提供します。 RDR レジスタは、入力シフト レジスタと内部バスの間にパラレル インターフェイスを提供します。

チェック ビットを有効にして送信する場合 (USART CR1 PCE ビットがセットされている場合)、MSB (MSB はデータの長さに応じて 7 番目または 8 番目のビット) に書き込まれる値は、後続のチェック ビットの置換によって変更されます。受信時にパリティ ビットが有効になっている場合、読み取られる MSB ビットは受信したパリティ ビットです。

6. シリアル ポートのステータスは、ステータス レジスタ USART SR を通じて読み取ることができます。

ここでは、ビット 5 と 6 の RXNE と TC の 2 つのビットに焦点を当てます。
RXNE (読み取りデータ レジスタが空ではない)、このビットが 1 に設定されている場合、データが受信され、読み出し可能であることを示します。この時点でしなければならないことは、できるだけ早く USART DR を読み取ることです。USART DR を読み取ることによって、このビットをクリアするか、このビットに 0 を書き込んで直接クリアすることができます。
TC (送信完了)、このビットがセットされると、USARTDR 内のデータが送信されたことを意味します。このビットの割り込みが設定されている場合、割り込みが生成されます。このビットには 2 つのクリア方法もあります。1: USART SR の読み取りと USARTDR の書き込み。 2: このビットに直接 0 を書き込みます。

  1. void uart_init(u32 pclk2,u32 bound)
  2. {
  3. float temp;
  4. u16 mantissar
  5. u16 fraction;
  6. temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
  7. mantissa=temp;//得到整数部分
  8. fraction=(temp-mantissa)*16://得到小数部分
  9. mantissa<<=4;
  10. mantissa+=fraction;
  11. RCC->APB2ENRI=1<<2;//使能PORTA口时钟
  12. RCC->APB2ENRI=1<<14;//使能串口时钟
  13. GPIOA->CRH&=0XFFFFF00F;
  14. GPIOA->CRH|=0X000008B0;//IO状态设置
  15. RCC->APB2RSTRI=1<<14;//复位串口1
  16. RCC->APB2RSTR&=~(1<<14)://停止复位
  17. //波特率设置
  18. USART1->BRR=mantissa;//波特率设置
  19. USART1->CR1|=0X200C;//1位停止,无校验位,
  20. USART1->CR1|=1<<8;//PE中断使能
  21. USART1->CR11=1<<5;//接收缓冲区非空中断使能
  22. MY_NVIC_Init(3,3,USART1 IRQChannel,2);//组2,最低优先级
  23. }

シリアル ポート ハードウェア デバイスを初期化し、割り込みを有効にします。

設定手順:

(1) GPI0とUSART1のクロックをONにする
(2) 2 つの USART1 ピンの GPI0 モードを設定します。
(3) USART1 データ形式、ボーレート、その他のパラメータを設定します。
(4) USART1受信割り込み機能を有効にする
(5)最後にUSART1機能を有効にします