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

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

3天內(nèi)不再提示

如何基于Keil、STM32用C++編寫流水燈程序?

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-04-30 16:10 ? 次閱讀

通常來說,在單片機編程,要么匯編,要么C語言,而用C++進行開發(fā)的很少,那么究竟能不能用C++開發(fā)單片機呢?

答案肯定是可以的,下面講講基于Keil、STM32,用C++編寫流水燈程序的一些內(nèi)容。

1

為什么很少用C++開發(fā)單片機

不知道大家對面向過程和面向?qū)ο蟮睦斫庥卸嗌伲?/p>

C語言是面向過程的語言,C++是面向?qū)ο蟮木幊陶Z言。結(jié)合本文來說,面向過程相比面向?qū)ο蟮木幊蹋纱a量(bin文件)更小,運行效率更高。

所以,C語言相比C++具有更小代碼量(bin文件)、更快的運行速度。

當然,這里是C相對C++而言。其實,匯編相對C而言,具有更小代碼量和更快的運行速度??梢詤⒖次恼拢河?匯編 和 C語言 寫流水燈程序有什么不一樣?

因為單片機的RAM和Flash資源相比較小,運行速度也相對較低,所以,你會發(fā)現(xiàn):很少有人在單片機上面用C++開發(fā)項目。

其實,隨著單片機的存儲資源以及運行速度的增加,目前有些工程師開始用C++開發(fā)單片機項目了。

2

準備工作

在Keil MDK開發(fā)環(huán)境下,用C語言開發(fā)STM32比較常見了,什么開發(fā)環(huán)境安裝、創(chuàng)建工程等這些步驟,本文不講述,請參看我文章:

Keil系列教程01_Keil介紹、下載、安裝與注冊Keil系列教程02_新建基礎軟件工程

這是Keil的基礎教程,有不懂的同學,可以在我公眾號后臺回復關鍵字“Keil系列教程”閱讀Keil更多的使用方法。

然后就是需要懂一些C++的基礎語法,本文講述的內(nèi)容比較基礎,用到C++很基礎的知識。比如:類、對象這些基礎內(nèi)容。

沒學過C++也沒關系,只要懂C語言,在網(wǎng)上現(xiàn)學C++基礎知識,難度都不大。

3

使用說明

在Keil MDK環(huán)境下,使用的是ARM編譯器(Arm Compiler),很多網(wǎng)上教程使用V6編譯,其實V5和V6版本都是支持C++編程語言的。

在工程中添加C++源代碼(比如:main.cpp)

使用V5和V6,工程配置的選項有些差異

ST的開發(fā)庫都已經(jīng)做了支持,你會看到這么一段代碼:

#ifdef __cplusplus extern “C” {#endif

//這里C源代碼

#ifdef __cplusplus}#endif

什么意思呢?

這是一段預處理,從預處理代碼可以看得出來,大概意思就是:支持C和C++混合編程。

4

定義LED

在本文默認大家掌握了用C語言開發(fā)STM32流水燈的知識,直接描述C++代碼內(nèi)容。

本文講述一個很基礎的例子“LED點燈”,用C++編程實現(xiàn)的方法很多,這里將其中一個基礎的方法。

首先,創(chuàng)建一個main.cpp源代碼文件,定義一個LED類:

class LED_Class{}

然后定義私有成員(當然,public也可以):

class LED_Class{private: GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;}

再次就是用到的函數(shù):初始化GPIO、打開、關閉LED等。

class LED_Class{private: GPIO_TypeDef *GPIOx; uint16_t GPIO_Pin; uint32_t RCC_APB2Periph;

public: LED_Class(GPIO_TypeDef *GPIOx,uint16_t GPIO_Pin, uint32_t RCC_APB2Periph){ LED_Class::GPIOx = GPIOx; LED_Class::GPIO_Pin = GPIO_Pin; LED_Class::RCC_APB2Periph = RCC_APB2Periph; }

void Init(void){ GPIO_InitTypeDef GPIO_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOx, &GPIO_InitStruct); }

void Open(void){ GPIO_SetBits(GPIOx, GPIO_Pin); }

void Close(void){ GPIO_ResetBits(GPIOx, GPIO_Pin); }};

這個代碼是不是很簡單,即使你不會C++,只要懂C語言,相信都能看懂。

5

流水燈實現(xiàn)(main函數(shù))

用C++的思路和C語言類似,先初始化,然后再實現(xiàn):

int main(void){ LED_Class LED1(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF); LED_Class LED2(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);

LED1.Init(); LED2.Init();

while(1) { LED1.Open(); LED2.Open(); Delay(10);

LED1.Close(); LED2.Close(); Delay(10); }}

還有一種初始化:

int main(void){ LED_Class *LED1 = new LED_Class(GPIOF, GPIO_Pin_7, RCC_APB2Periph_GPIOF); LED_Class *LED2 = new LED_Class(GPIOF, GPIO_Pin_8, RCC_APB2Periph_GPIOF);

LED1-》Init(); LED2-》Init();

while(1) { LED1-》Open(); LED2-》Open(); Delay(50);

LED1-》Close(); LED2-》Close(); Delay(50); }}

編譯出來的代碼量相對更大:

然后,如果有開發(fā)板,直接下載即可運行LED閃爍的現(xiàn)象。

說明:

使用C++寫單片機流水燈程序,實現(xiàn)的方法有很多,比如還有一些更高級的繼承、多態(tài)等用法,也可以引入進來。以上只是提供一種思路,引導初學者學習C++編程。

是不是很簡單,看到這里,你學廢了嗎?

原文標題:基于Keil、STM32,用C++編寫流水燈程序

文章出處:【微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6037

    文章

    44558

    瀏覽量

    635353
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73651

原文標題:基于Keil、STM32,用C++編寫流水燈程序

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    低成本單片機方案——觸摸流水燈開關控制

    方案觸摸流水燈控制方案Thedevelopmentofascheme隨著物聯(lián)網(wǎng)技術的不斷發(fā)展和智能家居的普及,觸摸流水燈控制方案作為一種新型的智能照明控制方式,逐漸成為市場的新寵。PART.1方案
    的頭像 發(fā)表于 12-26 16:37 ?97次閱讀
    低成本單片機方案——觸摸<b class='flag-5'>流水燈</b>開關控制

    【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】MDK+點燈+流水燈

    ” 文件,在 hal_entry 函數(shù)里面編寫我們的代碼。 直接運行,燈會常亮 流水燈實驗,延遲200ms
    發(fā)表于 12-15 15:59

    基于51單片機的跑馬燈/流水燈系統(tǒng)

    具體實現(xiàn)功能(1)9種LED流水燈模式通過按鍵進行切換,數(shù)碼管顯示流水燈模式。(2)通過加減按鍵可以切換每種LED流水燈的速度。仿真演示視頻:設計介紹51單片機簡介51單片是一種低功耗、高性能
    的頭像 發(fā)表于 10-22 14:12 ?230次閱讀
    基于51單片機的跑馬燈/<b class='flag-5'>流水燈</b>系統(tǒng)

    使用OpenVINO GenAI API在C++中構(gòu)建AI應用程序

    許多桌面應用程序是使用 C++ 開發(fā)的,而將生成式AI(GenAI)功能集成到這些應用程序中可能會很具有挑戰(zhàn)性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復雜性。C
    的頭像 發(fā)表于 10-12 09:36 ?385次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C++</b>中構(gòu)建AI應用<b class='flag-5'>程序</b>

    keil可以讀出單片機的程序

    表述存在一定的誤解,因為Keil主要是用于編寫、編譯和調(diào)試單片機程序的工具,而不是直接從單片機中讀取已編程代碼的工具。 一、Keil的主要功能 編程開發(fā) :
    的頭像 發(fā)表于 09-02 10:32 ?964次閱讀

    keil軟件怎么運行寫好的程序

    軟件的安裝包,然后按照安裝向?qū)нM行安裝。安裝完成后,啟動Keil軟件。 創(chuàng)建項目 在Keil軟件中,需要創(chuàng)建一個新的項目來存放編寫程序。點擊“Project”菜單,選擇“New uV
    的頭像 發(fā)表于 09-02 10:29 ?2034次閱讀

    怎樣將keil中的程序導出

    器選項等。 編寫并調(diào)試程序,確保程序能夠正常運行。 2. 編譯項目 在導出程序之前,需要先編譯項目。以下是編譯項目的步驟: 打開Keil M
    的頭像 發(fā)表于 09-02 10:23 ?1645次閱讀

    keil實用技巧

    和測試工作。一、統(tǒng)一編程風格1、插件介紹及下載Astyle全稱ArtisticStyle,是一個免費,快速,小型的自動格式化程序,適用于CC++,C++/CLI,O
    的頭像 發(fā)表于 08-30 13:23 ?863次閱讀
    <b class='flag-5'>keil</b>實用技巧

    keil5怎么往stm32里燒錄程序

    相關設置。 編寫代碼 在Keil5中編寫您的STM32程序。您可以使用C
    的頭像 發(fā)表于 08-22 09:31 ?2643次閱讀

    單片機POV LED流水燈制作

    電子發(fā)燒友網(wǎng)站提供《單片機POV LED流水燈制作.docx》資料免費下載
    發(fā)表于 05-28 14:34 ?3次下載

    keilc++編譯含有rtos模塊時的錯誤問題怎么解決?

    近期看到一個哥們c++寫嵌入式,感覺蠻有趣,如果當初我的程序要是能用類就輕松多了,所以也想嘗試一下。雖然不會c++但是還是多少會用簡單的class,這個
    發(fā)表于 05-09 08:29

    51單片機流水燈制作

    ?流水燈是學習51單片機的一個基本項目,是我們對單片機IO口輸出認識的基本項目。當然學會了花樣流水燈也很好玩。 下面就分享一種51單片機流水燈制作的方法。 一、流水燈原理圖 二、相關知
    的頭像 發(fā)表于 02-26 10:06 ?1630次閱讀
    51單片機<b class='flag-5'>流水燈</b>制作

    USB轉(zhuǎn)TTL線怎么把程序燒寫到stm32f103C8T6中

    USB轉(zhuǎn)TTL線怎么把程序燒寫到stm32f103C8T6中? 將程序燒寫到STM32F103C8T6芯片中需要使用USB轉(zhuǎn)TTL線連接計
    的頭像 發(fā)表于 01-31 15:46 ?7290次閱讀

    基于QT5+OpenCV+OpenVINO C++的應用打包過程

    QT C++寫了一個YOLOv5模型推理演示應用。
    的頭像 發(fā)表于 01-26 10:17 ?1268次閱讀
    基于QT5+OpenCV+OpenVINO <b class='flag-5'>C++</b>的應用打包過程

    C++簡史:C++是如何開始的

    MISRA C++:2023,MISRA? C++ 標準的下一個版本,來了!為了幫助您做好準備,我們介紹了 Perforce 首席技術支持工程師 Frank van den Beuken 博士撰寫
    的頭像 發(fā)表于 01-11 09:00 ?598次閱讀
    <b class='flag-5'>C++</b>簡史:<b class='flag-5'>C++</b>是如何開始的