MicroPython on Nucleo-F401RE, 3. Hello World (write first python code)

上個貼文看過後, 我們應該已經可以用
C:\> rshell

No MicroPython boards connected - use the connect command to add one

C:\> connect serial COMxx

在Windows電腦上連到F401RE開發板上的MicroPython
然後下repl指令, 就進入REPL界面了, 在這裡就可以用python語言寫程式了.

C:\> repl
Entering REPL. Use Control-X to exit.
>
MicroPython v1.11-274-g06661890d on 2019-09-05; NUCLEO-F401RE with STM32F401xE
Type "help()" for more information.
>>>

因為pyboard和F401RE算是兄弟, 所以我們直接參考其使用指南
http://docs.micropython.org/en/latest/pyboard/quickref.html


首先試一下點亮LED, 這算是firmware開發的Hello World程式了.
from pyb import LED

led = LED(1) # 1=ld2
led.toggle()
led.on()
led.off()
就是這麼簡單, MicroPython在pyboard上弄了一個pyb模組, 板子上的一些硬體都很體貼的幫大家先整理好, 以LED來說, 就有這個相對應的LED類別(class), 因為這個板子上只有一個LED, 所以也就只能如上寫法建立一個LED(1)的物件出來, 然後就可以使用該物件的toggle, on, off等成員函數來工作了。

但其實我們知道LED一定是連接在MCU的某個GPIO腳位, 查一下電路圖, 發現是在D13, PA5(若SB42有連通)。


這樣, 就可以以直接操作GPIO腳位的方式來操作LED.
from pyb import Pin

p_out = Pin('D13', Pin.OUT)
p_out.high()
p_out.low()
當然, 把'D13'換成'PA5'也是可以的。

這樣有什麼用處?
1. 可以外加LED在其他GPIO腳位上, 就不會受限開發板上的硬體, 想要有幾個LED就有幾個!
  例如: 在D9(PC7, Pin19)接一個LED, 剛好右邊Pin 20就是GND, 很方便接!
  那我們就可以把上面程式改一下, 'D13'改成'D9'或'PC7', 就可以用同樣的手法來操作這個新LED.

2. LD2只能亮或暗, 不能設定亮度, 即使LED類別有支援intensity()來設定明亮度也沒用, 因為D13(PA5)這個GPIO腳本身不支援PWM。我們若要玩LED明亮度調整, 可以找一個有支援的GPIO腳來試。例如: D9是有支援的, 由user manual p.44 可以看到

D9支援TIM3_CH2, 那程式就可以如下寫:
from pyb import Pin, Timer

d9 = Pin('D9') # D9 has TIM3, CH2
tim = Timer(3, freq=1000)
ch = tim.channel(2, Timer.PWM, pin=d9)
ch.pulse_width_percent(50)
這表示新加LED的亮度是50%

好了, 先玩到這裡! 至少大家知道這個板子的GPIO對應關係很簡單, 其實就和板子上標註的符號是一樣的。而且兩個腳位標註方式(Arduino, Morpho), 例如: D9(PC7)都可以使用。

****************************************
上次說的my.py還沒有時間寫, 就下次來分享吧!


留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel