2019/11/30 星期六 作者:Astilbe 問題:怎么利用Stduino實現(xiàn)stm32單片機與電腦間串口通訊?
Stduino需要和其他設(shè)備相互通訊,最簡單的方式就是利用串口實現(xiàn)通訊。本篇介紹Stduino硬件串口通訊,以及相關(guān)函數(shù)的使用。
首先要介紹一個概念——波特率。波特率表示每秒鐘傳送的碼元符號的個數(shù),簡而言之就是對一秒鐘傳遞多少信息的一個度量。如果是串口通信,一般包括起始位,數(shù)據(jù)位,校驗位(可無)和停止位。以起始位為標志,通信雙方進行同步,然后發(fā)送方以一個固定的時間間隔進行比特位的傳輸,接收方以一個固定的時間間隔進行比特位的接收,如果雙方的波特率不同,就意味著發(fā)送方和接收方所采用的時間間隔不相等,就可能導致接收數(shù)據(jù)的錯位。一般認為通信雙方的波特率相差2.5%以內(nèi)可保證正常通信。
因此初始化串口的第一步,就是設(shè)置串口波特率。在這里我們可以通過Serial.begin()函數(shù)實現(xiàn)。常見的波特率有9600與115200兩種,在這里我們設(shè)置為9600進行測試。 Stduino IDE自帶了許多與串口操作有關(guān)的函數(shù),分別是 Serial.begin()//初始化串口; Serial.available()//判斷當前串口是否有可用數(shù)據(jù),有則返回1,沒有則返回0; Serial.print()//利用串口向外傳送信息,在這里就是傳給電腦 Serial.read()//當Serial.available()返回1時,通過此函數(shù)會讀取到接收到的相關(guān)數(shù)據(jù),否則返回無
接下來我們進行以下的測試:利用Stduino向外發(fā)送"Hello,world!"。 分為以下幾步: 初始化串口; 向外傳送"Hello,world!"。 這里設(shè)置為間隔一秒發(fā)送一次。
代碼如下:
void setup() { // put your setup code here, to run once: Serial.begin(9600);//初始化 }
void loop() { // put your main code here, to run repeatedly: Serial.println("Hello,World"); delay(1000); } 點開Stduino右側(cè)眼睛(串口助手),點擊檢測串口、打開串口。恭喜你接收到你的Stduino發(fā)給你的“Hello,world!”了。
 那么,我想給Stduino發(fā)消息呢?比如發(fā)一個1?接下來,我們發(fā)給Stduino一個1.如果收到就回復"Hello,world!",沒有收到或者收到的不是1就不回復。 代碼如下:
void setup() { // put your setup code here, to run once: Serial.begin(9600); }
void loop() { // put your main code here, to run repeatedly: if(Serial.available()){//判斷是否初始化 <div style="text-indent: 28px;">if(Serial.read()==49){//判斷是否接收到了1,49是1的ASCII碼值,測試時注意收到的是十進制還是ascii碼。</div>Serial.print("Hello,World"); delay(1000); } } } 同樣,點開Stduino右側(cè)眼睛(串口助手),點擊檢測串口、打開串口。恭喜你的Stduino收到你的1并給你回復了“Hello,world!”。

最后介紹一個函數(shù)Serial.println(),這是一個給輸出換行的函數(shù),用來減少可能出現(xiàn)的混淆,用到了再說。
 本文轉(zhuǎn)載自Stduino網(wǎng)http:///forum.php?mod=viewthread&tid=9&page=1#pid9
|