一、项目初衷

大学期间使用单片机开发的项目做过不少,从平时的课程设计,到智能车比赛、电赛等,使用过的单片机包括51、STM32、英飞凌的TC264、沁恒的CH32、TI的430等等,平时自己做些小玩意大部分使用Arduino和ESP32/8266等Arduino平台的单片机。除了Arduino使用C++外,使用C语言比较多一些。而在使用C语言的过程中也遇到一些问题,例如各种标志变量声明满天飞,不同平台单片机之间代码复用性差等,在使用一些较为低级的外设如IO口、串口等还可以应付的了,而在使用一些高级的设备例如OLED、TFT等,基本上每款单片机都需要重新找或者手搓一个库,代码的复用性比较差。而这些外设的底层原理都是像I2C、SPI等,在不同的单片机之间物理层、协议等都是基本上一致的,完全可以封装为统一的接口,在不同平台的单片机之间转换的时候,只需要将外设接口重写,而上层的驱动代码就可以实现复用。我觉得这一点在Arduino上面就做的很好,不同型号的单片机的代码基本上复制粘贴编译下载就能用。而我所使用的许多国产处理器不支持Arduino的框架。当然我这个项目的目的并不是想全盘移植Arduino的框架,Arduino对于底层操作的支持并不是很好(例如定时器编码器通道等),这个项目的目的是为了写一个统一的单片机驱动接口,再使用C++进行封装,并移植部分Arduino的库(例如Arduino的输入输出流、JSON、Adafruit的图形库等),在使用不同平台的单片机是重写驱动接口,实现C++层代码和应用代码的复用。并且,我未来的工作也将是从事C++软件开发,借助这个项目锻炼自己面向对象的编程思想,例如多态、继承等。目前我已经完成了io口驱动、外部中断、串口、SPI、I2C等的驱动接口,并移植了Arduino的输出流、Adafruit的图形库等。并且之前在搜寻资料的过程中,发现使用C++开发单片机的文章少之又少,再加上最近因为西安疫情被困在宿舍,很多硬件资源拿不回来,手头就几块32和几个OLED屏和TFT屏,能写的都写的差不多了(当然和我的计划还差好多),在宿舍也没事干,就跑CSDN来撸博客了hhh

二、项目架构

这个项目代码主要分为三层,最底层为单片机硬件库函数,主要为单片机产商提供,例如STM32的库函数;第二层为外设接口层,主要使用C语言,在不同的单片机之间统一接口函数(函数名、输入输出变量、返回值一致),对底层进行封装;第三层为C++驱动层,以面向对象的思想对第二次进行封装,并引入一些外部的C++库,在此基础上进行外部设备的开发和驱动。应用时既可使用第二层的C语言代码进行开发,也可以使用第三层的C++代码进行开发,在抽象的同时不完全屏蔽底层。

三、硬件介绍&环境

处理器:STM32F103ZE
开发环境:Keil5
编译器版本:V5.06

库函数版本:V3.5

该专栏适合有一定STM32基础和C++基础的同学,STM32的小白emmmm我尽量让你们看的了吧。

其他补充

2022-11-11
项目在Gitee上开源了,地址:https://gitee.com/gong_wei_wei/stm32-f10x-c-library
目前正在工作,很少更新

从新建工程开始使用C++开发单片机(以STM32为例):一、项目介绍相关推荐

  1. 从新建工程开始使用C++开发单片机(以STM32为例):六、C++输入输出流(附代码)

    经过前面几篇文章的铺垫,完成了C语言接口层的GPIO.外部中断.串口.delay等接口,现在可以正式进入C++驱动层的文章.当然C语言接口层的还远没有完成,在以后的文章中还会继续更新. 本文将会介绍一 ...

  2. 欧姆龙旋转编码器接入单片机(STM32为例)的方法

    欧姆龙编码器接入单片机实现脉冲计数 前言 一.OMRON E6B2-CWZ6C 二.接入过程 1.编码器线序定义 2.3D建模 1.编码器支架 2.欧姆龙旋转编码器 3.SW装配体模型 总结(要想快, ...

  3. VS code下开发单片机或者STM32程序

    一直想着编写单片机和32代码能不能换IDE,奈何关注了很久都没有发现一个比较好的.今天突然发现VS code竟然出了一个Keil Assistant的插件,虽说不能完全取代Keil,但是也足够方便与强 ...

  4. Django+Vue开发生鲜电商平台之1.项目介绍

    文章目录 一.项目概览 二.项目技术要点 三.项目预览 我永远相信只要永不放弃,我们还是有机会的.最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还 ...

  5. Android开发的《大众设计App》项目介绍

    该<大众设计App>的功能介绍如下: 1.登录&注册功能 登录.注册页面效果如下所示: 2.用户信息修改功能 (各个修改功能均已实现,因修改栏目较多不再逐一展示) 3.设计衣服的功 ...

  6. C语言开发单片机如何避免全局变量过多混乱

    每个攻城狮的成长经历,目标总是相似的. 刚开始学习这门技术的时候,希望自己能独立做出各种各样智能的产品. 有了这能力,更有竞争力,也更挣钱,在越来越智能的时代不至于被抛弃. 可惜并不是每个人都能走到终 ...

  7. 如何快速的开发单片机

    作为一个单片机开发的老司机,在这里告诉大家如何快速的开发单片机,完成自己的项目. 一.整理需求,如果你们的产品经理已经整理出需求那就更好了.拿到需求后,如果有疑问请及时沟通.请不要有疑点,例如:完成项 ...

  8. C语言开发单片机为什么大多数都采用全局变量的形式?

    一个代码狗,成长经历都是莫名相似的. 你应该和我有类似的经历,虽然功能都能做出来,但是总觉得自己代码缺了点什么. 就是怎么写都觉得不够完美,感觉代码的水平介于专业和不专业之间. 自己的认知水平也非常有 ...

  9. 开发单片机常见的IDE有哪些?

    开发单片机常见的IDE有哪些? (点击链接阅读原文)

最新文章

  1. 模拟进程管理小结,编码规范的重要性
  2. [云炬创业管理笔记]第五章打磨最有效的商业模式测试1
  3. JavaScript --- 取得鼠标事件的坐标
  4. 基本的SVG样式属性
  5. 先留住人,再发展人和吸引人
  6. The problem of maze(经典迷宫问题) DFS版
  7. php 快速安装,PHP - 快速配置及安装
  8. 云-腾讯云-云点播:云点播(VOD)
  9. Word2003及Excel2003打开速度慢,如何解决?
  10. 【洞察】152号令,重量级行业信息技术法规
  11. Win2008系统下装CTBS之前的系统组件安装向导第二篇(补充篇)
  12. 奇怪,发不出去,只能截图发了
  13. UEFI与 Legacy BIOS两种启动模式详解
  14. linux分区sda和sdb合并,给系统新添加硬盘sdb后,怎么分配给sda下某个分区
  15. python之生成器(~函数,列表推导式,生成器表达式)
  16. 在Kotlin中有多个选择的交错recyclerview
  17. Open3d基础控件
  18. JAVA cmd 命令运行 jar 包
  19. win10错误事件10016导致蓝屏重启的问题
  20. 自媒体新手每天也能赚500!3种暴利变现方式,不用真人出镜

热门文章

  1. Django使用图片验证码加邮箱或手机号登录
  2. open edx_Open edX和OpenStack用于复杂的学习环境
  3. 逆光人物摄影构图灵感经验分享,在集设网参与设计大咖的成长之路!
  4. html css3不拉伸图片显示效果,类似淘宝的
  5. Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心)
  6. 秒懂所有USB接口类型,USB接口大全
  7. 全国高等学校计算机等级考试大纲,全国高等学校计算机等级考试大纲.doc
  8. windows服务器日志文件定期清理,运维编排场景系列-----定时清理Windows服务器日志...
  9. JAVA判断是否是水仙花数
  10. Microsoft Office for Mac最新版本安装教程,亲测可用