女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

通過MicroPython平臺開發出微控制器的嵌入式程序

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2019-03-22 08:15 ? 次閱讀

實時嵌入式系統變得非常復雜,不僅要深入了解復雜的 32 位微控制器,還要了解傳感器算法、因特網協議以及各種不同的終端用戶應用。隨著開發周期縮短和功能增多,開發團隊需要設法加速設計并將代碼移植到新產品中,因此,他們需要一個集成且靈活的開發平臺。

有幾個微控制器特定的平臺可幫助加快開發流程,但這種解決方案的問題在于,開發人員只能依賴單一的微控制器供應商。將軟件從一個平臺移植到另一個平臺非常耗時,而且成本很高。

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

MicroPython.org 將其描述為精益高效的 Python 3 編程語言的執行,其中包括 Python 標準庫的較小子集,該庫經過優化可在微控制器和受限環境中運行。MicroPython 項目采用眾籌形式,不僅可以成功獲得資金,而且吸引了大量關注,現已成功應用于多個行業的項目,例如基于工業與空間的系統。

選擇正確的微控制器

MicroPython 可在幾個不同的微控制器上運行。如果微控制器具有足夠的 RAM、閃存和處理能力來運行解釋器,那么將 MicroPython 移植到更多微控制器就不會遇到太大的限制。也就是說,對于運行 MicroPython 的微控制器,開發人員應關注幾個關鍵要求:

至少 256 KB 閃存

至少 16 KB RAM

至少 80 MHz 時鐘頻率

這些只是一般建議,開發人員可根據實際的應用需求和定制 MicroPython 內核的預期時間來進行調整。例如,可以修改 MicroPython,以使用遠低于 256 KB 的閃存。這些建議旨在為開發人員提供最佳體驗并為應用代碼提供改進空間。

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

基于 ARM? 的微控制器

Texas Instruments 的 CC3200

Adafruit 的 ESP8266

Microchip Technology 的 16 位 PIC 微控制器

STMicrolectronics 的 STM32

通過MicroPython平臺開發出微控制器的嵌入式程序

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

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

可運行 MicroPython 的開發板價格低廉,開發人員可以購買多個開發板來摸索應用程序需要多少內存、存儲空間和處理能力。例如,開發人員剛開始可使用 STM32F405 pyboard,之后決定移到最終產品中的 STM32F429,以實現面向未來的功能和升級。STM32F429 具有 2 MB 閃存、24 KB RAM 和特殊的零瓦等待狀態的 RAM(稱為 CCM)。

開發人員編寫的 MicroPython 應用代碼不一定要存儲在微控制器的內部閃存中。MicroPython 內核需要存在于微控制器,但應用代碼可放在外部存儲介質,例如 Panasonic 的 microSD 8 GB 卡。將應用代碼存儲在外部存儲介質,就能夠使用內存更低的微控制器,節省了整體系統成本。

入門及使用 MicroPython

MicroPython 已預裝到 Adafruit STM32F405 pyboard 上。對于其他開發套件或定制硬件,開發人員都需要下載 MicroPython 源代碼,為目標板構建源代碼,然后使用軟件刷新微控制器。MicroPython 全部存放在 GitHub 中,可以輕松訪問。開發人員需遵循幾個步驟來設置工具鏈并配置構建 MicroPython 的環境。在這個例子中,我們將為 STM32F429 Discovery 開發板構建 MicroPython。

首先,開發人員需要創建一個基于 Linux 的虛擬機或使用原生 Linux 安裝。可從終端獲得 Linux 之后,開發人員可使用以下命令來安裝 ARM 編譯器工具鏈:

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

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

sudo apt-get install git

安裝 Git 之后,可以通過在終端中執行以下命令來檢驗存儲庫的 MicroPython 源代碼:

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

這個過程可能需要幾分鐘,但開發人員可以看到演示的序列(圖 2)。

通過MicroPython平臺開發出微控制器的嵌入式程序

圖 2: 將 MicroPython 存儲庫克隆到本地文件系統,以便開發人員為目標板構建 MicroPython 或根據具體應用定制內核。(圖片來源: Beningo Embedded Group)

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

make BOARD=STM32F4DISC

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

sudo apt-get install dfu-util

MicroPython 構建完成并安裝 dfu-util 之后,開發人員即可將 MicroPython 加載到他們的微控制器上。開發人員需要先將微控制器設置到 DFU 引導程序模式。要完成這一步,可以設置引導引腳來復位加載內部引導程序,而不是從閃存執行代碼。

當微控制器處于引導程序模式并通過 USB 連接到主機時,可通過以下命令來使用 dfu-util 下載 MicroPython:

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

dfu-util 將使用編譯過程輸出的 dfu 文件。這個過程需要幾分鐘時間,因為微控制器將被完全擦除并重新編程。這個過程與圖 3 所示的過程非常相似。工具完成之后,應將引導跳線設置為從內部閃存加載,然后重啟微控制器的電源。現在,MicroPython 已經在目標微控制器上運行。

通過MicroPython平臺開發出微控制器的嵌入式程序

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

連接傳感器和設備

使用 MicroPython 等高級編程語言來開發實時嵌入式軟件的最大優點在于:軟件獨立于基礎硬件。這意味著開發人員可以編寫一個 MicroPython 腳本在 pyboard 上運行,而且可以稍作修改或原封不動地在 ESP8266 或 STM32F4 Discovery 開發板上運行該腳本。讓我們來看看基本的 MicroPython 腳本如何將一個 Bosch Sensortec BMP280 氣壓計和溫度傳感器連接到 I2C 總線,然后使用 Microchip Technology RN-42 藍牙模塊通過藍牙串行鏈路傳輸數據。

BMP280 是一款基于 I2C 的氣壓計和溫度傳感器,具有默認的十進制 119 的 I2C 從地址。將其連接到 pyboard 的最簡單的方法是使用 DFRobot 的 Gravity 板,它提供了一個強大的連接器,可輕松啟動設備和訪問 I2C。開發人員可選擇 I2C1 或 I2C2 總線來連接 Gravity 板。連接板之后,MicroPython 腳本就很簡單了。

首先,開發人員需要從 pyb 庫導入 I2C 類。通過 pyb 庫可訪問微控制器外設功能,如 SPI、I2C 和 UART。在使用任何外設之前,開發人員必須實例化外設類,以創建可用于控制外設的對象。外設類初始化之后,開發人員可以執行任何其他初始化,例如在進入主應用程序循環之前驗證設備是否存在。主應用代碼將每秒對傳感器進行一次采樣。代碼列表 1 是這個過程的示例。

Copyfrom pyb import I2CGlobalTemp = 0.0GlobalBarometer = 0.0# Initialize and Instantiate I2C peripheral 2I2C2 = 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 外設并與 DFRobot Gravity 板通信,以獲取溫度和氣壓計傳感器數據。(代碼來源: Beningo Embedded Group)

如果只對傳感器數據進行采樣卻不使用,開發團隊就無法體驗到 MicroPython 有力的幫助。許多開發團隊面臨一個技術挑戰:使用藍牙將傳感器設備連接到因特網或本地傳感器中樞。

為項目添加藍牙功能的一個簡單方法是使用 RN-42。RN-42 可以進入一個模式:微控制器只需發送應通過藍牙傳輸的 UART 數據,由 RN-42 處理整個藍牙堆棧(圖 4)。

圖 4: 通過 UART 將運行 MicroPython 的 pyboard 連接到 RN-42 藍牙模塊。(圖片來源: Beningo Embedded Group)

連接藍牙板之后,開發人員就可以創建一個非常簡單的腳本,將接收到的傳感器數據通過藍牙傳輸到移動設備,之后可以保存數據或發送到云端進行進一步分析。代碼列表 2 是這個過程的示例。在這個例子中,UART1 配置為 115200 bps、8 位傳輸、無奇偶校驗和單個停止位。

Copyfrom pyb import uartfrom pyb import I2CGlobalTemp = 0.0GlobalBarometer = 0.0# Initialize and Instantiate I2C peripheral 2I2C2 = I2C(2,I2C.MASTER, baudrate=100000)# Configure Uart1 for communicationUart1 = 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 并與外部設備通信的示例。(代碼來源: Beningo Embedded Group)

該應用不僅可以將 Python 應用代碼輕松地移植到其他硬件平臺上,還能使用已實現的常用庫和功能來幫助開發人員加速開發。上述應用程序的創建可以在一個小時或更短的時間內完成;如果開發人員從最低軟件層面開始逐步創建,可能就需要一周或更長時間。

開發實時軟件的技巧與竅門

使用 MicroPython 開發嵌入式應用非常簡單,但從系統獲得實時性能可能就沒有想象中那么簡單了。MicroPython 提供了簡化和重用代碼這一巨大的優勢,但如果開發人員不了解一些有趣的事實和資源庫,從系統獲取可預測和一致的時序可能就會是一項有挑戰性的任務。

MicroPython 包含一個在后臺運行的垃圾回收器,用于管理堆棧和其他內存資源。垃圾回收器是非確定性的,如果開發人員希望垃圾回收器在關鍵時間段開始執行時能做出確定性的行為,可能就會遇到麻煩。以下幾個建議可幫助開發人員避免這種麻煩。

首先,開發人員可以導入垃圾回收庫 gc,并使用“啟用”和“禁用”方法來控制啟用或禁用垃圾回收器的時間。如代碼列表 3 所示,開發人員可以在關鍵時間段之前禁用垃圾回收,之后再啟用。

Copyimport gcgc.disable()#My time critical codegc.enable()

代碼列表 3: 在時間關鍵代碼段之前禁用 MicroPython 垃圾回收器。(代碼來源: Beningo Embedded Group)

其次,開發人員也可以手動控制垃圾回收過程。開發人員創建并銷毀對象時,即在堆棧上分配內存。垃圾回收器運行并釋放未使用的空間。由于它是不定期進行的,開發人員可使用收集方法定期運行垃圾回收,以確保堆棧空間不會被垃圾填滿。完成這個操作后,垃圾回收運行可以從每次 10 毫秒降低到 1 毫秒以內。手動調用垃圾回收還可確保開發人員的應用程序可以控制非確定性的定時代碼。這使他們可以決定何時運行垃圾回收,并確保他們的應用程序具有實時性能。

對編寫實時代碼感興趣的開發人員可以關注其他幾個最佳實踐。其中包括:

使用預分配的用于通信通道的緩沖器

使用通信外設時采用 readinto 方法

使用 ### 避免傳統的 Python 文檔

在運行時最大限度地減少對象的創建和析構

監控應用程序執行時間

有興趣了解更多“最佳實踐”的開發人員可以在這里查看 MicroPython 優化文檔。

總結

對于想要實現獨立于基礎微控制器硬件的實時嵌入式應用程序的開發人員來說,MicroPython 是一個值得關注的平臺。開發人員可以使用 MicroPython 提供的標準庫來編寫高級 Python 腳本,并在任何受支持的微控制器上運行腳本。這為開發人員帶來了很多好處,包括:

提高了應用重復使用率

縮短了產品上市時間

將應用程序從硬件中獨立開來

MicroPython 并不適用于所有應用,但迄今為止已在工業與空間系統應用領域取得了成功,同時還實現了快速的原型開發和概念驗證。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7906

    瀏覽量

    153698
  • 嵌入式
    +關注

    關注

    5141

    文章

    19532

    瀏覽量

    314952
  • python
    +關注

    關注

    56

    文章

    4825

    瀏覽量

    86178
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何為嵌入式應用選擇合適的微控制器

    嵌入式應用選擇合適的微控制器可能是一項至關重要的任務。不僅有各種各樣的技術選擇需要考慮,還有商業案例問題,如價格和交付時間可能會削弱項目。在項目或嵌入式系統應用程序開始時,很有可能在
    發表于 12-21 17:58

    MicroPython嵌入式開發的優缺點

    之處在于它們使開發團隊的每個成員都可以成為程序員!MicroPython 提供了一系列庫,可以控制低級微控制器功能,從而消除復雜性。例如,硬
    發表于 10-24 08:00

    使用ARM Cortex和STM32的嵌入式系統微控制器

    背景知識視頻教程使用ARM Cortex和STM32的嵌入式系統的基礎掌握微控制器:定時,PWM,CAN,RTC,低功耗STM32Fx微控制器自定義引導
    發表于 08-03 06:47

    嵌入式平臺上板載的微控制器是什么

    1 填空題嵌入式競賽平臺上板載的微控制器是: 3 級流水線,具有 128 Kbytes的Flash存儲空間。(請在第一、二空格處填寫10進制數值)解析:STM32G431RBT6采用采用
    發表于 11-08 06:09

    基于OMAP平臺嵌入式運動控制器設計資料分享

    PC獨立運行等優勢,得到了高速發展與廣泛應用。本文主要研究基于OMAP平臺嵌入式運動控制器,為通用嵌入式運動控制器
    發表于 12-24 06:52

    嵌入式編程和微控制器應用

    歡迎進入嵌入式編程和微控制器應用的世界!使用日益流行且價格適宜的AtmelAVR嵌入式控制器作為學習平臺。本書是目前可以獲得的最佳書籍之一。
    發表于 09-20 07:52

    時間觸發嵌入式系統設計模式(使用8051微控制器開發可靠應用

    時間觸發嵌入式系統設計模式:使用8051微控制器開發可靠應用主要關注使用軟件模式迅速地開發時間觸發嵌入式系統的軟件,涉及的系統全部基于805
    發表于 10-28 23:20 ?691次下載
    時間觸發<b class='flag-5'>嵌入式</b>系統設計模式(使用8051<b class='flag-5'>微控制器</b><b class='flag-5'>開發</b>可靠應用

    基于M CORE微控制器嵌入式系統

    基于M CORE微控制器嵌入式系統從應用的角度出發,全面介紹了構成嵌人系統的微控制器的結構和常用支撐硬件的原理以及設計開發方法。本書共
    發表于 10-09 16:35 ?36次下載
    基于M CORE<b class='flag-5'>微控制器</b>的<b class='flag-5'>嵌入式</b>系統

    高帶寬嵌入式應用中SoC微控制器的新型總線開發

    高帶寬嵌入式應用中SoC微控制器的新型總線開發 傳統SoC總線架構已不能滿足新的聯網嵌入式設計對高帶寬數據流進行實時控制的需求, NetS
    發表于 03-03 16:16 ?813次閱讀
    高帶寬<b class='flag-5'>嵌入式</b>應用中SoC<b class='flag-5'>微控制器</b>的新型總線<b class='flag-5'>開發</b>

    基于ARM核的系列微控制器嵌入式開發工具MDK

    Keil公司開發的ARM開發工具MDK(MicrocontrollerDevelopmentKit),是用來開發基于ARM核的系列微控制器嵌入式
    發表于 06-10 08:00 ?3次下載

    嵌入式微控制器技術實驗任務書(附程序和仿真圖)總結

    嵌入式微控制器技術實驗任務書(附程序和仿真圖)總結(嵌入式開發轉內核開發)-該文檔為嵌入式微控制器技術實驗任務書(附
    發表于 07-30 14:02 ?3次下載
    <b class='flag-5'>嵌入式微控制器</b>技術實驗任務書(附<b class='flag-5'>程序</b>和仿真圖)總結

    嵌入式微控制器技術實驗任務書(附程序和仿真圖)

    嵌入式微控制器技術實驗任務書(附程序和仿真圖)(嵌入式開發需要用什么語言)-該文檔為嵌入式微控制器技術實驗任務書(附程序和仿真圖)講解文檔,
    發表于 07-30 15:16 ?7次下載
    <b class='flag-5'>嵌入式微控制器</b>技術實驗任務書(附<b class='flag-5'>程序</b>和仿真圖)

    嵌入式ARM開發教程之ARM9微控制器LPC3180的軟硬件平臺的設計

    嵌入式ARM開發教程之ARM9微控制器LPC3180的軟硬件平臺的設計(嵌入式開發硬件開店)-該文檔為
    發表于 08-04 11:28 ?11次下載
    <b class='flag-5'>嵌入式</b>ARM<b class='flag-5'>開發</b>教程之ARM9<b class='flag-5'>微控制器</b>LPC3180的軟硬件<b class='flag-5'>平臺</b>的設計

    MicroPython嵌入式開發中的興起

    MicroPython嵌入式開發中的興起
    的頭像 發表于 01-04 11:17 ?2192次閱讀

    基于簡化Cortex-M核微控制器嵌入式軟件的開發步驟

    電子發燒友網站提供《基于簡化Cortex-M核微控制器嵌入式軟件的開發步驟.pdf》資料免費下載
    發表于 10-24 09:02 ?0次下載
    基于簡化Cortex-M核<b class='flag-5'>微控制器</b><b class='flag-5'>嵌入式</b>軟件的<b class='flag-5'>開發</b>步驟