Keil5更新之后,开始支持ARM V6编译器,新版本的编译器对C++有了更多的支持,在编译方面也做了很多的改善,具体的没有详细了解,本文只是对STM32 开发下,使用V6版本的编译器进行STM32的C++开发作一个记录,方便和大家交流和参考。至于说为什么STM32要C++开发,这个没有解释,只是个人觉得C++比C有更多的方便,使得编程更加的容易,C++有更多的生态....

  开始上教程:Keil5的安装和破解以及STM32 pack库的安装不在本文范围之内,需要的话请自己百度,网上以及有了很多的教程。

  笔者打开以前的STM32 工程,想自己通过更改编译器版本实现,结果发现编译之后会出现很多的错误,故还是采取Keil5的建立工程方式来建立新的STM32工程。

  

                          项目概览

  第一步:建立Keil5工程-》配置STM32类型。

  第二步:STM32工程文件的配置,CMSIS需要勾选CORE,然后在Device下选中STM32 的启动Startup,最后就是选择需要外设。(勾选过程全部是绿色为有效,如果出现黄色,可能是有相关的依赖性没有选中)

  第三步:切换到V6编译器,同时对C/C++进行配置

注意:正常情况下按照上述步骤,不需要进行额外编译预处理的宏定义,比如定义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 愉快,有任何的问题可以和我交流,或者大家相互请教,有错误或者其他请告知,谢谢!

Keil5 STM32 C++开发 ARM V6编译器的使用教程的更多相关文章

  1. Eclipse + CDT + YAGARTO + J-Link,STM32开源开发环境搭建与调试

    Eclipse+CDT+YAGARTO+J-Li:开源开发环境搭建与调试:作者:Chongqing:邮箱:ycq.no1@163.com:文档版本:V1.0:发布日期:2014-08-04:前言:此文 ...

  2. 【Linux开发】【Qt开发】ARM QT移植详细步骤教程

    ARM QT移植详细步骤教程 米尔SAM9X5和A5D3X上默认的Qt版本是4.5.3,当这个版本的Qt库不能满足实际开发需求时,可通过此方法制定Qt开发.运行环境. 移植的步骤如下: 1.下载新版q ...

  3. 嵌入式linux和stm32嵌入式开发这两者之间有什么关联性

    对于更开始入坑的同学,可能也像我一样搞不清楚两者的区别与联系.现在结合知乎网上的相关资料发一篇文章来具体分析. 基于STM32的开发属于微控制器开发领域,主要开发工具是keil或IAR,这种开发更准确 ...

  4. 我开发的SNMP编译器和浏览器

    我开发的SNMP编译器和浏览器 什么是SNMP SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进 ...

  5. STM32库函数开发使用总结

    一.外设常具备的几类寄存器 控制寄存器xxx_CR (Control/Configuration Register): 用来配置.控制响应外设的工作方式,如GPIOx_CRL.AFIO_EXTICR1 ...

  6. arm的编译器里已经有C标准库的lib包了,android为啥还要自己再实现呢

    arm的编译器里已经有C标准库的lib包了,android为啥还要自己再实现呢 google自己搞的bionic libc来替代glibc想来是有原因的,本来glibc也是lgpl,应该也没有版权问题 ...

  7. 用Eclipse替代Keil&IAR来开发ARM应用(升级版)

    Eclipse GNU ARM Plugin 2014/7/16 作者 kiya 几个月前写了一篇<),想自己丰衣足食的参考我的上一篇文章,以及GNU ARM的官网. 用Eclipse替代Kei ...

  8. AMS5601的ardunio和STM32驱动开发

    AMS5601的ardunio和STM32驱动开发 本文有麦粒电子撰写,并提供相应产品服务. 前言 目前ams关于磁编码芯片用的比较多的可能是ams5600,能够输出pwm信号,电压信号以及I2C通信 ...

  9. .NET开发邮件发送功能的全面教程(含邮件组件源码)

    今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         ...

  10. 【特别推荐】Web 开发人员必备的经典 HTML5 教程

    对于我来说,Web 前端开发是最酷的职业之一,因为你可以用新的技术发挥,创造出一些惊人的东西.唯一的问题是,你需要跟上这个领域的发展脚步,因此,你必须不断的学习,不断的前进.本文将分享能够帮助您快速掌 ...

随机推荐

  1. 三种循环的区别-break语句

    三种循环的区别 循环语句的区别 for 和 while 的小区别: 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继 续使用,如果你想继续使用,就用w ...

  2. 程序员必备的数据库知识 2:Join 算法

    前言 连接(Join)是关系数据库重要特性,它和事务常被作为数据库与文件系统的两个重要区别项.程序员江湖一直流传着某某 baba 的神秘开发宝典,其中数据库部分有重要一条避免过多表的 Join,奈何 ...

  3. supervisor管理java进程

    安装 yum install supervisor 设置开机启动 systemctl enable supervisord 启动supervisord systemctl start supervis ...

  4. ECharts 饼图指定颜色显示

    一.通过setOption的color属性分配颜色范围 先介绍这里提到的color属性 color:调色盘颜色列表.如果系列没有设置颜色,则会依次循环从该列表中取颜色作为系列颜色. 默认为: ['#5 ...

  5. Spring(IOC实际开发使用、底层原理)

    实际开发的使用 实际开发中会将程序分为3层: Controller Servlet Repository(DAO) 关系Controller 调运Servlet 调运 Repository(DAO) ...

  6. 基于ChatGPT的API的C#接入研究

    今年开年,最火的莫过于ChatGPT的相关讨论,这个提供了非常强大的AI处理,并且整个平台也提供了很多对应的API进行接入的处理,使得我们可以在各种程序上无缝接入AI的后端处理,从而实现智能AI的各种 ...

  7. 如何完美运行黑苹果 macOS Catalina

    2018年年初,我在闲鱼 APP 上,以799元的价格,购买了一台二手的联想 ThinkPad 11e 笔记本电脑.这是一台美版的教育用途电脑,成色较新,根据自带硬盘记录,该电脑使用时长仅有230+小 ...

  8. Prometheus插件安装(cadvisor)

    简介 当docker服务数量到一定程度,为了保证系统的文档,我们就需要对docker进行监控.一般情况下我们可以通过docker status命令来做简单的监控,但是无法交给prometheus采集, ...

  9. 深入理解计算机系统(CSAPP)bomblab实验进阶之nuclearlab——详细题解

    前言 本实验是难度高于bomblab的一个补充实验,该实验部分题目难度已经达到CTF入门水平,且这个实验据说是上一届的某个学长原创,因此互联网上几乎找不到类似的题目.在间断地思考了几周后我最终完成了所 ...

  10. Django中models的字段

    常见的field类型: 1.AutoField 自增字段,它是一个根据ID自增长的IntegerField字段,通常不用自己设置,如果没有设置主键,django会自动添加它为主键字段 2.CharFi ...