嚐嚐MicroPython控制微控制器
1. 摘要
本文件主要介紹,在python環境下,如何開發嵌入式應用程式,以STM32H43板卡為例介紹. 從系統環境搭建,到編譯,到用python實現硬體控制。可作為入門教程。
2. 準備工作
2.1 開發環境搭建
2.1.1 Win10自帶linux系統
開發環境可以自己使用虛擬機器然後安裝ubuntu系統,而Win10系統自帶有linux系統,只需要使能就可以使用,比較方便,所以我們以win10自帶的linux子系統為例。
在控制皮膚中啟用linux子系統,點選啟用或關閉Windows功能。

如下圖勾選適用於linux的windows子系統,然後重啟電腦


點選立即重新啟動
重啟後進入windows 10 應用商店,搜尋Ubuntu,可以選擇18.04或者20.02進行安裝

下載安裝完畢,點選啟動

設定使用者名稱和密碼,

安裝的預設路徑是
C:Usershpp19AppDataLocalPackagesCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscLocalState ootfshome
路徑不能修改,至此linux環境就好了,可以輸入一些常用命令看看,如ls,cp, rm等命令。
Win10地下安裝的linux子系統只支援命令列, 沒有自己用虛擬機器安裝的功能全面,但是對於開發micropython 足夠。
2.1.2 虛擬機器安裝
如果不想用windows10 安裝的,想自己搭建也是可以,需要安裝虛擬機器和下載ubunut的iso映象檔案,進行安裝,這種安裝網上很多,我們就不詳細列出了,推薦第一種安裝。

2.1.3 依賴軟體安裝
Git安裝,git用來獲取軟體包

使用克隆micropython的軟體包,也可以去官網自己下載,複製到linux環境的home目錄下。
使用git 克隆軟體包

如果網路不好,要等一段時間,比較慢。也可以自己到官網下載,我已經下好,大家可以找我索取當前最新板micropython-1.13

2.1.4 Micropython 目錄結構
目錄結構比較重要,只有清除目錄結構了,你才能移植到不同的板卡。

詳細的目錄結構介紹可以參考README.md

主要關注下目前micropython支援的ST開發板,和我們關係比較大的是H7系列,可以看到目前支援很多的ST晶片。

3. 交叉編譯工具鏈
在終端輸入sudo apt install gcc make 命令安裝 gcc, make
安裝完後可以檢視下版本


輸入 sudo apt-get install gcc-arm-none-eabi 安裝針對ARM的編譯器

如果你的交叉工具鏈安裝下載比較慢的話,請按以下步驟修改,因為linux自帶的軟體源地址都是國外的,國內更新下載安裝的話會比較慢,需要將列表更新為國內

將開啟的檔案內容全部刪除掉,替換為以下映象源
deb focal main restricted universe multiverse
deb focal-security main restricted universe multiverse
deb focal-updates main restricted universe multiverse
deb focal-proposed main restricted universe multiverse
deb focal-backports main restricted universe multiverse
deb-src focal main restricted universe multiverse
deb-src focal-security main restricted universe multiverse
deb-src focal-updates main restricted universe multiverse
deb-src focal-proposed main restricted universe multiverse
deb-src focal-backports main restricted universe multiverse
修改完軟體源後,更新軟體列表和軟體:
sudo apt update
sudo apt upgrade
如果對vim編輯器命令不熟悉,可以自己百度,或者直接在以下目錄
C:Usershpp19AppDataLocalPackagesCanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgscLocalState ootfsetcapt 下將sources.list檔案替換為以下阿里雲映象源,這樣速度會很快。
編譯mpy-cross, mpy-cross是一個micropython的輔助工具,在編譯過程中會用到,在micropython的原始碼根目錄中輸入命令make -C mpy-cross


至此交叉編譯工具鏈就安裝完畢,可以編譯STM32的程式了。
4. 編譯程式
在原始碼根目錄下輸入命令make -C ports/stm32 如果不指定BOARD,則預設編譯的是ports/stm32下的PYBV10板子,而我們需要的是能在H743上跑,所以需要裁剪移植一個對H743的板子,檢視下可以看到micropython目前支援的STM32板卡有F091, F401,F429,F446,F746,H743等,

複製NUCLEO_H743ZI命名為BODEBOARD

輸入命令ls檢視下已經有BODEBOARD資料夾和檔案,進入檢視下

主要有5個檔案,而我們就需要修改這裡面的檔案
首先修改時鐘為25000000,主要是修改stm32h7xx_hal_conf.h 檔案

修改mpconfigboard.h
將時鐘修改為如下配置,可以複製我們之前IAR工程下的時鐘配置。

修改其他管腳,這一節我們只以修改三個LED和UART1等管腳為例,在文件的下一個版本更新中,會更新所有用到的硬體管腳,還是在這個檔案中繼續修改對應的硬體管腳


儲存退出
修改pins.csv檔案
新增LED和UART1的管腳



儲存退出。
因為我們是參照的NUCLEO_H743ZI,所以mpconfigboard.mk檔案不用修改。至此修改完畢,可以編譯,在micropython根目錄下輸入命令 make -C ports/stm32 BOARD=BODEBOARD

等待編譯完成。

可以看到生成了.hex和.dfu韌體,任選一種下載入H743板子,這樣板卡里就有了python解析器,可以識別python語言

編譯好的韌體怎麼樣複製到windows主機呢,當然你可以直接去生成的目錄底下複製,在win10 的linux子系統中預設已經將windows分割槽掛載好了,我們可以在/mnt目錄下看到

這樣我們就可以直接使用命令cp複製到windows了,當然如果你不習慣命令列操作,可以安裝midinight commander 軟體,可以方便的管理檔案,輸入命令sudo apt install mc 進行安裝,安裝完後,輸入mc可以直接開啟軟體。

不管用那種方法,將Hex檔案下載到硬體板卡,下載完畢後,給板子重新上電,可以看到出現一個PYBFLASH類似隨身碟的磁碟機代號,開啟裡面有boot.py
main.py 等四個檔案,我們最後的應用程式直接寫在main.py就可以執行了。

5. 測試
我們先來演示使用putty來控制板子上的LED燈,開啟putty,配置波特率和串列埠號,

匯入LED庫,就可以控制LED了

可以觀察H743的板子三個LED燈依次點亮,透過Putty可以控制硬體就完成了,那麼如何讓板子上電就三個LED燈點亮,而不需要透過Putty控制呢。?
這就要編輯我們前面提到的main.py檔案,使用任何文字編輯器開啟,寫入python程式碼,儲存退出,就可以執行了。

透過以上程式碼就實現了LED的點亮控制,實現用python控制微控制器。至此就可以用python編寫很多好玩的東西在微控制器上跑了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2745911/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 微控制器呼吸燈
- 【微控制器學習】第八課:微控制器的LED點陣
- 51微控制器學習歷程(二)快速入門51微控制器
- 應廣微控制器開發案例應廣微控制器11bitPWM配置
- 51微控制器入門:LED燈控制(01)
- ESP8266遠端控制——MicroPython 韌體初體驗Python
- 快速入門51微控制器
- 51微控制器紅外接收
- [微控制器]時鐘週期
- 微控制器CPU執行原理
- 51微控制器彙編教程
- (畢業設計資料)基於微控制器51微控制器智慧藥盒控制系統設計
- 【微控制器彙編實戰】基於51微控制器的搶答器設計
- 微控制器三個引腳控制16路流水燈
- 微控制器工作原理的認識
- 51微控制器實現流水燈
- 51微控制器學習跳轉
- 微控制器中volatile的應用
- 微控制器學習(七)串列埠串列埠
- 51微控制器序列通訊原理
- 微控制器小白學習之路(十二)---直流電機的控制
- 十速微控制器應用筆記筆記
- 微控制器萌新的注意事項
- 微控制器中斷有什麼作用
- Keil uVersion 4微控制器開發指南
- 應廣微控制器-外部中斷demo
- MicroPython 8266 配置Python
- 【STM32微控制器學習】第四課:GPIO控制LED
- 微控制器紅外遙控格力空調
- 微控制器-C語言-定義和申明C語言
- 51、52微控制器使用矩陣鍵盤矩陣
- python、51微控制器、百度ai介面PythonAI
- 基於51微控制器的定時器定時器
- 2020-10-31 51微控制器學習
- 讀取微控制器內部程式的方法
- 51微控制器入門:數碼管(3)
- PIC微控制器入門培訓資料
- 51微控制器系列(三)51 微控制器遊戲設計 —— 雙人對戰小遊戲(石頭剪刀布)遊戲設計