【套路】用一個小例程來談談mbed的優點

2021-02-25 開源Block

有句話說的好:

so,要想脫單,沒點套路是不行的。


沒錯,就是這個撩妹神器啦光立方

作為漢子的你一定要學會這招,俘獲妹子的芳心;作為妹子的你更要學會這招,不要輕易被漢子的小把戲給迷倒嘍。

接下來呢,我用mbed編寫一個簡單易上手小程序點亮燈,在之前的學習筆記中我有說過如何創建一個數字輸入/輸出功能工程(請複製以下連結粘貼至手機瀏覽器查看http://www.all4lib.com/topic/2998?ifpost=0)。從數字輸入輸出的測試例程可以看到相比於庫函數,mbed的庫更加簡潔和好用,用戶不需要關心底層的代碼是怎麼實現的,操作了哪些寄存器,只需要關注應用本身,大大提高了開發速度,所以後面所有的程序我們都會用官方提供的庫來進行開發,這就是mbed的第一個優點。


來看看官方提供的數字輸入輸出部分的庫函數:


mbed中有三個類和數字輸入輸出相關,分別是DigitalIn(數字管腳輸入類)、DigitalOut(數字管腳輸出類)、DigitalInOut(數字管腳輸入輸出類),學過STM32庫函數的話應該明白這三個類提供的方法相當於GPIO庫函數的功能,但是更簡潔。

看完這些類和方法,試著點亮STM32F030R8開發板的一個LED燈。

之前我也有做過從mbed官網將在線工程導出為keil 4工程(http://www.all4lib.com/topic/2969?ifpost=0),就得到了一個模板,這樣就不用自己建立工程,做各種複雜的工程配置,是不是非常的簡單?

打開一個空的工程,main.cpp內容很簡單,如下:

#include "mbed.h"int main(){}

注意不同的mbed.h文件所包含的晶片型號是不一樣的,具體取決於你從在線工程導出時選擇的開發板型號。

現在將main.cpp改成下面這樣:

#include "mbed.h"DigitalOut myled(LED1);構造DigitalOut類的一個對象myled,並初始化int main() {    while(1) {        myled = 1;        wait(0.2);        myled = 0;        wait(1.0);    }}

下載程序到開發板,可以看到LED1每0.2s閃爍一次。現在我們來分析一下代碼。程序首先構造DigitalOut類的一個對象myled,初始化參數為LED1,我們從mbed API看到,構造函數形式為:DititalOut(PinName Pin);也就意味著LED1是某個引腳名,我們打開PinNames.h文件可以看到下面的定義:


這裡定義了這塊開發板所用晶片的所有用戶可以使用的引腳,還定義了mbed接口引腳(A0~D15),還定義了功能引腳(LED1~PWM_OUT)。LED1連接的引腳是MCU的PA_5,LED2~LED4引腳也是PA_5。事實上,初始化參數也可以是LED2~LED5,當然也可以是引腳名稱。那為什麼要把4個LED定義到同一個引腳呢?因為這是我們從mbed官網導出的工程,它是以NUCLEO板為原型定義的,而NUCLEO板上只有一個用戶LED(通常是LED1)。

數字輸出就講到這裡,接下來看一下數字輸入。

數字輸入一般用於讀取外部數字信息,比如按鍵、開關的狀態。

下面寫一個簡單的程序,功能是當按鍵按下的時候,LED1狀態改變,代碼如下:

#include "mbed.h"DigitalOut myled1(LED1);DigitalIn button(USER_BUTTON,PullDown);        int main(){    myled1 = 1;    while(1)    {        if(button == 0)                           myled1 = !myled1;    }}

開發板上的按鍵接在PC_13引腳,在PinNames.h中有定義,電路圖中,按鍵連接了外部上拉電阻,按下時會檢測到低電平。如果用戶需要外接按鍵,可以把Pin Mode改為PullUp(內部上拉)、PullDown(內部下拉)、PullNone(懸空)、OpenDrain(開漏)四種模式,這樣在外接按鍵時就可以簡化電路設計。

實際上當我們下載程序後發現,有時候按下一次,LED1的狀態改變多次,有時沒有改變,這主要是由於按鍵抖動造成的,我們可以考慮加上按鍵消抖,效果會好很多。下面是按鍵消抖的代碼,在檢測時加了10ms的延時。

int main(){    myled1 = 1;    while(1)    {        if(button == 0)        {          wait_ms(10);            if(button == 0)              myled1 = !myled1;        }    }}

從上面看是不是覺的很簡單啊,用mbed編程的好處:

首先,化繁瑣為簡單,這對於當前很多不熟悉智能硬體的人來說,幫助是十分巨大的。

其次,mbed把很多與硬體相關的程序使用中間件進行封裝,這使得操作不用特意關心底層驅動,開發者只要會調用函數就可以了。

最後,它還可以支持離線和在線開發環境,可以離線開發也可以在線編輯。使得寫程序變的簡單。

                            去思享國官網閱讀更多好文章吧!

相關焦點

  • 【Nucleo-L432評測】+ 體驗ARM-mbed
    mbed是一個面向ARM處理器的原型開發平臺,它具體包括免費的軟體庫(SDK),硬體參考設計(HDK)和在線工具(Web)三部分內容,各個部分的具體介紹如下:SDK:mbed設計了一個硬體抽象層,從而屏蔽了不同mcu廠商提供了微處理之間的差異,對於用戶來說,他只需要和這個硬體抽象層打交道即可,也就是說,用戶基於mbed開發的應用可以很方便地更換使用不同廠商的arm
  • NUCLEO-L452RE快速入門之mbed的使用
    1.mbed的下載(連結可在「閱讀全文」的文檔裡找到),其實使用usb連接Nucleo板子到電腦,電腦會識別出一個存儲盤,打開新識別的存儲盤,裡面就存儲有一個mbed的開發連結。我們可以看一下它的目錄文件結構,一個是你自己建立的工程文件夾,一個是mbed文件夾,這個mbed提供了相當數量的方法給我們使用,只要點開它就能看到這些方法的使用形式。不過唯一的缺點就是,這些方法的具體實現代碼我們看不到,也不能更改和複製。
  • 完美一躍、兼容ARM mbed OS——NuMaker-PFM-M453評測
    NuMaker Platform是新唐針對物聯網應用所開發的平臺,支持 ARM mbed OS 5,適合做為物聯網各式應用開發,並且支持通用Arduino接口,讓用戶快速加入感測與無線模塊進行原型設備設計。
  • 被ARM寄予厚望的mbed,現在怎麼樣了?
    實際上,ARM的物聯網野心早已不是什麼秘密,從2014年ARM推出mbed平臺開始,這家IP公司就正式宣布進軍物聯網市場,他們希望基於ARM mbed平臺來連接硬體設備商、軟體服務商和雲服務商,而不是和過去一樣純粹的向晶片商提供IP,這一度引起了不少國內外業者的熱議,不過唱衰的聲音來得更多。
  • mbed入門學習筆記(24篇全)
    訪問 mbed 中文官網主頁 https://www.mbed.com/zh-cn/about-mbed/,可以看到簡介,ARM 為推廣 IoT 應用專門成立了一個新部門 mbed。簡單來說, mbed是專為物聯網(IoT)設備開發的一個軟體開發平臺。使用 mbed 平臺開發的直觀感受就是: 簡單易用, 不必關心硬體底層操作, 可選的硬體平臺很多。
  • 這個mbed OS,會成為物聯網的Android嗎?
    那不過是又一個新標準而已。也許從系統入手會是個好選擇。這就是為何當我看到 ARM 發布的物聯網使用的作業系統 mbed OS 時顯得有些激動:屬於物聯網的 Android 來了?ARM 是一家隱於幕後的公司,儘管全球95%的智慧型手機裡都運行著使用 ARM 架構的處理器,但大家對它不夠熟悉,我們更熟悉的是高通、蘋果、三星……其實它們的處理器全部採用了來自 ARM 的架構。
  • 在開發者眼中,ARM mbed平臺的優劣各是什麼?
    ARM高調發布了它的mbed OS開發平臺,這在智能硬體圈裡引起了一些轟動。好多人都知道機智雲在國內最早做為智能硬體提供技術服務的雲平臺,於是有不少朋友問我,mbed到底如何?是否真如宣傳那麼給力?首先,相較於過去的開發工具和作業系統,mbed確實提供了一個相對更加系統和更加全面的智能硬體開發環境。
  • Silicon Labs的Gecko技術使ARM mbed OS更加節能
    (芯科科技有限公司,NASDAQ:SLAB),今日宣布基於ARM Cortex-M處理器的節能型EFM32 Gecko MCU產品組合現在已經廣泛支持ARM mbed OS。Silicon Labs的Giant Gecko、Happy Gecko、Leopard Gecko和Wonder Gecko MCU運行mbed OS以及mbed電源管理應用編程接口(API),為嵌入式開發人員構建電池供電、基於ARM的IoT連接設備提供最佳的能效、易用性和安全技術。
  • 陰陽師:為了玩家的利益,我必須談談煉獄茨木童子的優點和缺點
    導讀:陰陽師:為了玩家的利益,我必須談談煉獄茨木童子的優點和缺點文|老司機說遊戲各位看官大家好,歡迎閱讀由老司機說遊戲提供的資訊。今天我們的主題是:陰陽師:為了玩家的利益,我必須談談煉獄茨木童子的優點和缺點!接下來我們一起進入正題。
  • ARM公布為"物聯網"設計的嵌入式mbed OS系統軟體平臺
    架構處理器,ARM又公布了專為廉價低功耗「物聯網」設計的新版軟體及系統平臺,以加速物聯網設備的發展及部署。該軟體為基於ARM現有Cortex-M架構設計的mbed平臺,包括免費的嵌入式mbed OS作業系統,以及軟體工具包mbed Device Server,公司稱「能夠以安全的方式為連接和管理設備提供所需的伺服器端技術」,ARM旨在借mbed基礎軟體為物聯網設備打造「磚塊」,物聯網設備供應商能夠專注於為其產品增加更多新功能並從市場脫穎而出。
  • Q編程介紹及例程
    上圖中列出了一個參考例程,Q程序通過WI指令首先等待輸入口3接收一個下降沿觸發信號,如果條件滿足,電機將按照20 轉/秒的轉速,轉動4圈;如果條件不滿足,程序將一直停留在WI指令處等待輸入口3接收正確的觸發信號為止。點到點絕對運動(Feed to Position)
  • 玩轉ARM、mbed和Arduino平臺的參考設計
    一款兼容Arduino® 和ARM® mbed™ 平臺的擴展板,可用於快速開發產品原型!它究竟是——?
  • Micrium發布利用uCOS-III+uC/TCP-IP連接ARM mbed雲端的教程,手頭有STM32F7探索板的可測試
    用於ST官方的STM32F7探索版例子:https://www.micrium.com/download/stm32f7-discovery-smart-thermostat-mbed-project/ ========================對於這個工程,簡單的說就是在uCOS-III+uC/TCP-IP的基礎上移植mbed
  • S8符文小套路:中婭冷卻縮減80%?偷錢流烏鴉與強攻流千珏
    S8季前賽以來新符文系統已經成為了玩家們津津樂道的話題,在許多玩家的研究下,已經出現了很多騷套路,不僅富有創造力,而且在實戰中效果也是拔群,今天就由小編來分享幾個有趣的套路
  • Logix5000使用ModbusTCP通訊之master(含例程下載)
    Master功能部分可能會佔用PLC內200-230K的存儲空間,Slave功能部分可能會佔用PLC的280-300K空間。此示例代碼可能不適用於所有應用程式,示例代碼會消耗的控制器內存、資源、CPU帶寬和控制器緩衝區,這可能會影響用戶程序的其餘部分。確保在使用Modbus代碼之前考慮了使用Modbus代碼的影響。
  • GPU編程–CUDA環境配置與簡單例程
    最近需要使用回溯法來完成算法設計的作業,在經歷了單線程編程和多線程編程後,發覺效果並不是很理想,於是考慮採用GPU編程,計劃通過GPU寫一個簡單的DFS算法。本文的目的是快速上手使用GPU和進行簡單的編程。首先推薦一本書,在這本書的幫助,我迅速學會了基本的GPU編程。
  • 不知道什麼組別的工程師講解Q系列編程及例程
    上圖中列出了一個參考例程,Q程序通過WI指令首先等待輸入口3接收一個下降沿觸發信號,如果條件滿足,電機將按照20 轉/秒的轉速,轉動4圈;如果條件不滿足,程序將一直停留在WI指令處等待輸入口3接收正確的觸發信號為止。點到點絕對運動(Feed to Position)
  • 第三課 halcon軟體的基礎知識(2)圖像變量Object:XLD及應用例程
    此外對Image、region和XLD的使用,做一個簡單的實際應用的例程,包括缺陷檢測和測量。我們了解亞像素之前,先來了解下像素的概念。像素是圖像中對應整數行、列的像素點,實際上是有固定大小的相機感光單元,形狀是矩形。像素通過標定可以得到其代表的實際的大小,比如一個像素代表實際物體尺寸是1mm*1mm。