欧美成人黄色网_欧美精品久久_国产在线一区二区三区_免费视频久久久_亚洲二区视频_欧美大片免费高清观看

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 工業(yè)電子產(chǎn)品 > 半導(dǎo)體產(chǎn)品 > 微控制器MCU

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
微控制器MCU

MicroPython微控制器程序開(kāi)發(fā)入門(mén)指南

發(fā)布日期:2022-04-22 點(diǎn)擊率:76

實(shí)時(shí)嵌入式系統(tǒng)變得非常復(fù)雜,不僅要深入了解復(fù)雜的 32 位微控制器,還要了解傳感器、算法、因特網(wǎng)協(xié)議以及各種不同的終端用戶應(yīng)用。隨著開(kāi)發(fā)周期縮短和功能增多,開(kāi)發(fā)團(tuán)隊(duì)需要設(shè)法加速設(shè)計(jì)并將代碼移植到新產(chǎn)品中,因此,他們需要一個(gè)集成且靈活的開(kāi)發(fā)平臺(tái)。

有幾個(gè)微控制器特定的平臺(tái)可幫助加快開(kāi)發(fā)流程,但這種解決方案的問(wèn)題在于,開(kāi)發(fā)人員只能依賴單一的微控制器供應(yīng)商。將軟件從一個(gè)平臺(tái)移植到另一個(gè)平臺(tái)非常耗時(shí),而且成本很高。

有一種獨(dú)特且新穎的解決方案獲得了廣泛的認(rèn)可和接受:將低級(jí)微控制器硬件與高級(jí)編程語(yǔ)言(如 Python)相結(jié)合。MicroPython 就是這樣的解決方案。這種方案可在幾個(gè)不同的微控制器供應(yīng)商的零部件上運(yùn)行,而且是開(kāi)源的,使開(kāi)發(fā)人員能夠隨時(shí)使用和自定義需求。

MicroPython.org 將其描述為精益高效的 Python 3 編程語(yǔ)言的執(zhí)行,其中包括 Python 標(biāo)準(zhǔn)庫(kù)的較小子集,該庫(kù)經(jīng)過(guò)優(yōu)化可在微控制器和受限環(huán)境中運(yùn)行。MicroPython 項(xiàng)目采用眾籌形式,不僅可以成功獲得資金,而且吸引了大量關(guān)注,現(xiàn)已成功應(yīng)用于多個(gè)行業(yè)的項(xiàng)目,例如基于工業(yè)與空間的系統(tǒng)。

選擇正確的微控制器

MicroPython 可在幾個(gè)不同的微控制器上運(yùn)行。如果微控制器具有足夠的 RAM、閃存和處理能力來(lái)運(yùn)行解釋器,那么將 MicroPython 移植到更多微控制器就不會(huì)遇到太大的限制。也就是說(shuō),對(duì)于運(yùn)行 MicroPython 的微控制器,開(kāi)發(fā)人員應(yīng)關(guān)注幾個(gè)關(guān)鍵要求:

  • 至少 256 KB 閃存

  • 至少 16 KB RAM

  • 至少 80 MHz 時(shí)鐘頻率

這些只是一般建議,開(kāi)發(fā)人員可根據(jù)實(shí)際的應(yīng)用需求和定制 MicroPython 內(nèi)核的預(yù)期時(shí)間來(lái)進(jìn)行調(diào)整。例如,可以修改 MicroPython,以使用遠(yuǎn)低于 256 KB 的閃存。這些建議旨在為開(kāi)發(fā)人員提供最佳體驗(yàn)并為應(yīng)用代碼提供改進(jìn)空間。

MicroPython 已被移植到幾個(gè)不同的微控制器系列,這是一個(gè)很好的起點(diǎn),之后可以將其移植到新平臺(tái)或選擇已經(jīng)受支持的微控制器。圖 1 展示了 MicroPython 源代碼的主目錄。讀取器可以從這個(gè)目錄讀取到幾個(gè)不同的受支持的微控制器,如:

  • 基于 ARM? 的微控制器

  • Texas Instruments 的 CC3200

  • Adafruit 的 ESP8266

  • Microchip Technology 的 nly=0&ColumnSort=0&page=1&quantity=0&ptm=0&fid=0&pageSize=25">16 位 PIC 微控制器

  • STMicrolectronics 的 STM32

示例文件夾目錄結(jié)構(gòu)的圖片

圖 1: 示例文件夾目錄結(jié)構(gòu)展示了目前支持 MicroPython 的可用的微控制器平臺(tái)。這些微控制器包括 ARM、CC3200、esp8266、Microchip PIC 和 STM32。(圖片來(lái)源: Beningo Embedded Group)

根目錄列出的每個(gè)文件夾都是高級(jí)文件夾,包含一般驅(qū)動(dòng)器和針對(duì)該芯片系列的支持。每個(gè)文件夾可能支持幾個(gè)不同的開(kāi)發(fā)板或處理器。例如,stmhal 文件夾支持 STMicroelectronics 的 STM32F429 Discovery Board 和 STM32 IoT Discovery Node (STM32L) 以及 Adafruit Industries 的 STM32F405 pyboard 等開(kāi)發(fā)板。ESP8266 文件夾支持 Adafruit 的 Huzzah 分線板(用于 ESP8266)以及 Feather Huzzah Stack Board。

可運(yùn)行 MicroPython 的開(kāi)發(fā)板價(jià)格低廉,開(kāi)發(fā)人員可以購(gòu)買(mǎi)多個(gè)開(kāi)發(fā)板來(lái)摸索應(yīng)用程序需要多少內(nèi)存、存儲(chǔ)空間和處理能力。例如,開(kāi)發(fā)人員剛開(kāi)始可使用 STM32F405 pyboard,之后決定移到最終產(chǎn)品中的 STM32F429,以實(shí)現(xiàn)面向未來(lái)的功能和升級(jí)。STM32F429 具有 2 MB 閃存、24 KB RAM 和特殊的零瓦等待狀態(tài)的 RAM(稱為 CCM)。

開(kāi)發(fā)人員編寫(xiě)的 MicroPython 應(yīng)用代碼不一定要存儲(chǔ)在微控制器的內(nèi)部閃存中。MicroPython 內(nèi)核需要存在于微控制器,但應(yīng)用代碼可放在外部存儲(chǔ)介質(zhì),例如 Panasonic 的 microSD 8 GB 卡。將應(yīng)用代碼存儲(chǔ)在外部存儲(chǔ)介質(zhì),就能夠使用內(nèi)存更低的微控制器,節(jié)省了整體系統(tǒng)成本。

入門(mén)及使用 MicroPython

MicroPython 已預(yù)裝到 Adafruit STM32F405 pyboard 上。對(duì)于其他開(kāi)發(fā)套件或定制硬件,開(kāi)發(fā)人員都需要下載 MicroPython 源代碼,為目標(biāo)板構(gòu)建源代碼,然后使用軟件刷新微控制器。MicroPython 全部存放在 GitHub 中,可以輕松訪問(wèn)。開(kāi)發(fā)人員需遵循幾個(gè)步驟來(lái)設(shè)置工具鏈并配置構(gòu)建 MicroPython 的環(huán)境。在這個(gè)例子中,我們將為 STM32F429 Discovery 開(kāi)發(fā)板構(gòu)建 MicroPython。

首先,開(kāi)發(fā)人員需要?jiǎng)?chuàng)建一個(gè)基于 Linux 的虛擬機(jī)或使用原生 Linux 安裝。可從終端獲得 Linux 之后,開(kāi)發(fā)人員可使用以下命令來(lái)安裝 ARM 編譯器工具鏈:

sudo apt-get install gcc-arm-none-eabi

 

如果安裝的是新版本的 Linux,可能不帶版本控制系統(tǒng) Git。可使用以下命令從終端安裝 Git:

 

sudo apt-get install git

 

安裝 Git 之后,可以通過(guò)在終端中執(zhí)行以下命令來(lái)檢驗(yàn)存儲(chǔ)庫(kù)的 MicroPython 源代碼:

 

git clone https://github.com/micropython/micropython.git

這個(gè)過(guò)程可能需要幾分鐘,但開(kāi)發(fā)人員可以看到演示的序列(圖 2)。

將 MicroPython 存儲(chǔ)庫(kù)克隆到本地文件系統(tǒng)的圖片

圖 2: 將 MicroPython 存儲(chǔ)庫(kù)克隆到本地文件系統(tǒng),以便開(kāi)發(fā)人員為目標(biāo)板構(gòu)建 MicroPython 或根據(jù)具體應(yīng)用定制內(nèi)核。 (圖片來(lái)源: Beningo Embedded Group)

將 MicroPython 源代碼克隆到本地文件系統(tǒng)之后,應(yīng)將其更改到該目錄,然后在終端執(zhí)行“cd stmhal”。stmhal 目錄包含 STM32 微控制器的 MicroPython 的編譯腳本。還有一個(gè)供開(kāi)發(fā)人員查看的“boards”文件夾,顯示了目前支持的所有 STM32 開(kāi)發(fā)板。開(kāi)發(fā)人員可以從終端構(gòu)建任何位于“boards”文件夾的開(kāi)發(fā)板。例如,開(kāi)發(fā)人員可鍵入以下命令來(lái)構(gòu)建 STM32F4 Discovery 開(kāi)發(fā)板:

make BOARD=STM32F4DISC

MicroPython 的構(gòu)建過(guò)程需要幾分鐘。在構(gòu)建過(guò)程中,開(kāi)發(fā)人員可以安裝設(shè)備固件更新 (DFU) 工具,用于通過(guò) USB 將 MicroPython 編程到微控制器中。該工具只需安裝一次,可通過(guò)在終端輸入以下命令來(lái)完成:

sudo apt-get install dfu-util

MicroPython 構(gòu)建完成并安裝 dfu-util 之后,開(kāi)發(fā)人員即可將 MicroPython 加載到他們的微控制器上。開(kāi)發(fā)人員需要先將微控制器設(shè)置到 DFU 引導(dǎo)程序模式。要完成這一步,可以設(shè)置引導(dǎo)引腳來(lái)復(fù)位加載內(nèi)部引導(dǎo)程序,而不是從閃存執(zhí)行代碼。

當(dāng)微控制器處于引導(dǎo)程序模式并通過(guò) USB 連接到主機(jī)時(shí),可通過(guò)以下命令來(lái)使用 dfu-util 下載 MicroPython:

dfu-util -a 0 -d 0483:df11 -D build-STM32F4DISC/firmware.dfu

dfu-util 將使用編譯過(guò)程輸出的 dfu 文件。這個(gè)過(guò)程需要幾分鐘時(shí)間,因?yàn)槲⒖刂破鲗⒈煌耆脸⒅匦戮幊獭_@個(gè)過(guò)程與圖 3 所示的過(guò)程非常相似。工具完成之后,應(yīng)將引導(dǎo)跳線設(shè)置為從內(nèi)部閃存加載,然后重啟微控制器的電源。現(xiàn)在,MicroPython 已經(jīng)在目標(biāo)微控制器上運(yùn)行。

使用 dfu-util 將 MicroPython 加載到微控制器的圖片

圖 3: 使用 dfu-util 將 MicroPython 加載到微控制器。(圖片來(lái)源: Beningo Embedded Group)

連接傳感器和設(shè)備

使用 MicroPython 等高級(jí)編程語(yǔ)言來(lái)開(kāi)發(fā)實(shí)時(shí)嵌入式軟件的最大優(yōu)點(diǎn)在于:軟件獨(dú)立于基礎(chǔ)硬件。這意味著開(kāi)發(fā)人員可以編寫(xiě)一個(gè) MicroPython 腳本在 pyboard 上運(yùn)行,而且可以稍作修改或原封不動(dòng)地在 ESP8266 或 STM32F4 Discovery 開(kāi)發(fā)板上運(yùn)行該腳本。讓我們來(lái)看看基本的 MicroPython 腳本如何將一個(gè) Bosch Sensortec BMP280 氣壓計(jì)和溫度傳感器連接到 I2C 總線,然后使用 Microchip Technology RN-42 藍(lán)牙模塊通過(guò)藍(lán)牙串行鏈路傳輸數(shù)據(jù)。

BMP280 是一款基于 I2C 的氣壓計(jì)和溫度傳感器,具有默認(rèn)的十進(jìn)制 119 的 I2C 從地址。將其連接到 pyboard 的最簡(jiǎn)單的方法是使用 DFRobot 的 Gravity 板,它提供了一個(gè)強(qiáng)大的連接器,可輕松啟動(dòng)設(shè)備和訪問(wèn) I2C。開(kāi)發(fā)人員可選擇 I2C1 或 I2C2 總線來(lái)連接 Gravity 板。連接板之后,MicroPython 腳本就很簡(jiǎn)單了。

首先,開(kāi)發(fā)人員需要從 pyb 庫(kù)導(dǎo)入 I2C 類。通過(guò) pyb 庫(kù)可訪問(wèn)微控制器外設(shè)功能,如 SPI、I2C 和 UART。在使用任何外設(shè)之前,開(kāi)發(fā)人員必須實(shí)例化外設(shè)類,以創(chuàng)建可用于控制外設(shè)的對(duì)象。外設(shè)類初始化之后,開(kāi)發(fā)人員可以執(zhí)行任何其他初始化,例如在進(jìn)入主應(yīng)用程序循環(huán)之前驗(yàn)證設(shè)備是否存在。主應(yīng)用代碼將每秒對(duì)傳感器進(jìn)行一次采樣。代碼列表 1 是這個(gè)過(guò)程的示例。

Copyfrom pyb import I2C
 
GlobalTemp = 0.0
GlobalBarometer = 0.0
 
# Initialize and Instantiate I2C peripheral 2
I2C2 = I2C(2,I2C.MASTER, baudrate=100000)
 
while True:
            SensorSample()
            pyb.delay(1000)
 
def SensorSample():
            #Read the Temperature Data
            TempSample = I2C2.readfrom_mem(119, 0xFA,3)
 
            #Read the Pressure Data
            PressureSample = I2C2.readfrom_mem(119, 0xF7,3)

代碼列表 1: MicroPython 腳本用于初始化 I2C 外設(shè)并與 DFRobot Gravity 板通信,以獲取溫度和氣壓計(jì)傳感器數(shù)據(jù)。(代碼來(lái)源: Beningo Embedded Group)

如果只對(duì)傳感器數(shù)據(jù)進(jìn)行采樣卻不使用,開(kāi)發(fā)團(tuán)隊(duì)就無(wú)法體驗(yàn)到 MicroPython 有力的幫助。許多開(kāi)發(fā)團(tuán)隊(duì)面臨一個(gè)技術(shù)挑戰(zhàn):使用藍(lán)牙將傳感器設(shè)備連接到因特網(wǎng)或本地傳感器中樞。

為項(xiàng)目添加藍(lán)牙功能的一個(gè)簡(jiǎn)單方法是使用 RN-42。RN-42 可以進(jìn)入一個(gè)模式:微控制器只需發(fā)送應(yīng)通過(guò)藍(lán)牙傳輸?shù)?UART 數(shù)據(jù),由 RN-42 處理整個(gè)藍(lán)牙堆棧(圖 4)。

通過(guò) UART 將運(yùn)行 MicroPython 的 pyboard 連接到 RN-42 藍(lán)牙模塊。

圖 4: 通過(guò) UART 將運(yùn)行 MicroPython 的 pyboard 連接到 RN-42 藍(lán)牙模塊。(圖片來(lái)源: Beningo Embedded Group)

連接藍(lán)牙板之后,開(kāi)發(fā)人員就可以創(chuàng)建一個(gè)非常簡(jiǎn)單的腳本,將接收到的傳感器數(shù)據(jù)通過(guò)藍(lán)牙傳輸?shù)揭苿?dòng)設(shè)備,之后可以保存數(shù)據(jù)或發(fā)送到云端進(jìn)行進(jìn)一步分析。代碼列表 2 是這個(gè)過(guò)程的示例。在這個(gè)例子中,UART1 配置為 115200 bps、8 位傳輸、無(wú)奇偶校驗(yàn)和單個(gè)停止位。

Copyfrom pyb import uart
from pyb import I2C
 
GlobalTemp = 0.0
GlobalBarometer = 0.0
 
# Initialize and Instantiate I2C peripheral 2
I2C2 = I2C(2,I2C.MASTER, baudrate=100000)
 
# Configure Uart1 for communication
Uart1 = pyb.UART(1,115200)
Uart1.init(115200, bits=8, parity=None, stop=1)
 
while True:
            SampleSensor()
            pyb.delay(1000)
 
def SensorSample():
            #Read the Temperature Data
            TempSample = I2C2.readfrom_mem(119, 0xFA,3)
 
            #Read the Pressure Data
            PressureSample = I2C2.readfrom_mem(119, 0xF7,3)
 
            #Convert Sample data to string
            data = “#,temperature=”str(TempSample)+”,pressure”+str(PressureSample)+”,#,

”
 
            #Write the data to Bluetooth
            Uart1.write(data)

代碼列表 2: MicroPython 腳本初始化 UART1 并與外部設(shè)備通信的示例。(代碼來(lái)源: Beningo Embedded Group)

該應(yīng)用不僅可以將 Python 應(yīng)用代碼輕松地移植到其他硬件平臺(tái)上,還能使用已實(shí)現(xiàn)的常用庫(kù)和功能來(lái)幫助開(kāi)發(fā)人員加速開(kāi)發(fā)。上述應(yīng)用程序的創(chuàng)建可以在一個(gè)小時(shí)或更短的時(shí)間內(nèi)完成;如果開(kāi)發(fā)人員從最低軟件層面開(kāi)始逐步創(chuàng)建,可能就需要一周或更長(zhǎng)時(shí)間。

開(kāi)發(fā)實(shí)時(shí)軟件的技巧與竅門(mén)

使用 MicroPython 開(kāi)發(fā)嵌入式應(yīng)用非常簡(jiǎn)單,但從系統(tǒng)獲得實(shí)時(shí)性能可能就沒(méi)有想象中那么簡(jiǎn)單了。MicroPython 提供了簡(jiǎn)化和重用代碼這一巨大的優(yōu)勢(shì),但如果開(kāi)發(fā)人員不了解一些有趣的事實(shí)和資源庫(kù),從系統(tǒng)獲取可預(yù)測(cè)和一致的時(shí)序可能就會(huì)是一項(xiàng)有挑戰(zhàn)性的任務(wù)。

MicroPython 包含一個(gè)在后臺(tái)運(yùn)行的垃圾回收器,用于管理堆棧和其他內(nèi)存資源。垃圾回收器是非確定性的,如果開(kāi)發(fā)人員希望垃圾回收器在關(guān)鍵時(shí)間段開(kāi)始執(zhí)行時(shí)能做出確定性的行為,可能就會(huì)遇到麻煩。以下幾個(gè)建議可幫助開(kāi)發(fā)人員避免這種麻煩。

首先,開(kāi)發(fā)人員可以導(dǎo)入垃圾回收庫(kù) gc,并使用“啟用”和“禁用”方法來(lái)控制啟用或禁用垃圾回收器的時(shí)間。如代碼列表 3 所示,開(kāi)發(fā)人員可以在關(guān)鍵時(shí)間段之前禁用垃圾回收,之后再啟用。

Copyimport gc
 
gc.disable()
 
#My time critical code
 
gc.enable()

代碼列表 3: 在時(shí)間關(guān)鍵代碼段之前禁用 MicroPython 垃圾回收器。(代碼來(lái)源: Beningo Embedded Group)

其次,開(kāi)發(fā)人員也可以手動(dòng)控制垃圾回收過(guò)程。開(kāi)發(fā)人員創(chuàng)建并銷毀對(duì)象時(shí),即在堆棧上分配內(nèi)存。垃圾回收器運(yùn)行并釋放未使用的空間。由于它是不定期進(jìn)行的,開(kāi)發(fā)人員可使用收集方法定期運(yùn)行垃圾回收,以確保堆棧空間不會(huì)被垃圾填滿。完成這個(gè)操作后,垃圾回收運(yùn)行可以從每次 10 毫秒降低到 1 毫秒以內(nèi)。手動(dòng)調(diào)用垃圾回收還可確保開(kāi)發(fā)人員的應(yīng)用程序可以控制非確定性的定時(shí)代碼。這使他們可以決定何時(shí)運(yùn)行垃圾回收,并確保他們的應(yīng)用程序具有實(shí)時(shí)性能。

對(duì)編寫(xiě)實(shí)時(shí)代碼感興趣的開(kāi)發(fā)人員可以關(guān)注其他幾個(gè)最佳實(shí)踐。其中包括:

  • 使用預(yù)分配的用于通信通道的緩沖器

  • 使用通信外設(shè)時(shí)采用 readinto 方法

  • 使用 ### 避免傳統(tǒng)的 Python 文檔

  • 在運(yùn)行時(shí)最大限度地減少對(duì)象的創(chuàng)建和析構(gòu)

  • 監(jiān)控應(yīng)用程序執(zhí)行時(shí)間

有興趣了解更多“最佳實(shí)踐”的開(kāi)發(fā)人員可以在這里查看 MicroPython 優(yōu)化文檔。

總結(jié)

對(duì)于想要實(shí)現(xiàn)獨(dú)立于基礎(chǔ)微控制器硬件的實(shí)時(shí)嵌入式應(yīng)用程序的開(kāi)發(fā)人員來(lái)說(shuō),MicroPython 是一個(gè)值得關(guān)注的平臺(tái)。開(kāi)發(fā)人員可以使用 MicroPython 提供的標(biāo)準(zhǔn)庫(kù)來(lái)編寫(xiě)高級(jí) Python 腳本,并在任何受支持的微控制器上運(yùn)行腳本。這為開(kāi)發(fā)人員帶來(lái)了很多好處,包括:

  • 提高了應(yīng)用重復(fù)使用率

  • 縮短了產(chǎn)品上市時(shí)間

  • 將應(yīng)用程序從硬件中獨(dú)立開(kāi)來(lái)

MicroPython 并不適用于所有應(yīng)用,但迄今為止已在工業(yè)與空間系統(tǒng)應(yīng)用領(lǐng)域取得了成功,同時(shí)還實(shí)現(xiàn)了快速的原型開(kāi)發(fā)和概念驗(yàn)證。 

下一篇: PLC、DCS、FCS三大控

上一篇: 開(kāi)關(guān)介紹及教程

推薦產(chǎn)品

更多
主站蜘蛛池模板: 韩国毛片免费看 | 亚洲风情第一页 | 女人扒开裤子让男人捅 | 视频偷拍一级视频在线观看 | 99蜜臀噜噜噜在线视频观看 | 快播看片毛网站 | 国产精品电影院 | 偷拍与自拍| 精品亚洲一区二区在线播放 | 免费精品久久久久久中文字幕 | 欧美性第一页 | 人妻熟女αⅴ一区二区三区 | 男女一边摸一边做爽爽的免费阅读 | 欧美日韩色另类综合 | 亚洲国产最大av | 蜜桃日本一道无卡不码高清 | 亚洲精品一区二区在线播放 | 无码日韩人妻精品久久蜜桃 | 国产在线视频欧美亚综合 | 国产成人精品一区二区视频 | 欧美老熟妇xb水多毛多 | 欧美日韩中文字幕久久伊人 | www.精品在线| 少妇愉情理伦片 | 免费观看一级特黄三大片视频 | 国产成人精品综合 | 18分钟处破好疼哭视频在线观看 | 国产高清视频 | 男人的天堂影院 | 女人操男人 | 九九热在线播放 | 大香萑75久久精品免费 | 电影内射视频免费观看 | 欧美69影院 | 欧美午夜精品一区二区三区电影 | 少妇被躁爽到高潮 | 国产在线观看免费一级 | 女人精69xxxxx免费视频 | 亚洲aⅴ天堂av天堂无码麻豆 | 国产成人咱精品视频免费网站 | 亚洲成人免费在线视频 |