91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

當(dāng)然,這里是C相對C++而言。其實,匯編相對C而言,具有更小代碼量和更快的運行速度??梢詤⒖次恼拢?strong>用 匯編 和 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

在本文默認大家掌握了用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)注

    183

    文章

    7643

    瀏覽量

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

    關(guān)注

    22

    文章

    2123

    瀏覽量

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

    關(guān)注

    96

    文章

    2953

    瀏覽量

    70274

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    keil實現(xiàn)cc++混合編程

    起因項目中使用到一個開源的模擬IIC的庫,封裝的比較好,但是是使用c++寫的。于是將其移植到自己的項目中,主要有以下三步操作: 在工程選項中 C/C++中去掉勾選 C99 Mode
    發(fā)表于 01-26 08:58

    CC++之間的聯(lián)系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++編譯器下編譯通過。 2、底層控制:
    發(fā)表于 12-11 06:51

    C語言和C++之間的區(qū)別是什么

    C++的標(biāo)準(zhǔn)庫那樣集成度高和功能齊全。 6、編譯器與語言特性: C++編譯器通常比C語言編譯器更加復(fù)雜,因為它需要處理更多的語言特性,比如模板元編程、命名空間、引用等。 C++
    發(fā)表于 12-11 06:23

    C++程序異常的處理機制

    1、什么是異常處理? 有經(jīng)驗的朋友應(yīng)該知道,在正常的CC++編程過程中難免會碰到程序不按照原本設(shè)計運行的情況。 最常見的有除法分母為零,數(shù)組越界,內(nèi)存分配失效、打開相應(yīng)文件失敗等等。 一個
    發(fā)表于 12-02 07:12

    第4章 C語言基礎(chǔ)以及流水燈的實現(xiàn)(4.7 4.8)

    1.1?Keil軟件延時 C語言常用的延時方法,有如圖4-2所示4種。 圖4-2 ?C語言延時方法 這4種延時方法,其中兩種非精確延時,兩種精確一些的延時。for語句和while語句都可以通過改變i
    的頭像 發(fā)表于 11-19 17:20 ?795次閱讀
    第4章 <b class='flag-5'>C</b>語言基礎(chǔ)以及<b class='flag-5'>流水燈</b>的實現(xiàn)(4.7 4.8)

    STM32的時候是直接MDK方便還是在vscodekeil插件方便一些?

    STM32的時候是直接MDK方便還是在vscodekeil插件方便一些
    發(fā)表于 08-12 08:02

    技能+1!如何在樹莓派上使用C++控制GPIO?

    和PiGPIO等庫,C++可用于編程控制樹莓派的GPIO引腳。它提供了更好的性能和控制能力,非常適合對速度和精度要求較高的硬件項目。在樹莓派社區(qū)中,關(guān)于“Python
    的頭像 發(fā)表于 08-06 15:33 ?4128次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    【沁恒CH585開發(fā)板免費試用體驗】GPIO 流水燈

    ; 2) GPIO 端口模式設(shè)置; 3) 初始化IO口; 4) 編寫處理函數(shù); 3.2 流水燈代碼實現(xiàn) 主函數(shù)代碼如下: #include \"CH58x_common.h\"
    發(fā)表于 07-04 22:55

    使用英特爾? NPU 插件C++運行應(yīng)用程序時出現(xiàn)錯誤:“std::Runtime_error at memory location”怎么解決?

    使用OpenVINO?工具套件版本 2024.4.0 構(gòu)建C++應(yīng)用程序 使用英特爾? NPU 插件運行了 C++ 應(yīng)用程序 遇到的錯誤: Microsoft
    發(fā)表于 06-25 08:01

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

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

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

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

    【RA-Eco-RA4M2開發(fā)板評測】點燈實現(xiàn)6種LED花式流水燈操作

    很高興收到瑞薩電子提供的RA4M2開發(fā)板,這次帖子就專門用來說說專業(yè)點燈操作,實現(xiàn)各種花式的流水燈,可以十分方便地控制LED的各種狀態(tài),甚至多個LED組合控制,如跑馬燈等。 打開原理圖,可以看到3個
    發(fā)表于 04-28 21:28

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

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

    零基礎(chǔ)入門:如何在樹莓派上編寫和運行Python程序?

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運行一個簡單的Python程序。什么是Python
    的頭像 發(fā)表于 03-25 09:27 ?2012次閱讀
    零基礎(chǔ)入門:如何在樹莓派上<b class='flag-5'>編寫</b>和運行Python<b class='flag-5'>程序</b>?

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

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