[原创] C++来管理stm32的程序

ywlzh   2016-7-25 13:18 楼主
不知各位有没有尝试过C++对stm32的开发,想我在ARM上,PC上跑QT,也是C++开发的,我就想,能不能在我单片机stm32上跑呢?答案是肯定可以跑的,而且程序我觉得还比C写的更直观一些。 首先,程序不完全是C++写的,底层硬件保持C语言不变,还是用官方V3.5的库,并且库里每个.c都有 #ifdef __cplusplus extern "C" { #endif ....... ........ #ifdef __cplusplus } #endif 看来官方知道有人会用C++,所以写上了这样一段,来告诉编译器,被包括的函数要用C的编译器来编译,而且MDK是支持的,那就好办了。其次这些硬件控制的程序用C++来管理,也说说在C++的框架下调用C函数,说白了用C++程序来管理C程序,有点多此一举?呵,不尽然。 开始第一步:搭建一个简单的框架 这个框架说来也简单,就三个词:class,public,private.不用细说,自行百度,谷歌.....框架: class xxx{ public: ........... private: ........... }; 先看看GPIO的类吧 QQ图片20160725125639.png 是不是很熟悉!里面就是C代码!再看看具体函数怎么写的? QQ图片20160725125743.png 哎呀,还是C!没错,只是用C++的class来管理,有什么好处?这个说不清,道不明,还是从实际角度出发,有两个甚至多个GPIO做为led灯,看看初始化怎么写(以两个为例,PB0和PB2吧): _GPIO LED; _GPIO LED1; LED.GPIO(GPIOB,GPIO_Pin_0,GPIO_Mode_Out_PP); LED1.GPIO(GPIOB,GPIO_Pin_2,GPIO_Mode_Out_PP); 要是控制两个的灯引脚一个输出高电平,一个输出低电平: LED.Set(); LED1.Reset(); 就这么简单,可能要有疑问了,中断怎么处理?哈,这个也好办,在要用的中断函数前加上 extern "C" 就是告诉编译器这个函数要用C编译器来编译! 既然GPIO类写好了,那串口也就不远了 QQ图片20160725131113.png 好了具体函数也不多细说了, 还不如直接分享一下这个工程! 最后交代一下工程 QQ图片20160725131301.png 我用的的MDK5,具体哪个版本我就不知道了,如果要用MDK4来打开的话,试试把工程目录USER下Template.uvprojx中的后缀去掉x,还有.uvoptx也是去掉x 好了,如果你有兴趣也可以玩玩,最好是把SPI,ADC,dma....做好了分享一下。
Template_C _STM32F103.rar (3.56 MB)
(下载次数: 20, 2016-7-25 13:17 上传)
最初的空的工程是用的正点原子的工程,然后在此基础上改的。已经写好了GPIO和串口。 哦,如果你开始对C++的类感兴趣了,不妨看看这本书 《C++程序设计教程第二版(钱能)》 拥有C语言编程底子的你可以直接从第三部分第8章开始看,在此,祝你能取得收获! 本帖最后由 ywlzh 于 2016-7-25 14:37 编辑
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友

回复评论 (4)

感觉和mbed很像啊,hoho
点赞  2016-7-25 14:10
顶顶顶顶顶顶顶顶顶顶
点赞  2016-7-25 14:19
原来我连STM8也是用C++写的,后来同事跟不上,改成C了……
点赞  2016-7-25 15:26
引用: Aragorn 发表于 2016-7-25 15:26
原来我连STM8也是用C++写的,后来同事跟不上,改成C了……

跟不上,哎呀,哎呀
天地庄周马;江湖范蠡船。 个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
点赞  2016-7-25 17:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复