STM32简介
STM32是意法半导体(ST)推出一款32位的单片机。STM32具有超低的价格、超多的外设、丰富的型号、优异的实时性、极低的开发成本等优势。STM32凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多32位单片机中脱颖而出
STM32芯片内部可以粗略划分两部分:内核+片上外设。如果与电脑类比,内核与片上外设就如同电脑的CPU与主板、内存、显卡、硬盘的关系。
ARM公司只设计内核不生产芯片,他会将有关内核的技术授权给各半导体厂商例如ST、TI、Atme1、NXP等厂商。这些厂商都是基于这个内核自己设计片上外设如SRAM、ROM、FLASH、USART、GPIO等,然后集成到一个硅片上,这就是我们现在用的芯片。
芯片内部架构见图:
![](https://img-blog.csdnimg.cn/60555bfa631b4dcf875e343b865ed5db.png)
芯片内部内核和外设分别是两个公司设计的,那他们该怎么联系到一起协同高效的工作呢?答案就是总线,学过计算机组成原理的同学都应该知道计算机五大组成部分运算器、控制器、存储器、输入设备、输出设备他们之间的通信就是通过总线。我们上面也说了单片机就是一个集成在硅片上的计算机,所以他内部的连接关系也是靠总线。
STM32内部一共有11条总线:
![](https://img-blog.csdnimg.cn/0f47db587051460bbad2c8c67f860e4f.png)
我们知道,在嵌入式开发中,比如51和Arduino,我们写程序烧入芯片就可以实现控制。那么我们写的程序怎么就能控制我们的单片机工作呢或者程序在控制什么东西呢?
那个东西就是寄存器,其实不管我们用库开发还是寄存器开发我们本质上就是在控制寄存器上的每个位的通断,并且这些寄存器都有其特定的功能。换句话说每个外设(如GPI0、USART、I2C、SPI.…)都对应有寄存器来对他控制。
所以STM32可以用寄存器开发也可以用库开发。
STM的选型
STM32是ST的所有产品的统称,ST有两大家族STM8和STM32。STM8主要针对于低成本,对主频要求比较低、运算速度要求不是很高的低端市场。STM32主要应用于项目对主频要求较高、运算速度比较快、实时性好的中高端市场。STM32有很多产品大致划分可分为主流MCU、高性能MCU、低功耗MCU。其中主流MCU如STM32F1系列、高性能MCU如STM32F4、STM32F7系列、低功耗MCU如STM32L0系列。并且每个系列产品下面还会根据闪存容量、外设数量、封装大小分为很多种类并且价格也是差别很大。
![](https://img-blog.csdnimg.cn/058b02fafc004384bad92784409ad10f.png)
STM32型号的说明:以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下:
![](https://img-blog.csdnimg.cn/fe932cc95a9f48e7886a12e0998b4061.png)
我手上的是正点原子的一款开发板,芯片用的是STM32F103ZET6
![](https://img-blog.csdnimg.cn/d407cad72d00434d81c77f719c7f71c5.png)
芯片说明书如下:
![](https://img-blog.csdnimg.cn/5a66455faf184312a2ca0a205d75d658.png)
编写程序
先下载keil软件(官网下载MDK5的安装包):
![](https://img-blog.csdnimg.cn/6e7c77e4d6a943f7b1364aa5beae238c.png)
注意:
![](https://img-blog.csdnimg.cn/5b35c793c4dd4ce78e2e030aed3a96aa.png)
MDK5安装¶
MDK5的安装比较简单。首先从官网上下载MDK5的安装包,下载前需要先填写相关个人信息:
![](https://img-blog.csdnimg.cn/4d76603335e241db8909d2f00f4667bf.png)
然后双击下载后的安装包,开始安装:
![](https://img-blog.csdnimg.cn/8e555846ae6b415da89102b72989c0b6.png)
![](https://img-blog.csdnimg.cn/a211812843d24b7a90443f6b22b09a31.png)
勾选同意选择框,点击下一步:
![](https://img-blog.csdnimg.cn/14f40a18d0704b748cc82e6eba823806.png)
选择安装路径,这包括选择MDK核心组件(Core)的安装路径和外设包(Pack)的安装路径,一般只用选择 Core 的安装路径,Pack 的路径会自动设置为 Core 路径下的ARM/PACK
:
![](https://img-blog.csdnimg.cn/2e3060b18e814ea3b39a9f7e90ac9e1c.png)
![](https://img-blog.csdnimg.cn/815ccd62418341e8b0604b28654485a8.png)
点击下一步,等待进度条走完即可:
![](https://img-blog.csdnimg.cn/70e610ddf0c34c599e318aa458c91b99.png)
安装完成后,会自动弹出 Pack Installer 界面,如果没有的话可以打开安装好的 Keil uVision5 软件,在工具栏上找到 Pack Installer 的图标,然后点击进入:
![](https://img-blog.csdnimg.cn/4caaa86608b34a66a5c2bf768d81f8e5.png)
打开 Pack Installer 界面后如下图所示:
![](https://img-blog.csdnimg.cn/a32e09d6df774839bbd17377ee759acb.png)
由于我们使用的STM32型号为 STM32F103TBU6,还需要安装开发所需要的器件支持包(Device Family Pack, i.e. DFP),所以展开STM系列产品的菜单栏:
![](https://img-blog.csdnimg.cn/0a95137050454b519dd3be40f5c4b11a.png)
点击右边红色圆圈选中的三个组件,Pack Installer 会自动从网上下载最新版本的组件,下载进度在 Pack Installer 底部状态栏显示:
![](https://img-blog.csdnimg.cn/58acf92a1516431db3163c643850b804.png)
这时候我们的MDK5就下载好了,接下来我们要下载STM32CubeMX,其实用MDK5已经可以来编写STM32的代码了,倒是接下来我们的教程将会使用STM32CubeMX进行解析,因为在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间。
![](https://img-blog.csdnimg.cn/737434675e664bc5854cd882bd128d16.png)
安装CubeMx一共需要三步
- JRE (Java Runtime Environment) Java运行环境 运行JAVA程序所必须的环境的集合
- STM32CubeMX
-
HAL库 STM32 HAL固件库 ST官方推出的另一套库。
1安装JRE
由于 STM32CubeMX 软件是基于 JAVA 环境运行的,所以需要安装 JRE (Java Runtime Environment)才能使用, 记得选择64位的安装
官网: https://www.java.com/en/download/manual.jsp
BD云: https://pan.baidu.com/s/1rI_XrM2SAw-6Jbvj75SWpg?pwd=hwk7 提取: hwk7
新lian接:
BD云: https://pan.baidu.com/s/1rj56i9HS4UAaE9yEaiIsaA?pwd=ack6 提取: ack6
1点击安装
![](https://img-blog.csdnimg.cn/3397a5c4f0b04cfca454e10af43fb3eb.png)
2 修改路径 点下一步
![](https://img-blog.csdnimg.cn/00ad0fb6e4e74717b8146b697a63276d.png)
3 等待安装完成,关闭界面
![](https://img-blog.csdnimg.cn/0fc6e4dde5164cbc9441675b94995647.png)
2安装STM32CubeMX
官网:www.st.com/stm32cubemx
官网下载:
![](https://img-blog.csdnimg.cn/19218975c224432aba1aaba8c5119084.png)
在官网下载需要注册下ST官网账号,目前最新为5.3.0版本。
1打开安装包
![](https://img-blog.csdnimg.cn/793aad42539b4515bf00c12605913b9e.png)
2同意协议,下一步
![](https://img-blog.csdnimg.cn/b80a45d2880f42c58bf75dfe615ad9c8.png)
3 勾选第一个即可,第二个选项是是否同意ST公司收集你的个人使用信息等。
![](https://img-blog.csdnimg.cn/3255c059a91f4f09a11cdc9d6493e7f3.png)
4 点YES 这句话是安装本软件可能会与文件夹之前文件冲突,导致文件夹之前文件丢失 是否继续
点继续即可
![](https://img-blog.csdnimg.cn/be719b3acf7649c088ce62c910b339c9.png)
5 直接点NEXT,其他不用设置 之后开始安装
![](https://img-blog.csdnimg.cn/c255d6de0e1a4fab8050a0691a281a87.png)
6 安装完成,点Done退出
![](https://img-blog.csdnimg.cn/c2b0ca4ab5cf477ea634ad9145c3622b.png)
3安装HAL库
什么是HAL固件库?
STM32 HAL固件库是Hardware Abstraction Layer的缩写,中文名称是:硬件抽象层。HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件,为更方便的实现跨STM32产品的最大可移植性。HAL库的推出,可以说ST也慢慢的抛弃了原来的标准固件库,这也使得很多老用户不满。但是HAL库推出的同时,也加入了很多第三方的中间件,有RTOS,USB,TCP / IP和图形等等。
和标准库对比起来,STM32的HAL库更加的抽象,ST最终的目的是要实现在STM32系列MCU之间无缝移植,甚至在其他MCU也能实现快速移植。
并且从16年开始,ST公司就逐渐停止了对标准固件库的更新,转而倾向于HAL固件库和 Low-layer底层库的更新,停止标准库更新,也就表示了以后使用STM32CubeMX配置HAL/LL库是主流配置环境;
HAL库,有在线安装、离线安装两种方式。
在线安装
打开安装好的 STM32CubeMX 软件 点上面的Help -> Manage embedded software packages
![](https://img-blog.csdnimg.cn/4517de24759740968f883f63bcc0f447.png)
会跳出来一个选择型号界面 勾选上你要安装的HAL库, 点击“Install Now” 直到安装成功。 如下图:
![](https://img-blog.csdnimg.cn/2c6df96020014ef3a3ed9f26cdccdb8c.png)
到此,你的STM32 CubeMx安装成功了。