Keil5 STM32 C++開發 ARM V6編譯器的使用教程


  Keil5更新之后,開始支持ARM V6編譯器,新版本的編譯器對C++有了更多的支持,在編譯方面也做了很多的改善,具體的沒有詳細了解,本文只是對STM32 開發下,使用V6版本的編譯器進行STM32的C++開發作一個記錄,方便和大家交流和參考。至於說為什么STM32要C++開發,這個沒有解釋,只是個人覺得C++比C有更多的方便,使得編程更加的容易,C++有更多的生態....

  開始上教程:Keil5的安裝和破解以及STM32 pack庫的安裝不在本文范圍之內,需要的話請自己百度,網上以及有了很多的教程。

  筆者打開以前的STM32 工程,想自己通過更改編譯器版本實現,結果發現編譯之后會出現很多的錯誤,故還是采取Keil5的建立工程方式來建立新的STM32工程。

  

                          項目概覽

  第一步:建立Keil5工程-》配置STM32類型。

  第二步:STM32工程文件的配置,CMSIS需要勾選CORE,然后在Device下選中STM32 的啟動Startup,最后就是選擇需要外設。(勾選過程全部是綠色為有效,如果出現黃色,可能是有相關的依賴性沒有選中)

  第三步:切換到V6編譯器,同時對C/C++進行配置

注意:正常情況下按照上述步驟,不需要進行額外編譯預處理的宏定義,比如定義STM32的芯片密度類型和外設宏等

  第四步:程序的編寫:建立main入口,可以行建立main.cpp,或者main.c,注意要檢查文件的類型是不是C++文件類型。然后就可以按照C++方式進行STM32開發,把各種操作包裝到C++類里面,進行更方便的開發。

  第五步:注意事項:如果在編譯的過程中,編譯器提示不能識別 class之類關鍵字,則需要檢查相關的類的頭文件的類型是不是C++類型,具體如下:

 

最后,簡單對C++的Vector 和lambda進行了測試,給出簡單的代碼串口打印輸出:

std::string str="Command ends with '$'\n";
                         str+="Baude ratio is :115200\n";
                         str+="Firmware version:1.0\n";
                         str+="======================\n";
    UsartHelper.UsartInit();
    UsartHelper.SerialEvent.AttachHandler(this,&System::SerialHandler);
    UsartHelper.log(str,false);
    
    TickerHelper.TickerInit();
    TickerHelper.SetIntervalms(1500);
    TickerHelper.Elapsed.AttachHandler(this,&System::TickerElapsed);
    
    //TickerHelper.Start();
    
    std::vector<std::string> vec;
    vec.push_back("zhangliang");
    vec.push_back("lijie");

    auto tmpx = vec.at(0);
    UsartHelper.log(tmpx);
    UsartHelper.log(vec.at(1));
    
    auto pfun=[](){UsartHelper.log("this is lambda expression");};
    pfun();

測試結果串口打印出來如下,可以看到都可以很好執行了。

 

 

 在最后,祝大家使用C++開發STM32 愉快,有任何的問題可以和我交流,或者大家相互請教,有錯誤或者其他請告知,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM