【ST開發板評測】使用Python來開發STM32F411


前言

板子局部圖

板子申請了也有一段時間了,也快到評測截止時間了,想着做點有意思的東西,正好前一段時間看到過可以在MCU上移植MicroPython的示例,就自己嘗試一下,記錄移植過程。

MicroPython是什么

程序猿中有句俗語:人生苦短,我用Python。Python的強大和易用性讓它不僅可以寫網站,編程序,在嵌入式領域也有一席之地。

MicroPython,是Python3編程語言的一個完整軟件實現,包括Python標准庫的一小部分,用C語言編寫,經過優化可在微控制器和受限環境中運行。MicroPython是運行在微控制器硬件之上的完全的Python編譯器和運行時系統。提供給用戶一個交互式提示符(REPL)來立即執行所支持的命令。除了包括選定的核心Python庫,MicroPython還包括了給予編程者訪問低層硬件的模塊。

MicroPython支持的開發板

從官方網站我們可以了解到,官方開發板主要有以下幾種:

  • PYB Nano V1.1基於STM32F401

  • PYB Nano V2基於STM32F411

  • PyBoard CN V2基於STM32F405

  • MicroPython ESP32

另外還支持其他系列的開發板:

  • WiPy

  • ESP8266 boards

  • ESP32 boards

  • STM32F4 Discovery board

  • NUCLEO-F401RE board

  • NUCLEO-F411RE board

  • NUCLEO-F767ZI board

  • NUCLEO-L476RG board

  • Espruino Pico

MicroPython移植和板子關系不大,主要支持的是芯片,如果自己的板子芯片是上面的這些型號,也可以刷MicroPython固件,對應的IO口需要更改,而且需要重新編譯生成對應的固件。具體操作方法可以查看:官方Github地址:https://github.com/micropython/micropython,里面包括了源代碼和Linux下的編譯方法。開發板固件下載:MicroPython downloads

Nucleo-F411RE移植MicroPython固件

板子背面Nucleo標志

正好MicroPython支持本次申請的Nucleo-F411RE開發板,就試着把刷成MicroPython的固件,嘗試一下使用Python來開發STM32,具體移植過程。

1.准備工作

2.安裝Dfu下載軟件

下載完成后,安裝DFU下載軟件DfuSeDemo,非常簡單,一路Next就行,在選擇安裝目錄時,可以選擇非系統盤。

3.硬件連接

由於Nucleo-F411RE板子的USB口是連接到ST-Link調試器,並沒有一個連接到STM32 USB引腳的接口,所以我使用的是這種轉接板,把USB的5個信號轉接成5個排針,並和板子上的引腳連接:

轉接板 開發板
VBUS 3.3
D- PA11
D+ PA12
IO GND
GND GND

4.燒錄MicroPython固件

和串口下載程序一樣,使用DFU燒錄固件前,也要先把STM32切換為系統存儲器啟動模式:即下載模式。上電之前要先設置BOOT0=1,BOOT1(PB2)=0,然后燒錄MicroPython固件。

  • 設置完成之后,連接電腦,設備管理會出現一個DFU設備

  • 點擊Upgrade升級,在彈出的界面,點擊“是”。

  • 等待升級完成,斷電,把BOOT短接線拔掉,重新上電。

5.安裝Putty

安裝Putty,打開串口終端,選擇ST-Link虛擬串口號,波特率115200

按一下板子上的黑色復位按鍵,串口輸出:

MicroPython v1.11-12-g6077d1715 on 2019-06-03; NUCLEO-F411RE with STM32F411xE
Type "help()" for more information.
>>> help()
Welcome to MicroPython!

For online help please visit http://micropython.org/help/.

Quick overview of commands for the board:
  pyb.info()    -- print some general information
  pyb.delay(n)  -- wait for n milliseconds
  pyb.millis()  -- get number of milliseconds since hard reset
  pyb.Switch()  -- create a switch object
                   Switch methods: (), callback(f)
  pyb.LED(n)    -- create an LED object for LED n (n=1,2,3,4)
                   LED methods: on(), off(), toggle(), intensity(<n>)
  pyb.Pin(pin)  -- get a pin, eg pyb.Pin('X1')
  pyb.Pin(pin, m, [p]) -- get a pin and configure it for IO mode m, pull mode p
                   Pin methods: init(..), value([v]), high(), low()
  pyb.ExtInt(pin, m, p, callback) -- create an external interrupt object
  pyb.ADC(pin)  -- make an analog object from a pin
                   ADC methods: read(), read_timed(buf, freq)
  pyb.DAC(port) -- make a DAC object
                   DAC methods: triangle(freq), write(n), write_timed(buf, freq)
  pyb.RTC()     -- make an RTC object; methods: datetime([val])
  pyb.rng()     -- get a 30-bit hardware random number
  pyb.Servo(n)  -- create Servo object for servo n (n=1,2,3,4)
                   Servo methods: calibration(..), angle([x, [t]]), speed([x, [t                                                                                                             ]])
  pyb.Accel()   -- create an Accelerometer object
                   Accelerometer methods: x(), y(), z(), tilt(), filtered_xyz()

Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name
Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD
Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN
Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n)

Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')
>>>

6.開始Python開發之旅——點亮一個LED

點亮板載的綠色LED,串口輸入命令點亮和熄滅LED

>>> pyb.LED(1).on()
>>> pyb.LED(1).off()
>>> pyb.LED(1).on()
>>>

更多Python控制外設的命令:Quick reference for the pyboard

參考資料

歷史精選


歡迎關注我的個人博客www.wangchaochao.top

或微信掃碼關注我的公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM