一、项目初衷

大学期间使用单片机开发的项目做过不少,从平时的课程设计,到智能车比赛、电赛等,使用过的单片机包括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. 加载XML 添加删除节点
  2. 一块电路板从“出生”到“成年”
  3. 绑定dictionary 给定关键字不再字典中_VBA代码集锦-利用字典做两列数据的对比并对齐...
  4. 使用Java注解不正确的方法
  5. riak文件服务器,Docker中文文档
  6. java基础—对一个字符串中的数值进行从小到大的排序
  7. ubuntu 设置静态路由_Linux route 配置静态路由(转载)
  8. 大数据对于企业的价值,主要体现在哪几个方面?
  9. HTTP 401和403区别
  10. linux虚拟机克隆mac地址冲突,虚拟机下linux迁移造成MAC地址异常处理办法(示例代码)...
  11. 国产 CAE 软件研发
  12. 能否在虚拟平台里构建真实的生活体验?
  13. 古细菌多样性分析16S rRNA
  14. 领导要我6点下班前创建1000个有效的手机号,现在5点半了!random模块10分钟搞定!
  15. 瑞士名表精美动态屏保大集合、提供截图及下载地址!
  16. Java中的【Object类】
  17. 电科矩阵理论CH2向量与矩阵的范数--证明题
  18. maya arnold官方全系列下载地址
  19. 小科普 | BIOS设置选项详细解释②——内存篇
  20. 中国图书分类法--计算机与数学

热门文章

  1. 凡客登录页面html代码,简洁的凡客购物商城首页模板源码
  2. 江敏:做创业公司CTO,是程序员未知的冒险
  3. # SpringCloud集成 报错 An attempt was made to call a method that does not exist. The attempt was
  4. 21.VIVO: Visual Vocabulary Pre-Training for Novel Object Captioning
  5. Linux驱动学习--android中的内存管理机制ION(一)--简单介绍
  6. 攻击JavaWeb应用[2]-CS交互安全
  7. 【爬虫】python使用selenium抓取淘宝中的商品数据
  8. pandas常用方法
  9. 改善SilverLight安装体验(翻译)
  10. 苹果微信密码服务器,苹果微信怎么记住密码的登录