2804|4

1234

帖子

4

TA的资源

纯净的硅(高级)

楼主
 

C++来管理stm32的程序 [复制链接]

本帖最后由 ywlzh 于 2016-7-25 14:37 编辑

    不知各位有没有尝试过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的类吧
            
是不是很熟悉!里面就是C代码!再看看具体函数怎么写的?
  
哎呀,还是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类写好了,那串口也就不远了

好了具体函数也不多细说了, 还不如直接分享一下这个工程!
最后交代一下工程
  
我用的的MDK5,具体哪个版本我就不知道了,如果要用MDK4来打开的话,试试把工程目录USER下Template.uvprojx中的后缀去掉x,还有.uvoptx也是去掉x
好了,如果你有兴趣也可以玩玩,最好是把SPI,ADC,dma....做好了分享一下。
Template_C _STM32F103.rar (3.56 MB, 下载次数: 20)

最初的空的工程是用的正点原子的工程,然后在此基础上改的。已经写好了GPIO和串口。
哦,如果你开始对C++的类感兴趣了,不妨看看这本书
《C++程序设计教程第二版(钱能)》 拥有C语言编程底子的你可以直接从第三部分第8章开始看,在此,祝你能取得收获!
此帖出自单片机论坛

最新回复

原来我连STM8也是用C++写的,后来同事跟不上,改成C了……  详情 回复 发表于 2016-7-25 15:26

赞赏

2

查看全部赞赏

点赞 关注
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 

回复
举报

1297

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
感觉和mbed很像啊,hoho
此帖出自单片机论坛
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
顶顶顶顶顶顶顶顶顶顶
此帖出自单片机论坛
 
 
 

回复

449

帖子

0

TA的资源

纯净的硅(中级)

4
 
原来我连STM8也是用C++写的,后来同事跟不上,改成C了……
此帖出自单片机论坛

点评

跟不上,哎呀,哎呀  详情 回复 发表于 2016-7-25 17:03
 
 
 

回复

1234

帖子

4

TA的资源

纯净的硅(高级)

5
 
Aragorn 发表于 2016-7-25 15:26
原来我连STM8也是用C++写的,后来同事跟不上,改成C了……

跟不上,哎呀,哎呀
此帖出自单片机论坛
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表