配套资料为野火霸道V2
初识 STM32
4.1 什么是 STM32 STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示 32 位,合起 来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以 说是最璀璨的新星,它受宠若娇,大受工程师和市场的青睐,无芯能出其右。
4.1.1 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 的出现就是一种趋势,一种潮流,我们要做的就是搭上这 趟快车,让自己的技术更有竞争力。
MCU是Microcontroller Unit的缩写,中文翻译为微控制器。它是一种集成了处理器核心、存储器和各种输入输出接口的集成电路芯片,用于控制电子设备的运行。单片机是MCU的一种,指的是在一个芯片上集成了微处理器、存储器和各种接口电路的集成电路。因此,可以说MCU是单片机的一种。
4.2 STM32 能做什么
STM32 属于一个微控制器,自带了各种常用通信接口,比如 USART、I2C、SPI 等,可接非常多 的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影, 比如智能手环,微型四轴飞行器,平衡车、移动 POST 机,智能电饭锅,3D 打印机等等。下面我 们以最近最为火爆的两个产品来讲解下,一个是手环,一个是飞行器。
4.2.1 智能手环
图 4‑1 三星 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“指南者”资源对比
闪存是一种非易失性存储器,它可以实现数据的快速读写操作。闪存通常用于存储程序代码、操作系统、固件以及其他数据。闪存具有快速的读取速度和低功耗的特点,适合用于存储需要频繁读取和写入的数据。常见的闪存类型包括NAND闪存和NOR闪存,它们在存储结构和使用场景上有所不同。闪存广泛应用于各种电子设备中,如手机、平板电脑、相机、固态硬盘等。
资源 | 三星 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。如果功夫所至,学完之后,自己都可以做一个类似 Gear Fit 这样的手环。可很多 人又会说,Gear Fit 涉及硬件和软件,整个系统这么复杂,并不是一个人可以完成的。说的没错, 我们可以做不了,但是我们的能力可以无限接近,多学点,技多不压身嘛。
5.2.2 微型四轴飞行器
现在无人机非常火热,高端的无人机用 STM32 做不来,但是小型的四轴飞行器用 STM32 还是绰 绰有余的。如图微型四轴飞行器 所示飞行器的基本都可以用 STM32 搞定。
上面的是属于产品,如果想自己 DIY,可以在入门 STM32 之后,买一本飞行器 DIY 的书,边做 边学。入门级的书籍推荐《四轴飞行器 DIY—基于 STM32 微控制器》,见图四轴飞行器 DIY_ 基 于 STM32 微控制器。
5.3 STM32 怎么选型
5.3.1 STM32 分类
STM32 有很多系列,可以满足市场的各种需求,从内核上分有 Cortex-M0、M3、M4 和 M7 这几 种,每个内核又大概分为主流、高性能和低功耗。具体的见表格 STM8 和 STM32 分类。 单纯从学习的角度出发,可以选择 F1 和 F4,F1 代表了基础型,基于 Cortex-M3 内核,主频为 72MHZ,F4 代表了高性能,基于 Cortex-M4 内核,主频 180M。 之于 F1,F4(429 系列以上)除了内核不同和主频的提升外,升级的明显特色就是带了 LCD 控制 器和摄像头接口,支持 SDRAM,这个区别在项目选型上会被优先考虑。但是从大学教学和用户 初学来说,还是首选 F1 系列,目前在市场上资料最多,产品占有量最多的就是 F1 系列的 STM32。
5.3.2 STM32 命名方法 这里我们以野火 F103 霸道用的型号 STM32F103ZET6 来讲解下 STM32 的命名方法
有关更详细的命名方法见图STM8和STM32命名方法
5.3.3选择合适的MCU
了解了STM32的分类和命名方法之后,就可以根据项目的具体需求先大概选择哪类内核的MCU,普通应用,不需要接大屏幕的一般选择Cortex-M3内核的F1系列,如果要追求高性能,需要大量的数据运算,且需要外接RGB大屏幕的则选择Cortex-M4内核的F429系列。
MCU是Microcontroller Unit的缩写,中文意思是微控制器单元。MCU是一种集成了处理器核、存储器、输入输出接口和定时器等功能的单芯片微型计算机系统,通常用于控制各种电子设备和系统。
明确了大方向之后,接下来就是细分选型,先确定引脚,引脚多的功能就多,价格也贵,具体得根据实际项目中需要使用到什么功能,够用就好。确定好了引脚数目之后再选择FLASH大小,相同引脚数的MCU会有不同的FLASH大小可供选择,这个也是根据实际需要选择,程序大的就选择大点的FLASH,要是产品一量产,这些省下来的都是钱啊。有些月出货量以KK(百万数量级)为单位的产品,不仅是MCU,连电阻电容能少用就少用,更甚者连PCB的过孔的多少都有讲究。项目中的元器件的选型的水深的很,很多学问。
5.3.3.1如何分配原理图IO
在画原理图之前,一般的做法是先把引脚分类好,然后才开始画原理图,引脚分类具体见表格画原理图时的引脚分类。
5.3.3.2如何寻找IO的功能说明
要想根据功能来分配IO,那就得先知道每个IO的功能说明,这个我们可以从官方的数据手册里面找到。在学习的时候,有两个官方资料我们会经常用到,一个是参考手册(英文叫Referencemanual),另外一个是数据手册(英文叫Data Sheet)。两者的具体区别见表格参考手册和数据手册的内容区别。
一句话概括:数据手册主要用于芯片选型和设计原理图时参考,参考手册主要用于在编程的时候查阅。
在数据手册中,有关引脚定义的部分在Pinouts and pin description这个小节中,具体定义见表格数据手册中对引脚定义。5.3.3.3开始分配原理图IO
比如我们的F103“霸道”使用的MCU型号是STM32F103ZET6,封装为LQFP144,我们在数据手册中找到这个封装的引脚定义,然后根据引脚序号,一个一个复制出来,整理成excel表。具体整理方法按照表格画原理图时的引脚分类画原理图时的引脚分类即可。分配好之后就开始画原理图。5.3.3.3开始分配原理图IO
比如我们的F103“霸道”使用的MCU型号是STM32F103ZET6,封装为LQFP144,我们在数据手册中找到这个封装的引脚定义,然后根据引脚序号,一个一个复制出来,整理成excel表。具体整理方法按照表格画原理图时的引脚分类画原理图时的引脚分类即可。分配好之后就开始画原理图。
5.3.4 PCB哪里打样
第6章什么是寄存器
6.1什么是寄存器
我们经常说寄存器,那么什么是寄存器?这是我们本章需要讲解的内容,在学习的过程中,大家带着这个疑问好好思考下,到最后看看大家能否用一句话给寄存器下一个定义。
6.2 STM32长啥样
我们开发板中使用的芯片是144pin的STM32F103ZET6,具体见图STM32F103ZET6实物图。这个就是我们接下来要学习的STM32,它将带领我们进入嵌入式的殿堂。
芯片正面是丝印,ARM应该是表示该芯片使用的是ARM的内核,STM32F103ZET6是芯片型号,后面的字应该是跟生产批次相关,最上面的是ST的LOGO。
芯片四周是引脚,左下角的小圆点表示1脚,然后从1脚起按照逆时针的顺序排列(所有芯片的引脚顺序都是逆时针排列的)。开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作,通过做实验的方式来学习STM32芯片的各个资源。开发板是一种评估板,板载资源非常丰富,引脚复用比较多,力求在一个板子上验证芯片的全部功能。STM32F103ZET6正面引脚图
6.3芯片里面有什么
我们看到的STM32芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设就如同电脑上的CPU与主板、内存、显卡、硬盘的关系。
STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计。ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如GPIO、USART(串口)、I2C、SPI等都叫做片上外设。具体见图STM32芯片架构简图。
芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4个,具体见图STM32F10xx系统框图。为了方便理解,我们都可以把驱动单元理解成是CPU部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。
6.3.1 ICode总线
ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中,内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
6.3.2驱动单元
6.3.2.1 DCode总线
DCode中的D表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用C语言中的const关键字修饰,是放到内部的FLASH当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
6.3.2.2系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。
6.3.2.3 DMA总线
DMA总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的FLASH。因为数据可以被Dcode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
6.3.3被动单元
6.3.3.1内部的闪存存储器
内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode总线来取里面的指令。
6.3.3.2内部的SRAM
内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM。内核通过DCode总线来访问它。
6.3.3.3 FSMC
FSMC的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAM,NAND-FLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。
6.3.3.4 AHB到APB的桥
从AHB总线延伸出来的两条APB2和APB1总线,上面挂载着STM32各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI这些外设就挂载在这两条总线上,这个是我们学习STM32的重点,就是要学会编程这些外设去驱动外部的各种设备。
6.4存储器映射
在图STM32F10xx系统框图中,被控单元的FLASH,RAM,FSMC和AHB到APB的桥(即片上外设),这些功能部件共同排列在一个4GB的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们(通过C语言对它们进行数据的读和写)。
6.4.1存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见图存储器映射。如果给存储器再分配一个地址就叫存储器重映射。