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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

簡述關(guān)于Keil、STM32 用C++編寫流水燈程序

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2021-04-22 10:23 ? 次閱讀

通常來說,在單片機編程,要么匯編,要么C語言,而用C++進行開發(fā)的很少,那么究竟能不能用C++開發(fā)單片機呢? 答案是肯定可以的,下面講講基于Keil、STM32,用C++編寫流水燈程序的一些內(nèi)容。

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

不知道大家對面向過程面向?qū)ο?/strong>的理解有多少?

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

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

當(dāng)然,這里是C相對C++而言。其實,匯編相對C而言,具有更小代碼量和更快的運行速度。可以參看文章:用 匯編 和 C語言 寫流水燈程序有什么不一樣?

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

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

2準(zhǔn)備工作

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

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

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

3使用說明

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

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

b4d1856e-a2d2-11eb-aece-12bb97331649.png

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

b5064cb8-a2d2-11eb-aece-12bb97331649.png

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

#ifdef __cplusplus extern "C" {#endif

//這里C源代碼
#ifdef __cplusplus}#endif

什么意思呢?

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

4定義LED

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

本文講述一個很基礎(chǔ)的例子"LED燈",比如創(chuàng)建一個main.cpp源代碼文件。

首先,定義一個LED類:

class LED_Class{}

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

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

再次就是用到的函數(shù):初始化GPIO、打開、關(guān)閉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;
      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);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph, ENABLE);  }
  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);  }}

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

b5349370-a2d2-11eb-aece-12bb97331649.png

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

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

編輯:jq

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

    關(guān)注

    180

    文章

    7581

    瀏覽量

    135590
  • C++
    C++
    +關(guān)注

    關(guān)注

    21

    文章

    2090

    瀏覽量

    73406
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2943

    瀏覽量

    66570

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

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    keil可以讀出單片機的程序

    Keil是一款廣泛應(yīng)用于單片機程序開發(fā)的軟件,它提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案。然而,關(guān)于
    的頭像 發(fā)表于 09-02 10:32 ?471次閱讀

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

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

    keil5怎么往stm32里燒錄程序

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

    單片機POV LED流水燈制作

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

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

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

    51單片機流水燈制作

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

    利用SCR步進指令實現(xiàn)流水燈循環(huán)點亮

    在以往介紹西門子smart文章中,提到過流水燈的寫法,有用循環(huán)位移字[ROL(R)_B]節(jié)來實現(xiàn),有利用定時器(TON)來實現(xiàn)。今天我們利用SCR步進指令來實現(xiàn)流水燈循環(huán)點亮,在作這個實驗前提必須滿足如下幾個軟硬件條件:
    的頭像 發(fā)表于 12-04 09:15 ?1828次閱讀
    利用SCR步進指令實現(xiàn)<b class='flag-5'>流水燈</b>循環(huán)點亮

    codeblocks怎么編寫程序

    Code::Blocks是一款免費、開源的集成開發(fā)環(huán)境(IDE),它提供了一個方便的平臺來編寫、調(diào)試和運行C、C++以及其他編程語言的程序。在本篇文章中,我們將詳細(xì)討論如何使用Code
    的頭像 發(fā)表于 11-26 10:28 ?1268次閱讀

    c語言編寫的源程序可以直接運行嗎

    的形式存儲,通常以.c或者.cpp為文件擴展名。 在編寫C語言程序時,首先需要選擇一個合適的集成開發(fā)環(huán)境(IDE)或者文本編輯器,例如Visual Studio、Code::Block
    的頭像 發(fā)表于 11-26 09:03 ?6400次閱讀

    分享花樣流水燈程序

    電子發(fā)燒友網(wǎng)站提供《分享花樣流水燈程序.doc》資料免費下載
    發(fā)表于 11-18 09:59 ?3次下載
    分享花樣<b class='flag-5'>流水燈</b>源<b class='flag-5'>程序</b>

    基于STM32F103系統(tǒng)的FreeRTOS程序移植

    程序中,移植了正點原子的基于STM32的FreeRTOS程序,編寫了自己的內(nèi)存管理程序malloc.c
    的頭像 發(fā)表于 11-10 11:03 ?2227次閱讀
    基于<b class='flag-5'>STM32</b>F103系統(tǒng)的FreeRTOS<b class='flag-5'>程序</b>移植

    基于51單片機無線遙控流水燈電路圖及程序

    本資源內(nèi)容概要: 這是基于51單片機的無線遙控流水燈設(shè)計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源代碼(keil軟件打開) 。 本資源適合人群: 單片機愛
    發(fā)表于 11-06 18:15 ?1次下載

    基于單片機的流水燈電路設(shè)計

    前面一課掌握了嵌入式程序源代碼級調(diào)試,為復(fù)雜單片機實驗程序的調(diào)試做好了準(zhǔn)備工作。本次實驗完成流水燈電路模型設(shè)計和編程,在實驗過程中,學(xué)習(xí)流水燈電路設(shè)計、
    的頭像 發(fā)表于 10-31 14:56 ?3591次閱讀
    基于單片機的<b class='flag-5'>流水燈</b>電路設(shè)計

    怎么設(shè)置讓流水燈加速?

    流水燈需要可以加速四段
    發(fā)表于 10-30 06:05