Keil5更新以後,開始支持ARM V6編譯器,新版本的編譯器對C++有了更多的支持,在編譯方面也作了不少的改善,具體的沒有詳細瞭解,本文只是對STM32 開發下,使用V6版本的編譯器進行STM32的C++開發做一個記錄,方便和你們交流和參考。至於說爲何STM32要C++開發,這個沒有解釋,只是我的以爲C++比C有更多的方便,使得編程更加的容易,C++有更多的生態....express
開始上教程:Keil5的安裝和破解以及STM32 pack庫的安裝不在本文範圍以內,須要的話請本身百度,網上以及有了不少的教程。編程
筆者打開之前的STM32 工程,想本身經過更改編譯器版本實現,結果發現編譯以後會出現不少的錯誤,故仍是採起Keil5的創建工程方式來創建新的STM32工程。測試
項目概覽this
第一步:創建Keil5工程-》配置STM32類型。spa
第二步:STM32工程文件的配置,CMSIS須要勾選CORE,而後在Device下選中STM32 的啓動Startup,最後就是選擇須要外設。(勾選過程所有是綠色爲有效,若是出現黃色,多是有相關的依賴性沒有選中)code
第三步:切換到V6編譯器,同時對C/C++進行配置blog
注意:正常狀況下按照上述步驟,不須要進行額外編譯預處理的宏定義,好比定義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 愉快,有任何的問題能夠和我交流,或者你們相互請教,有錯誤或者其餘請告知,謝謝!