你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

让你的 STM32Cube KEILV5 + HAL库工程支持C++开发

[复制链接]
songshiqun2010 发布时间:2019-6-28 14:45
1.转载链接
转载自 http://blog.csdn.net/wmdscjhdpy/article/details/79354513
2.原博文

#前言
最近这段时间在弄一个新的STM32F4的项目,因为工程比较庞大,然后各种类型也比较复杂,在封装整理的时候就非常头疼,很想通过C++的类,继承,多态的方式来让代码变得清晰简单。在网上翻阅了比较多的相关资料,发现很多博客所说的方法要么太复杂,要么不能完美兼容Cube。随着ST对HAL库的不断更新,各类驱动包其实都已经悄悄的在各种头文件上加入了 extern “C” 的宏定义,让C++移植更加方便。我也折腾了一段时间,终于成功的编译成功了一个带有C++特性的工程,故来分享一下自己的经验和一些值得注意的地方。因为我也在探索的过程中,如果大家在尝试的过程中有遇到其他问题的欢迎评论区讨论。

#配置C++工程
##配置Cube
其实在Cube的配置上没有多大改变,只建议尽量不要在生成工程的时候不要选中Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral选项。这个感觉像是cube的一个遗漏的地方,如果在此处勾选了这个选项的时候,有部分新增加的头文件没有extern “C” 的宏定义 会导致混合编译出错。

其他的地方没有什么特别的,直接生成工程即可。
##配置Keil
###工程设置
Keilv5原生是支持C++的编译的,所以在keil里面我们只需要打开工程设置,在C/C++选项里的Misc_Controls里加入–cpp 当然如果原意使用C++11标准的话可以加入 --cpp11 即可.
然后我们还需要确认MicroLib已被禁用。该选项在工程设置中的Target栏的Code Generation里,取消勾选“Use Micro Lib”即可。
###文件属性设置
经过上面的设置之后,我们就可以对cpp类文件使用C++编译器了,可是问题是,Cube给我们生成的都是.c文件,这就导致Keil会把它们当做c文件,使用C编译器编译,当我们在这些cube生成好的文件里面使用C++特性的时候就会报错了。所以我们需要把Cube给我们生成的文件改成C++文件。但是在此处不宜用更改文件名后缀的方法,因为这样的话会导致cube以后在修改的时候不会维护.cpp文件,而是重新给你生成一个.c文件。为了保证cube的维护性,我们在keil的工程目录中选中需要使用C++特性的文件,右键点击 “Options for File ‘xxx.c’”,打开后将File Type里设置为C++ Source File即可 这样即使是.c后缀 keil也会将它认为C++文件进行编译链接. 这样我们就可以将C++嵌入到工程里 并且cube更新的时候这些也不需要重新设置 cube之外的其他用户文件直接使用.cpp .hpp并做好extern “C” 的工作即可,不需要这样设置

###一些注意事项
建议只把需要用到C++特性的cube文件设置为C++文件,不要把一些底层的驱动文件也设置成C++文件,因为不知道会有什么未知的影响。我亲身经历了一次把所有的.c文件改成c++源文件类型后编译时错误的绝望…
另外,所有涉及中断的服务函数必须用 extern "C"作前缀(包括定义),因为stm32的中断服务名是由汇编的启动代码内的向量表决定的,汇编不认得C++的函数名的链接符号。建议的方法是在中断配置文件里的开头和结尾(都含有cube的 "user code"段)加上extern "C"的标注。

/------------------------------------------------------------------------------

2018年6月4日11:34:06后记:

STM32Cube其实在悄无声息的对HAL逐渐完善C++的支持 自身体验F103的HAL库 生成工程后 只需要注意中断要extern "C"外 其他的HAL库都处理好了. 所以用C++开发的同学们可以尽量尝试新的库,对C++的支持更优!
---------------------
作者:wmdscjhdpy
来源:CSDN
原文:http://blog.csdn.net/wmdscjhdpy/article/details/79354513
版权声明:本文为博主原创文章,转载请附上博文链接!

3.基于正点原子STM32F4探索者开发板的测试

cubemx prj
BOOT.zip (3.32 KB, 下载次数: 10)
收藏 评论0 发布时间:2019-6-28 14:45

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版