99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-04-22 10:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

C語(yǔ)言面向過(guò)程的語(yǔ)言,C++是面向?qū)ο蟮木幊陶Z(yǔ)言。結(jié)合本文來(lái)說(shuō),面向過(guò)程相比面向?qū)ο蟮木幊?,代碼量更小,運(yùn)行效率更高。

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

當(dāng)然,這里是C相對(duì)C++而言。其實(shí),匯編相對(duì)C而言,具有更小代碼量和更快的運(yùn)行速度??梢詤⒖次恼拢?strong>用 匯編 和 C語(yǔ)言 寫(xiě)流水燈程序有什么不一樣?

因?yàn)閱纹瑱C(jī)的RAM和Flash資源相比較小,運(yùn)行速度也相對(duì)較低,所以,你會(huì)發(fā)現(xiàn):很少有人在單片機(jī)上面用C++開(kāi)發(fā)項(xiàng)目。

其實(shí),隨著單片機(jī)的存儲(chǔ)資源以及運(yùn)行速度的增加,目前有些工程師開(kāi)始用C++開(kāi)發(fā)單片機(jī)項(xiàng)目了。

2準(zhǔn)備工作

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

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

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

3使用說(shuō)明

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

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

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

使用V5和V6,工程配置的選項(xiàng)有些差異:

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

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

#ifdef __cplusplus extern "C" {#endif

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

什么意思呢?

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

4定義LED

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

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

首先,定義一個(gè)LED類:

class LED_Class{}

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

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

再次就是用到的函數(shù):初始化GPIO、打開(kāi)、關(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);  }};
這個(gè)代碼是不是很簡(jiǎn)單,即使你不會(huì)C++,只要懂C語(yǔ)言,相信都能看懂。

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

用C++的思路和C語(yǔ)言類似,先初始化,然后再實(shí)現(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);  }}

編譯出來(lái)的代碼量相對(duì)更大:

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

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

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

編輯:jq

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

    關(guān)注

    180

    文章

    7632

    瀏覽量

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

    關(guān)注

    22

    文章

    2119

    瀏覽量

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

    關(guān)注

    96

    文章

    2953

    瀏覽量

    68414

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 C 而不是 C++?

    在單片機(jī)的地界兒里,C語(yǔ)言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說(shuō)內(nèi)存這道坎兒。您當(dāng)stm32f4的
    的頭像 發(fā)表于 05-21 10:33 ?450次閱讀
    主流的 MCU 開(kāi)發(fā)語(yǔ)言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    使用C++中的CyAPI編寫(xiě)的應(yīng)用程序上遇到了問(wèn)題,求解決

    我在使用 C++ 中的 CyAPI 編寫(xiě)的應(yīng)用程序上遇到了問(wèn)題。 我將 XferData() 方法與其他所有端點(diǎn)類型一起使用,沒(méi)有遇到任何問(wèn)題。 但是,將其與 Endpoint0 一起使用會(huì)引發(fā)
    發(fā)表于 05-13 06:11

    如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言程序?

    在本教程中,我將討論C編程語(yǔ)言是什么,C編程的用途,以及如何在RaspberryPi上編寫(xiě)和運(yùn)行C程序。本文的目的是為您介紹在Raspber
    的頭像 發(fā)表于 03-25 09:28 ?574次閱讀
    如何在 樹(shù)莓派 上<b class='flag-5'>編寫(xiě)</b>和運(yùn)行 <b class='flag-5'>C</b> 語(yǔ)言<b class='flag-5'>程序</b>?

    cubemx生成HAL庫(kù)+FreeRTOS,當(dāng)編寫(xiě)程序時(shí)卻代碼無(wú)法自動(dòng)提示怎么解決?

    各位佬,請(qǐng)問(wèn)一下,我的是cubemx生成HAL庫(kù)+FreeRTOS,編譯時(shí)并沒(méi)有錯(cuò)誤,但當(dāng)我編寫(xiě)程序時(shí)卻代碼無(wú)法自動(dòng)提示(我設(shè)置好了),并且連uint8_t這種變量也不會(huì)變成藍(lán)色,當(dāng)我查看工程文件
    發(fā)表于 03-12 08:21

    Spire.XLS for C++組件說(shuō)明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序中。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?633次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說(shuō)明

    【正點(diǎn)原子STM32H7R3開(kāi)發(fā)套件試用體驗(yàn)】流水燈

    工程,之后使用 Keil MDK IDE 編譯代碼,實(shí)現(xiàn)流水燈的項(xiàng)目流程。從配置過(guò)程中發(fā)現(xiàn),系統(tǒng)核心具有極高的運(yùn)行速率,STM32H7系列具有32位Arm Cortex?-M7內(nèi)核,運(yùn)行頻率高達(dá) 600 MHz,因此可以更快速地
    發(fā)表于 12-28 18:51

    低成本單片機(jī)方案——觸摸流水燈開(kāi)關(guān)控制

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

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

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

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

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

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

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

    keil可以讀出單片機(jī)的程序

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

    keil軟件怎么運(yùn)行寫(xiě)好的程序

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

    怎樣將keil中的程序導(dǎo)出

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

    keil實(shí)用技巧

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

    keil5怎么往stm32里燒錄程序

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