从stm32深入嵌入式开发

版权声明: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
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值