版权声明:Copyright © 2016-2019,Stardust Studio, All Rights Reserved
-
前言:因为诸多事情一直耽搁了,原本2020年前本文应当完成,今天抽出时间来弥补先前的失言。 初次接触stm32,很重要的切入点便是找准学习的方向和明确学习思路。
-
从宏观来讲stm32作为控制设备必然有其“系统”属性,即包含系统的输入、信息处理、输出和反馈。而系统输入/输出必定依赖媒介,而对于stm32来讲,此媒介必然是IO口,而esp32/8266还可以是无线接口。而信息处理是交给“内核”来处理的。
-
从系统的“组件”角度来讲,整块单片机(例如stmf0系列)由内核(M0内核)、片内外设、和外围电路构成。
-
从尺度来讲,嵌入式编程从寄存器开始,而后是单元电路,如IO单元模块、TIM定时器单元模块等等。再者便是整块单片机和响应传感器模块,然后是操作系统,最终是集群分布式操作系统(可以类比成如今的广域网)。
-
以笔者当年学习的思路(纠正后的,走了不少弯路,就经验来说这条应该是最扎实最快的成长路径)以做参考:搭建IDE(前提是C/C++功底要扎实,C后期可往OS操作系统发展,C++后期可往Linux系统发展)–>GPIO包括端口映射–>systick定时器–>系统时钟树–>USART–>EXIT–>Timer–>PWM–>输入捕获–>ADC–>DAC–>FiFo–>DMA–>SPI–>I2C(平常也叫I方C)–>485–>CAN通信(车联网中用的较多)–>SDIO读写–>Fatfs文件处理–>USB–>以太网–>OS操作系统(顺带学一下GCC编Linux)–>AI(笔者目前就在做这一块,做一做MicroPython)–>封神(这个当然是是笔者瞎编的,哈哈)。
-
其中必不可少便是查阅datasheet和养成良好的编程习惯,最终给各位读者一些福利,便是我们工作室内部stm嵌入式核心编程规范,开源分享给大家:
1 统一工程基体
1.1 main.c仅用于目标实现调用
1.2 main.h仅用于头文件统一引用
1.3 项目组文件分为
官方驱动库(Startup/CMSIS/STM32F10x_StdPeriph_Driver 寄存器级别调用)
工作室硬件接口库(Public 硬件接口级别调用)
工作室硬件模块库(Private 硬件接口级别调用)
2 统一编程风格
2.1 头文件(.h文件)
Public/Private中头文件一律包含stm32f10x.h
User中除main.h外所有头文件一律包含main.h
2.2 函数
非外部调用函数一律用static封装
2.3 标识符命名
User/Public文件夹中除stm32f10x_it.c和stm32f10x_it.h文件外均以小写命名
Private文件夹中文件均以大驼峰和下划线融合命名
宏定义均以大写和下划线融合命名
函数均以大驼峰和下划线融合命名
全局变量以G_前缀和大驼峰和下划线融合命名
全局静态变量以S_前缀和大驼峰和下划线融合命名
局部变量以小写和下划线融合命名
2.4 注释
/**/块代码注释
//单行代码注释
3 统一查错程序为PC-Lint
4 统一API文档打包程序为Doxygen
5 代码统一要求
规范性
简洁性
代码可读性
可移植性(同种类型单片机[stm32f1xx和stm32f4xx]
同种编程语言单片机[stm32和51])
代码重用性
健壮性
单元模块耦合性低
高度封装
可测试性和良好的异常抛出机制
执行效率高
后记——凡尘
- 时间匆忙,如有错别字和内容不合理的地方欢迎大家批评指正,如有想深入探讨或是项目需求的朋友欢迎加入QQ群
- 星尘Arduino社区:630581178
- 星尘STM8/32社区:700155855
说明需求一起探讨学习。 - 更多技术文章可访问笔者博客:https://www.jianshu.com/u/172d8143ee6a
- 个人邮箱:fanchen995@gmail.com