2
0
0
【嵌入式硬件】3.0 STM32F103 HAL库开发实战——初识STM32
# 什么是STM32
STM32,从字面上来理解,ST是意法半导体,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是指ST公司开发的32位微控制器(Microcontroller Unit,MCU)。在如今的32位控制器当中,STM32可以说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。
> * MCU(微控制器):CPU + 内存(RAM/Flash)+ 外设(GPIO、定时器、ADC、串口等)集成在一颗芯片里,如 STM32、ESP32、51 单片机。「单片机」也是它的中文俗称。
> * MPU(微处理器):只有 CPU 核心,内存和外设要外接,如 Cortex-A 系列、i.MX。
> * SoC:更高度集成的片上系统(可跑 Linux 的那种),边界上和 MCU 有重叠,如 ESP32 其实也算 SoC。
# STM32诞生的背景
51 是嵌入式学习中一款入门级的精典MCU,因其结构简单,易于教学,且可以通过串口编程而不需要额外的仿真器, 所以在教学时被大量采用,至今很多大学在嵌入式教学中用的还是 51。51 诞生于 70 年代,属于传统的 8 位单片机, 如今,久经岁月的洗礼,既有其辉煌又有其不足。 现在的市场产品竞争越来越激烈,对成本极其敏感,相应地对MCU 的性能要求也更苛刻:更多功能,更低功耗,易用界面和多任务。 面对这些要求,51 现有的资源就显得得抓襟见肘。所以无论是高校教学还是市场需求,都急需一款新的 MCU 来为这个领域注入新的活力。
基于这样的市场需求, ARM 公司推出了其全新的基于 ARMv7 架构的 32 位 Cortex-M3 微控制器内核。紧随其后,ST(意法半导体)公司就推出了基于 Cortex-M3 内核的 MCU——STM32。STM32 凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多 Cortex-M3 MCU 中脱颖而出,成为最闪亮的一颗新星。STM32 一上市就迅速占领了中低端 MCU 市场,受到了市场和工程师的无比青睐,颇有星火燎原之势。
# STM32能做什么
STM32属于一个微控制器,自带了各种常用通信接口,比如USART、I2C、SPI等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有STM32的身影,比如智能手环,微型四轴飞行器,平衡车、移动POST机,智能电饭锅,3D打印机等等。下面我们以最近最为火爆的产品来讲解下, 三星 GearFit 智能手环。

红圈:STM32F439ZIY6S处理器(我们简称之为439),2048KB FLASH ,256KB RAM ,WLCSP143封装。
橙圈:Macronix MX69V28F64 16 MB闪存,基于MCP封装的存储器,是一种包含了NOR和SRAM的闪存,这在手环手机这种移动设备中经常使用,优点是体积小,可以减小PCB的尺寸。这个闪存用的439的FSMC接口驱动。
黄圈:InvenSense MPU-6500陀螺仪/加速度计,用439的I2C接口驱动。
绿圈:博通BCM4334WKUBG芯片,支持802.11n,蓝牙4.0+HS以及FM接收芯片,用439的SDIO或者SPI接口驱动。
显示:1.84”可弯曲屏幕(Super AMOLED),432 x 128像素。触摸部分用439的I2C接口驱动,OLED显示部分用LTDC接口驱动。
表格 4‑1 三星Gear Fit 和野火STM32f103“指南者”资源对比
| 资源 | 三星Gear Fit | 指南者 |
| ------------ | --------------------------------------------- | --------------------------------------- |
| CPU | STM32F439ZIY6S,WLCSP143封装 | STM32F103VET6,LQPF100 封装 |
| 存储 | NOR+SRAM 16MB,FSMC接口 | 串行FLASH 16MB ,SPI 接口 |
| 显示 | 1.84寸的 AMOLED,RGB接口,LTDC驱动 | 3.2寸电阻屏,FSMC接口 |
| 陀螺仪 | MPU6050,I2C接口 | 可外接MPU6050模块,I2C接口 |
| 无线通信 | 蓝牙:博通BCM4334,SDIO或者SPI接口 | WIFI:ESP8266,UART接口 |
指南者开发板上还板载了EEPROM,USB转串口,蜂鸣器,LED,普通按键,电容按键等外设资源,还可以扩展VS1053 MP3模块,W5500以太网模块,利用这些可以充分的学习STM32F103VET6这个芯片。
在板子上面,还可以跑系统ucosiii,学习图形界面emwin。
# STM32怎么选型
## STM32分类
STM32有很多系列,可以满足市场的各种需求,从内核上分有Cortex-M0、M3、M4和M7这几种, 每个内核又大概分为主流、高性能和低功耗。具体的见下图。
单纯从学习的角度出发,可以选择F1和F4,F1代表了基础型,基于Cortex-M3内核,主频为72MHZ,F4代表了高性能,基于Cortex-M4内核,主频180M。
之于F1,F4(429系列以上)除了内核不同和主频的提升外,升级的明显特色就是带了LCD控制器和摄像头接口,支持SDRAM,这个区别在项目选型上会被优先考虑。
STM8和STM32分类。
| CPU位数 | 内核 | 系列 | 描述 |
| ------- | ------------ | --------- | ------------------------ |
| 32 | Cortex-M0 | STM32-F0 | 入门级 |
| 32 | Cortex-M0 | STM32-L0 | 低功耗 |
| 32 | Cortex-M3 | STM32-F1 | 基础型,主频72M |
| 32 | Cortex-M3 | STM32-F2 | 高性能 |
| 32 | Cortex-M3 | STM32-L1 | 低功耗 |
| 32 | Cortex-M4 | STM32-F3 | 混合信号 |
| 32 | Cortex-M4 | STM32-F4 | 高性能,主频180M |
| 32 | Cortex-M4 | STM32-L4 | 低功耗 |
| 32 | Cortex-M7 | STM32-F7 | 高性能 |
| 8 | 超级版6502 | STM8S | 标准系列 |
| 8 | 超级版6502 | STM8AF | 标准系列的汽车应用 |
| 8 | 超级版6502 | STM8AL | 低功耗的汽车应用 |
| 8 | 超级版6502 | STM8L | 低功耗 |
## STM32 命名方法
野火F103指南者用的型号STM32F103VET6来讲解下STM32的命名方法。
| 字段 | 标识 | 含义说明 |
| ------------ | ---- | -------- |
| 家族 | STM32 | 32bit的MCU |
| 产品类型 | F | 基础型 |
| 具体特性 | F | 基础型 |
| 引脚数目 | V | 100pin;其他常用:C=48pin,R=64pin,V=100pin,Z=144pin,B=208pin,N=216pin |
| FLASH大小 | E | 512KB;其他常用:C=256KB,E=512KB,I=2048KB |
| 封装 | T | QFP封装,最常用封装 |
| 温度等级 | 6 | A级,温度范围:-40~85℃ |
更详细的命名方法如下:

## 选择合适的MCU
了解了STM32的分类和命名方法之后,就可以根据项目的具体需求先大概选择哪类内核的MCU,普通应用,不需要接大屏幕的一般选择Cortex-M3内核的F1系列,如果要追求高性能,需要大量的数据运算,且需要外接RGB大屏幕的则选择Cortex-M4内核的F429系列。
明确了大方向之后,接下来就是细分选型。
先确定引脚,引脚多的功能就多,价格也贵,具体得根据实际项目中需要使用到什么功能,够用就好。
确定好了引脚数目之后再选择FLASH大小,相同引脚数的MCU会有不同的FLASH大小可供选择,这个也是根据实际需要选择,程序大的就选择大点的FLASH。
要是产品一量产,这些省下来的都是钱。有些月出货量以KK(百万数量级)为单位的产品,不仅是MCU,连电阻电容能少用就少用,更甚者连PCB的过孔的多少都有讲究。
## 如何分配原理图IO
在画原理图之前,一般的做法是先把引脚分类好,然后才开始画原理图,引脚分类具体见如下表
| 分类 | 引脚/信号 | 说明 |
| ---- | ---- | ---- |
| 电源 | VBAT、VDD/VSS、VDDA/VSSA、VREF+/VREF- 等 | 供电、模拟电源、参考电压相关引脚 |
| 晶振IO | 主晶振IO、RTC晶振IO | 外部高速主晶振、RTC低速晶振引脚 |
| 下载IO | JTMS、JTCK、JTDI、JTDO、NJTRST | JTAG调试下载引脚 |
| BOOT IO | BOOT0、BOOT1 | 配置单片机启动方式 |
| 复位IO | NRST | 外部复位引脚 |
| GPIO(复用功能) | I2C、SPI、SDIO、FSMC、DCMI 等总线引脚 | 外设专用总线,器件必须接对应复用IO |
| GPIO(普通) | 通用GPIO | 用于LED、蜂鸣器、按键等普通外设 |
| 剩余IO | 预留GPIO | 根据项目需求选择引出或者不引出 |
要想根据功能来分配IO,那就得先知道每个IO的功能说明,可以从官方的数据手册里面找到,一个是参考手册(英文叫Reference manual),另外一个是数据手册(英文叫Data Sheet)。
| 手册类型 | 主要内容 | 说明 |
| ---------- | ---------- | ---- |
| 参考手册 | 片上外设的功能说明和寄存器描述 | 对片上每一个外设的功能和使用做了详细的说明,包含寄存器的详细描述。编程的时候需要反复查询这个手册。 |
| 数据手册 | 功能概览 | 主要讲这个芯片有哪些功能,属于概括性的介绍。芯片选型的时候首先看这个部分。 |
| 数据手册 | 引脚说明 | 详细描述每一个引脚的功能,设计原理图的时候和写程序的时候需要参考这部分。 |
| 数据手册 | 内存映射 | 讲解该芯片的内存映射,列举每个总线的地址和包含有哪些外设。 |
| 数据手册 | 封装特性 | 讲解芯片的封装,包含每个引脚的长度宽度等,我们画PCB封装的时候需要参考这部分的参数。 |
数据手册主要用于芯片选型和设计原理图时参考,参考手册主要用于在编程的时候查阅。官方的这两个文档可以从官方网址里面下载:[](https://www.stmcu.com.cn/Product/pro_detail/STM32F103/design_resource)
在数据手册中,有关引脚定义的部分在“Pinouts and pin description”这个小节中


