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 愉快,有任何的问题能够和我交流,或者你们相互请教,有错误或者其余请告知,谢谢!