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. 存储自定义类型元素-LinkedHashSet集合

    存储自定义类型元素 HashSet存储自定义类型元素 set集合报错元素唯一: 存储的元素(String,Integer,...,Student,Person...),必须重写hashCode方法和e ...

  2. 大数据实时多维OLAP分析数据库Apache Druid入门分享-下

    @ 目录 架构 核心架构 外部依赖 核心内容 roll-up预聚合 列式存储 Datasource和Segments 位图索引 数据摄取 查询 集群部署 部署规划 前置条件 MySQL配置 HDFS配 ...

  3. 【学习笔记】XR872 GUI Littlevgl 8.0 移植(文件系统)

    不得不提 在移植的过程中,发现 LVGL 的文件操作接口并不十分完善,在我看来, LVGL 的文件操作接口,应该更多的是为了 LVGL 内部接口方便读取资源文件而设立的,例如读取图像文件,加载字库文件 ...

  4. MATLAB人工神经网络ANN代码

      本文介绍基于MATLAB实现人工神经网络(ANN)回归的详细代码与操作. 目录 1 分解代码 1.1 循环准备 1.2 神经网络构建 1.3 数据处理 1.4 模型训练参数配置 1.5 神经网络实 ...

  5. 命令行部署repmgr管理集群+switchover+切换测试

    本次部署未使用securecmd/kbha工具.无需普通用户到root用户的互信. 建立系统数据库安装用户组及用户,在所有的节点执行 root用户登陆服务器,创建用户组及用户并且设置密码 [root@ ...

  6. 可能是最简单的本地GPT3 对话机器人,支持OpenAI 和 Azure OpenAI

    毫无疑问,GPT是目前最火的人工智能方向,已经商用的有OpenAI公司原生的GPT3 和 ChatGPT ,以及微软公司的Azure OpenAI Service (暂时还没有包含ChatGPT).关 ...

  7. Google_MapReduce中文版

    笔者最近在看MIT6.824的lab1,实验内容是实现一个简易的MapReduce.本篇文章是MapReduce论文的中文翻译. @Author:Akai-yuan @更新时间:2023/2/13 摘 ...

  8. LG P2633 Count on a tree

    \(\text{Solution}\) 树上主席树板子 \(\text{Code}\) #include <cstdio> #include <algorithm> #defi ...

  9. [EULAR文摘] 新证据: NSAID对AS放射学进展的影响

    新证据: NSAID对AS放射学进展的影响 Sieper J, et al. EULAR 2015. Present ID: OP0145. 背景: 既往有研究显示持续给予NSAID相较于按需给药能在 ...

  10. 05#Web 实战:可拖拽的侧边栏

    效果演示图 可拖拽的左.右侧边栏的使用情况还是挺多的,博客园后台管理的左侧边栏就可以拖拽哟!效果演示如下图: HTML 代码 <div class="container"&g ...