在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

簡述關于Keil、STM32 用C++編寫流水燈程序

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

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

1為什么很少用C++開發單片機

不知道大家對面向過程面向對象的理解有多少?

C語言面向過程的語言,C++是面向對象的編程語言。結合本文來說,面向過程相比面向對象的編程,代碼量更小,運行效率更高。

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

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

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

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

2準備工作

在Keil MDK開發環境下,用C語言開發STM32比較常見了,什么開發環境安裝、創建工程等這些步驟,本文不講述

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

沒學過C++也沒關系,只要懂C語言,在網上現學C++基礎知識,難度都不大。

3使用說明

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

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

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

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

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

ST的開發庫都已經做了支持,你會看到這么一段代碼:

#ifdef __cplusplus extern "C" {#endif

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

什么意思呢?

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

4定義LED

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

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

首先,定義一個LED類:

class LED_Class{}

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

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

再次就是用到的函數:初始化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;
      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流水燈實現(main函數)

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

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

然后,如果有開發板,直接下載即可運行LED閃爍的現象。

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

編輯:jq

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

    關注

    180

    文章

    7630

    瀏覽量

    140680
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74858
  • 源代碼
    +關注

    關注

    96

    文章

    2952

    瀏覽量

    68023

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

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    主流的 MCU 開發語言為什么是 C 而不是 C++

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

    使用C++中的CyAPI編寫的應用程序上遇到了問題,求解決

    我在使用 C++ 中的 CyAPI 編寫的應用程序上遇到了問題。 我將 XferData() 方法與其他所有端點類型一起使用,沒有遇到任何問題。 但是,將其與 Endpoint0 一起使用會引發
    發表于 05-13 06:11

    如何在 樹莓派 上編寫和運行 C 語言程序

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

    cubemx生成HAL庫+FreeRTOS,當編寫程序時卻代碼無法自動提示怎么解決?

    各位佬,請問一下,我的是cubemx生成HAL庫+FreeRTOS,編譯時并沒有錯誤,但當我編寫程序時卻代碼無法自動提示(我設置好了),并且連uint8_t這種變量也不會變成藍色,當我查看工程文件
    發表于 03-12 08:21

    Spire.XLS for C++組件說明

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

    【正點原子STM32H7R3開發套件試用體驗】流水燈

    工程,之后使用 Keil MDK IDE 編譯代碼,實現流水燈的項目流程。從配置過程中發現,系統核心具有極高的運行速率,STM32H7系列具有32位Arm Cortex?-M7內核,運行頻率高達 600 MHz,因此可以更快速地
    發表于 12-28 18:51

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

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

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

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

    基于51單片機的跑馬燈/流水燈系統

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

    使用OpenVINO GenAI API在C++中構建AI應用程序

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

    keil可以讀出單片機的程序

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

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

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

    怎樣將keil中的程序導出

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

    keil實用技巧

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

    keil5怎么往stm32里燒錄程序

    相關設置。 編寫代碼 在Keil5中編寫您的STM32程序。您可以使用C
    的頭像 發表于 08-22 09:31 ?4758次閱讀
    主站蜘蛛池模板: 在线观看亚洲成人 | 色婷婷六月丁香在线观看 | free欧美性 | 色一欲一性一乱一区二区三区 | 成人在色线视频在线观看免费大全 | 狠狠色狠狠色综合久久一 | 97爱爱爱| 日韩在线一区二区 | 欧美一级特黄aaaaaa在线看首页 | 成人在线观看网站 | 午夜影院性 | 视频在线观看免费 | 日本人爽p大片免费看 | 婷婷月 | 五月情视频在线观看 | 午夜插 | se94se最新网站 | 一区三区三区不卡 | 色综合婷婷| 天天爽夜夜爽夜夜爽精品视频 | 亚洲1314 | 色婷婷社区 | 狠狠操狠狠操 | 国产叼嘿网站免费观看不用充会员 | av大片| 不卡无毒免费毛片视频观看 | 亚洲视频一二三 | 五月婷六月 | 韩国电影天堂网 | 四虎影视大全免费入口 | 色停停| 天天干天天干天天天天天天爽 | 亚洲综合涩 | 国模视频在线 | 国产精品夜色7777青苹果 | 蜜色网 | 黄色小视频免费看 | 男人的天堂欧美 | 干成人网| 色婷婷色综合激情国产日韩 | 五月婷婷激情网 |