Categories: mbed

mbed 基礎教學實驗 – UART / RS232

UART 是一種常見的有線通訊方式,幾乎所有的電腦相關設備都支援這個通訊方式,他透過最少三條訊號線:發射、接收、地線,來進行設備之間的資料交換與通訊。或許你對 UART 這名稱較不熟悉,他還有另一個名稱:RS232 串列通訊。

開始之前

事前準備

這次要準備的東西不多。

  • mbed LPC1768
  • 電腦或筆電
  • USB 轉 TTL 傳輸線

其中以** USB 轉 TTL 傳輸線**最為重要,透過這條線可以直接讓電腦與 mbed 做通訊。這條線你可以在網路上找到,價格非常便宜,你也可以自行 DIY 一個,用的核心 IC 大多為 PL2303 系列。

除此之外,你還需要一個軟體來監聽 mbed 透過 UART 傳至電腦的軟體。

CoolTerm 好用的串列埠監聽軟體

本來我是想介紹用 Terminal 的方式,不過想想覺得太複雜,還好有人佛心寫了好用又免費的軟體可以用,那就是 CoolTerm。這軟體我實際用起來感覺非常方便,簡單的點點按按就可以連接上要監聽的串列埠了。

使用介面可以參考下圖

Options 是設定連接埠的重要選項,點進去後長這樣

到這邊就是基本的 Coolterm 介紹。

Windows 事前準備

Windows 與 MAC 或 Linux 不大相同,前者需要安裝驅動程式,後者則不用。

若你是 Windows 使用者,請先這樣做:

  1. 點此下載驅動程式
  2. 將 mbed 接上電腦
  3. 安裝驅動程式

安裝過程中如果看到以下視窗請點 Install

之後等待安裝程式跳出 The driver was installed successfully 後點下 Finish 即安裝完成。

然後在我的電腦上按右鍵選擇管理,在左側選單找到裝置管理員看看有沒有多出一個名叫 mbed Serial Port 的裝置,有的話請記下括號中的名稱,我的是 COM13。

直接使用 USB

mbed LPC1768 有提供一個內建的 USB 串列通訊方式,當你將 mbed LPC1768 與你的電腦連上時,他就會建立一個虛擬的 COM port 可供使用,也就是說,你可以直接使用這個內建的功能做 Debug 。Windows 使用者請記得安裝驅動程式!

Hello World

慣例慣例。

#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx 發射, 接收

int main() 
{
    pc.printf("Hello World!\n\r");
}

執行結果

回應鍵盤輸入

這個會在你按下鍵盤的按鍵時回傳一個你所輸入的字元的下一個字元,例如你輸入 A ,你畫面就會跳出 B 。

程式碼如下:

#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx 發射, 接收

int main() {
    // 傳送 Hello World! 字串到電腦
    pc.printf("Hello World!\n");
    while(1) {
        // 回傳鍵盤按下的按鍵並 + 1(A->B, B->C)
        pc.putc(pc.getc() + 1);
    }
}

一般 UART 通訊

了解與電腦之間的溝通之後,我們要來試試看從 mbed 的其他腳位送出 UART 訊號。

mbed LPC1768 除了 USB 通訊用的一組 UART 之外,還有另外三組可供使用。

Tx Rx
1 p9 p10
2 p13 p14
3 p28 p27

上表就是這三組的腳位位置,而程式碼的部分其實也很簡單,只需要改建立物件時所宣告的腳位位置就可以了。

硬體接線

找不到圖好畫,不過接線很簡單,只要記得 Rx 對應 Tx,Tx 對應 Rx 就可以了。

要理解這樣接線的原因,首先要知道 Rx 與 Tx 代表的意思。

Rx = Receiver 也就是接收者(端)的意思

Tx = Transmitter 也就是發射者(端)的意思

知道意思後,就可以很明白的理解,為何 Rx 要對應到 Tx 然後 Tx 要對應到 Rx 了。

接下來我們來看看程式。

Hello World

同樣也是慣例,這邊要注意的是,Tx 與 Rx 的位置有做過更動。

#include "mbed.h"

Serial mySerial(p9, p10); // tx, rx 發射, 接收

int main() 
{
    mySerial.printf("Hello World!\n\r");
}

回應鍵盤輸入

跟使用 USB 與 PC 溝通時的效果相同。

程式碼:

#include "mbed.h"

Serial mySerial(p9, p10); // tx, rx 發射, 接收

int main() {
    // 傳送 Hello World! 字串到電腦
    mySerial.printf("Hello World!\n");
    while(1) {
        // 回傳鍵盤按下的按鍵並 + 1(A->B, B->C)
        mySerial.putc(pc.getc() + 1);
    }
}

多開 UART

這幾組 UART 有個很有趣的特色,就是可以同時開啟!

開法很簡單,只要個別宣告物件就可以了。

程式碼:

#include "mbed.h"

Serial pc(USBTX, USBRX); // tx, rx 發射, 接收
Serial mySerial1(p9, p10); 
Serial mySerial2(p13, p14); 
Serial mySerial3(p28, p27); 

int main() {
    // 傳送 Hello World! 字串到電腦
    pc.printf("Hello World!\n");
    mySerial1.printf("Hello World! from 1\n");
    mySerial2.printf("Hello World! from 2\n");
    mySerial3.printf("Hello World! from 3\n");
}

P.S. 我沒測試這個,我只測試過同時兩個的,理論可行。

總結

mbed LPC1768 加上 USB 端的話總共提供了四組 UART 可以使用,可以說是非常之多。而這帶給 mbed LPC1768 一個不錯的優勢,就是當需要與多個採用 RS232 傳輸協定的外部裝置溝通時,他的處理能力會快很多。

這篇有點晚發,實在是不好意思。

參考資源

duye.chen

View Comments

Recent Posts

[教學] 打造你的 NFT 智能合約 – ERC721A

GM!前些日子在幣圈亂玩,一路...

2 年 ago

JavaScript – Singleton 設計模式

前言 在設計程式時,我們有時會...

3 年 ago

PlaidML 讓你的 Mac 也能加速 Tensorflow 機器學習!

相信很多使用 Mac 或者手上...

3 年 ago

RESTful API 測試很煩,只好動手寫屬於自己的測試了

寫在最前面 嗨,大家好久不見!...

3 年 ago

Node.js 與 Socket.io – 即時聊天室實作:資料庫

經過前兩篇(一、二)文章,我們...

6 年 ago