MicroPython on Nucleo-F401RE, 8. UART

使用MicroPython這個環境, 開發時都是在個人電腦上使用serial port (COM port)連接到開發板上的REPL。所以我們最最簡單的操作方式是在電腦上打開Putty, TeraTerm, 等終端機軟體, 選取某個serial port連到開發板, 然後就可以和開發板上的直譯器交談了。


其實這樣, 我們就占住了開發板上晶片的一個UART通道, 有些晶片特別小, 只有一個UART通道, 例如ESP8266。當我們在使用REPL開發時, 就不可能把這個UART拿來使用, 通常的做法會是將REPL改到別的通道去, 例如Wifi, 再把這個唯一的UART釋放出來使用。但其實之前嘗試的時候總會有一些奇怪的問題發生, 不知道現在的MicroPython版本是否改的較好了。

針對F401這個開發板, 因為本身有兩個UART通道, 所以問題就容易一些。REPL使用一個, 所以我們還有一個可以使用, 不會打架, 可以一邊開發寫程式(使用REPL, 占了一個UART), 一邊操作另一個UART, 並不會有問題。

那麼這兩個UART的腳位是什麼? 那一個UART被REPL使用了, 那一個又是我們可以使用的呢? 由以下連結文件中可以看到說明:

class UART

  • UART(4) is on XA(TX, RX) = (X1, X2) = (PA0, PA1)

  • UART(1) is on XB(TX, RX) = (X9, X10) = (PB6, PB7)

  • UART(6) is on YA(TX, RX) = (Y1, Y2) = (PC6, PC7)

  • UART(3) is on YB(TX, RX) = (Y9, Y10) = (PB10, PB11)

  • UART(2) is on: (TX, RX) = (X3, X4) = (PA2, PA3)

有以上這5種可能, 經我測試, 發現F401的UART, 分別是REPL使用的UART(2), 和我們可以使用的UART(6)。由上列表, 可以看出來, UART(2)用到的是腳位PA2, PA3 (D1, D0), 而UART(6)則用到腳位PC6, PC7。

雖然說UART(2)被REPL用掉了, 但其實還是可以拿來玩一下:

>>> from pyb import UART

>>> uart = UART(2)

>>> uart.write('abc')

abc3

>>> 

至於UART(6):

import pyb

from pyb import UART

uart = UART(6, 9600)


for i in range(100):

    uart.write('abc')

    pyb.delay(5)

就可以在UART通道上送出100個abc的字元:





留言

這個網誌中的熱門文章

D-BUS學習筆記

Cisco Switch學習筆記: EtherChannel

Cisco Switch學習筆記: interface的封包錯誤統計