[研究ノート] STM32 USARTハードウェアフロー制御

  RS232標準からのフロー制御の概念、RS232標準シリアルポート、フロー制御が含まれているの定義。私たちは、それはIEEE-1284、IEEE-1394規格、等によってではないという意味「推奨標準」「RS」標準の頭字語でありオススメで、RS232を理解しなければならない「カスタマイズの委員会。」このように、異なるベンダーは、RS232を行う際に、どのくらい異なるものになりますまた、フロー制御、異なるものになります。私たちの下にはあなたとフロー制御の役割を議論するために、どのように操作を設定します。

  本論文では、ハードウェアフロー制御に焦点を当てています。

  なぜ、フロー制御?

  2つのシリアルポートとの間の時間データ通信は、多くの場合、データバッファの受信端があれば、今回のフル2台のコンピュータまたはコンピュータとマイクロコントローラの間の通信などのデータの損失の現象が現れます受信機は、プロセスに時間がなかったので、データは、以上送信され、そのようなデータは、おそらく失われることです。産業界や他の地域では、多くの場合、機能が一致しない処理、ため速度の不一致の性質上、この問題が発生しました。例えば、シングルチップのみ20M又は30M、ARM処理パワーは200Mとすることができるでクロック、PCの処理能力が数Gは、データの伝送を容易に失われた場合に生じるこのような処理能力と一致していません。

  ハードウェアフロー制御速度を一致させる問題を解決することです。その基本的な手段は、受信機によって受信されたデータを処理した後、非常にシンプルであるが、信号が受信されるまで、それはもはや、送信側に送信信号を受信し、送信者がこの信号を受信して​​いない時間は、送信を停止します送信し続けることができますその後、送信し続けます。したがって、これにより、データの損失を防止、データ送信制御をスケジュールすることができ、それ自体の制御フロー。

  ハードウェアフロー制御とソフトウェアフロー制御:一般的に二つの方法でフロー制御を使用していました。本論文では、ハードウェアフロー制御について説明します。

  STM32のハードウェアフロー制御を構築するには?

  

 

  ▲1、図のハードウェアフロー制御図を接続します。

  図1は、以前に2本のワイヤ、CTSと呼ばれるものは、(クリアするための送信であるの制御を増大させる必要性に基づいて、ハードウェアフロー制御が有効になっている場合、単純な三線式シリアル通信は、あるRXとTXで使用しますRTSと呼ばれる入力信号は、(信号が出力される送信する必要が)。実際には、名前からわかるように、受信制御で、変速機が制御されます。

  TXとUSART USART CTS 1及びUSART RTS 2接続RX USART 1 2に接続されたUSART 2 USARTから送信された単語、場合我々は、ハードウェア接続図からTXへの方向データを見ることができますすなわち、ポート1からポート2へRTS CTSのフロー制御からポート1からポート2へRX、、。

  データフロー制御線の方向にデータライン方向とは反対

  図1から - ハードウェアフロー制御接続の概略、あなたがデータ線方向を見つけて流れることができる制御線データ方向が逆転し、そしてなぜ記事がメインコンセプトのフロー制御は、受信機を指し、先に述べたことはこれに対処するための時間ではありませんか?送信側を待つ必要があるように、または容量データ処理は、比較的弱いと呼ばれるRTS信号、CTSと呼ばれる送信側検出端子に送られる信号の受信終了。従って、概略部分上半分は反対側の下半分、受信端及びTX 2を接続するハードウェアは、シリアルポートに接続され、シリアルポートは、RTS及びCTS 2に接続されています。

  データは時に受け取った正確にどのように?

  

 

  ▲図2は、RTS信号図を受信します

  図2から - 図はRTS信号を受信し、我々が見ることができる、データがハイレベルの状態で保持される前に、RTS信号が読み出されていない、我々が開始する前に参照して高く、そのデータがCPUまたはDMA DRレジスタから読み出されると、あなたが送信終了を送信する場合、データが連れ去られていない送信側に伝えるためにされ、この時点では、RTSは、低レベルのハイレベルを解放し、送信側お待ちください場合は、データを直接送信することができます。

  ある一つの文章にまとめ、RTSはUSARTが新しいデータを受信する準備ができているかどうかを示します。

  また、当社は、RTS信号に行きますUSARTバッファモードFIFOモードがオンのときに引っ張られたときに、FIFOが満杯であることに注意する必要があります。

  

 

  ▲図3は、CTS信号図を送信します

  図3 - 概略送信CTS信号は、TDRは、ハードウェアの内容はTDRをシフトするために移動し、この時間が送信され、シフトレジスタデータにない場合、データは、このレジスタに書き込まれるレジスタ送信USARTであります直接設定ボーレート、データのフォーマットやその他のデータに応じてデータの送信後のビットレジスタ。これは、送信されたデータの通常のプロセスです。

  如果使能了硬件流控的功能,就会增加一个实时检测的步骤。在图3中,当没有收到CTS信号的时候,TX 发送线上数据是连续发送的,表现形式为:在 STOP 位后紧跟着就是下一个数据的 Start bit。

  当 Data 2 还在 TX 线上进行发送的时候,如果此时在 CTS 信号上检测到了高电平,即使在 Data 2 的 STOP 位发送完之前写入了 Data 3,在当前的字节发送完之后是不会马上发送新写入的数据的,而是要等待,直到在 CTS 管脚上检测为低电平后,TX脚上才会开启 Data 3 的 Start 信号。

  这里其实我们可以简单理解一下,在发送的时候要实时监测 CTS 的电平状态,如果发现是高电平,就不会再发送新的数据,直到 CTS 检测发现已经没有高电平信号了。

  需要注意的是在当前字节发送完之前的三个时钟周期,CTS 需要提前置位上,也就是在Data 2 结尾的地方如果只差一个 STOP bit,那有可能把 Data 3 连续发送出去。

  有人可能会有疑问,CTS 不是马上就置位了吗,而且 Data 2 还没有完全发送出去。其实它是去检查 CTS 的标志位,设置这个标志位至少需要两个时钟周期,设置好了 CTS 的标志位之后,硬件才会去检查进而不去发送 Data 3 的 Start bit。但如果设置的 CTS 或者是检查到的 CTS 已经是非常晚了,那后面的一个字节就已经发送过去了,因为在发送 Data 3 的时候没看到有 CTS 的标志位,所以就要求我们至少提前三个时钟周期把 RTS 信号释放出来,让 CTS 把这个信号检测到进而让后面的数据不再发送。RTS 是只要在接收缓冲区非空的时候就会被提前置位,也就是结果寄存器里面只要有一个东西就会把它置位,都会放在当前的移位缓冲寄存器里。

  在原则上是不会出现由于 RTS 置位比较晚,导致 CTS比较慢的现象。但是不排除一种情况,就是 CTS 和 RTS 之间的延迟特别大,或者说串口的波特率特别快,这个时候就容易出现由于 RTS 置位比较晚使得 CTS 比较慢的现象。

  软件配置

  

 

  ▲ 图4,软件配置

  在 CubeMX 里可以选择一个串口模式为异步模式,之后在它下面的硬件流控 RS232 中选择 CTS/RTS。这里要注意一下,CTS 和 RTS 是可以单独使能的,可以根据速度来选择使能 CTS 还是 RTS,如果我的速度比较慢的话就使能 RTS,因为 RTS 是给对方的信号,不需要考虑对方的处理能力。

  另外,在 CubeMX 里也可以使能 RS485 的硬件流控,这里的流控实际上流控的是数据的方向,因为 RS485 是一个半双工的通讯模式,它的数据收的时候就不能发,发的时候不能收。STM32 上有一个 DE 管脚和 RS485 的接收器芯片直接相连,控制数据的收发,所以我们要知道在 STM32 的硬件流控中其实包含两方面的内容,一方面是关于速度的,也就是 RS232 的 CTS、RTS;另一方面是关于数据的方向的控制,它是基于 RS485 的,在软件中只需要设置它的功能,其他使用功能和串口都是一样的。

  硬件流控和软件流控的区别

  软件流控是以特殊的字符来代表从机已经不能再接收新的数据了,基本的流程就是从机在接收数据很多的时候或主动给发送端发送一个特殊字符,当发送端接收到这个特殊字符后就不能再发送数据了。

  软件流控很方便,不需要增加新的硬件,还是以前的TX、RX,但是使用了软件流控,它本身的字符也是数据,这个数据只不过是说在软件里把它设置了一个特殊的含义。如果它是一个全双工的通讯,在给另一个串口发送数据的时候如果也包含了这样一个特殊字符,对方就会误以为我让它不要再发送数据了,会有一定的概率出现错误,而硬件流控就不需要考虑这方面,只需要使用 CTS 和 RTS,所有的数据都是由硬件来操作的。

  在实际的应用开发中,大家需要根据自己的实际情况来选择使用硬件流控还是软件流控。

 

视频学习资料

(零基础电子产品设计)
http://www.makeru.com.cn/live/3727_1388.html?s=45051
从0到1,设计自己的开发板
http://www.makeru.com.cn/live/4034_2016.html?s=45051

(stm32 USART串口应用)
http://www.makeru.com.cn/live/1392_1164.html?s=45051
PWM脉宽调制技术
http://www.makeru.com.cn/live/4034_2146.html?s=45051
基于STM32讲解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

 

学习交流资料下载群:830802928

おすすめ

転載: www.cnblogs.com/923327iu/p/12196244.html