stm建立工程之前应知道的基础知识
主要摘自:正点原子的pdf文档。
前言:
国内 Cortex-M3 市场, ST(意法半导体)公司的 STM32 无疑是最大赢家,作为 Cortex-M3
内核最先尝蟹的两个公司(另一个是 Luminary(流明))之一, ST 无论是在市场占有率,还
是在技术支持方面,都是远超其他对手。 在 Cortex-M3 芯片的选择上, STM32 无疑是大家的首
选
STM32F103 学习方法
1,一款实用的开发板
2,两本参考资料, 即《STM32 中文参考手册》和《Cortex-M3 权威指南》。
《STM32 中文参考手册》是 ST 出的官方资料,有 STM32 的详细介绍,包括了 STM32 的
各种寄存器定义以及功能等,是学习 STM32 的必备资料之一。而《Cortex-M3 权威指南》则是
对《STM32 中文参考手册》的补充,后者一般认为使用 STM32 的人都对 CM3 有了较深的了解,
所以 Cortex-M3 的很多东西它只是一笔带过,但前者对 Cortex-M3 有非常详细的说明,这样两
者搭配, 你就基本上任何问题都能得到解决了。
3,掌握方法,勤学慎思。
a) 掌握时钟树图(见《STM32 中文参考手册_V10 版》图 8)。
任何单片机,必定是靠时钟驱动的,时钟就是单片机的动力, STM32 也不例外,通过时钟
树,我们可以知道,各种外设的时钟是怎么来的?有什么限制?从而理清思路,方便理解。
b) 多思考,多动手。
完全是可以翻书,可以
查资料的,可以抄袭的,不需要死记硬背。掌握学习的方法,远比掌握学习的内容重要的多。
学习一定要自己动手,光看视频,光看文档,是不行的。举个简单的例子,你看视
频,教你如何煮饭,几分钟估计你就觉得学会了。实际上你可以自己测试下,是否真能煮好?
机会总是留给有准备的人,只有平时多做准备,才可能抓住机会。
1、固件库与寄存器的关系:
固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API)。
ST(意法半导体)推出了官方固件库,固件库将这些寄存器底层操作都封装起来,提供一整套接口(API)供开发者调用,大多数场合下,你不需要去知道操作的是哪个寄存器,你只需要知道调用哪些
函数即可。
任何处理器,不管它有多么的高级,归根结底都是要对处理器的寄存器进行操作。但是固件库不是万能的,您如果想要把 STM32 学透,光读 STM32 固件库是远远不够的。你还是要了解一下 STM32 的原理,而这些原理了解了,你在进行固件库开发过程中才可能得心应手游刃有余
2、STM32 固件库与 CMSIS 标准讲解
ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设
计,而 TI, ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的
芯片内核标准设计自己的芯片。所以,任何一个做 Cortex-M3 芯片,他们的内核结构都是一样
的,不同的是他们的存储器容量, 片上外设, IO 以及其他模块的区别。所以你会发现,不同公
司设计的 Cortex-M3 芯片他们的端口数量,串口数量,控制方法这些都是有区别的, 这些资源
他们可以根据自己的需求理念来设计。同一家公司设计的多种 Cortex-m3 内核芯片的片上外设
也会有很大的区别,比如 STM32F103RBT 和 STM32F103ZET,他们的片上外设就有很大的区
别。
既然大家都使用的是 Cortex-M3 核,也就是说,本质上大家都是一样的,这样 ARM 公司
为了能让不同的芯片公司生产的 Cortex-M3 芯片能在软件上基本兼容,和芯片生产商共同提出
了一套标准 CMSIS 标准(Cortex Microcontroller Software Interface Standard) ,翻译过来是
“ARM Cortex™ 微控制器软件接口标准”。 ST 官方库就是根据这套标准设计的。这里我们又
要引用参考资料里面的图片来看看基于 CMSIS 应用程序基本结构:
CMSIS 分为 3 个基本功能层:
1) 核内外设访问层: ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。
2) 中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
3) 外设访问层:定义硬件寄存器的地址以及外设的访问函数。
从图中可以看出, CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交
道,向上提供实时操作系统用户程序调用的函数接口。如果没有 CMSIS 标准,那么各个芯片公
司就会设计自己喜欢的风格的库函数,而 CMSIS 标准就是要强制规定,芯片生产公司设计的库
函数必须按照 CMSIS 这套规范来设计。
其实不用这么讲这么复杂的,一个简单的例子,我们在使用 STM32 芯片的时候首先要进
行系统初始化, CMSIS 规范就规定,系统初始化函数名字必须为 SystemInit,所以各个芯片公
司写自己的库函数的时候就必须用 SystemInit 对系统进行初始化。 CMSIS 还对各个外设驱
动文件的文件名字规范化,以及函数名字规范化等等一系列规定。上一节讲的函数
GPIO_ResetBits 这个函数名字也是不能随便定义的,是要遵循 CMSIS 规范的。
3、STM32 官方库包介绍
这一节内容主要讲解 ST 官方提供的 STM32 固件库包的结构。 ST 官方提供的固件库完整包
可以在官方下载。固件库是不断完善升级的,所以有不同的版本,我们使
用的是 V3.5 版本的固件库。