目录
一、初识STM32
1.什么是STM32
STM32,从字面上来理解,ST 是意法半导体,M 是 Microelectronics 的缩写,32 表示32 位,合起来理解,STM32 就是指 ST 公司开发的 32 位微控制器。在如今的 32 位控制器当中,STM32 可以说是最璀璨的新星。
STM32F103 采用的是 Cortex-M3 内核,内核即 CPU,由 ARM 公司设计。ARM 公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商(SOC)如 ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片,这些内核之外的部件被称为核外外设或片上外设。如 GPIO、USART(串口)、I2C、SPI 等都叫做片上外设。具体下图。
2.STM32的应用场景
STM32系列基于专门要求高性能,低成本,低功耗的嵌入式应用专门设计的ARM Cortex-M0,Cortex-M1,Cortex-M3,Cortex-M4,Cortex-M7等。其中Cortex-M0主打的是低功耗和混合信号的处理,M3主要用来替代ARM7,重点侧重能耗和性能的均衡,而M7则重点放在高性能控制运算领域。
STM32 属于一个微控制器,自带了各种常用通信接口,比如 USART、I2C、SPI 等,可接非常多的传感器,可以控制很多的设备。现实生活中,我们接触到的很多电器产品都有 STM32 的身影,比如智能手环,微型四轴飞行器,平衡车、移动 POST 机,智能电饭锅,3D 打印机等等。
3.STM32产品命名规则
以STM32F103C8T6为例:
(1) STM32:表示32位MCU;
(2) F103:表示基础型;
(3) C:表示芯片上含48个引脚;
(4) 8:表示闪存容量为64K字节;
(5) T:表示QFP封装;
(6) 6:表示工作温度范围在-40°C到85°C;
二、STM32F103C8T6介绍
1.简要说明
STM32F103C8T6是一款基于ARM Cortex-M内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。
其中, Cortex-M3摒弃了冯· 诺依曼结构(普林斯顿结构),采用了将指令存储和数据存储分开的 的哈佛结构(Harvard Architecture ),这样一来Cortex-M3同时拥有了独立的32-bit指令总线和32-bit数据总线,数据访问将不再占用指令总线,同时读取指令和数据后提升了MCU运行速度。冯诺依曼和哈弗结构的宏观对比如下图所示:
2.基本参数
参数名 | 参数详情 |
---|---|
类别 | 集成电路(IC) |
家族 | 嵌入式-微控制器 |
总线宽度 | 32-位 |
速度 | 72MHz |
外围设备 | DMA,电机控制PWM,PWM,温度传感器 |
输入/输出数 | 37 |
程序存储器容量 | 64KB (64K x 8) |
程序存储器类型 | FLASH |
RAM容量 | 20K x 8 |
电压-电源(Vcc/Vdd) | 2 V ~ 3.6 V |
模数转换器 | A/D 10x12b |
振荡器型 | 内部 |
工作温度 | -40°C ~ 85°C |
封装/外壳 | 48-LQFP |
3.最小系统板
【产品介绍】
该系统板是基于STM32F103C8T6为主芯片的ARM核心板,有如下特点:
1、板载了基于MCU的最基本电路,如晶振电路、USB电源管理电路和USB接口等。
2、核心板引出了所有的I/O口资源。
3、带有SWD仿真调试下载接口,该接口最少需要3根线就可以完成调试下载任务,相比传统的JTAG调试有不少的好处
4、外形尺寸只有传统的DIP40封装(例如AT89S52)的大小,目前还未在淘宝上发现比我们更小的同规格的核心板。
5、使用了目前智能手机所使用的Mirco USB接口,使用方便,可做USB通讯和供电。
6、针对STM32 RTC不起振的问题,我们采用了官方建议的低负载RTC晶振方案,并使用了爱普生品牌的晶振,而没有使用廉价的圆柱晶振。
7、配有优质的1*40/2.54mm间距的单排排针,确保导电接触优良,方便用户将核心板放置到标准的的万用板或者面包板上。排针默认不焊接,用户可以根据自己的需要选择焊接方向。
三、STM32F103系列芯片寄存器映射
1.什么是寄存器
寄存器是中央处理器内的组成部分,是有限容量的高速存贮部件,可用来暂存指令、数据、地址等。
简单来说,寄存器用来存放东西的地方,类似于行李寄存,只不过,寄存器存放的不是行李,而是指令、数据、地址等。不同的·数据会存放在不同的寄存器中,通过地址区分不同的寄存器。
2.什么是存储器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,如下图所示。如果给存储器再分配一个地址就叫存储器重映射。
在存储器 Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共 32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。
我们可以找到每个单元的起始地址,然后通过 C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
3.确定寄存器地址的方法
片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2 和 AHB 挂载高速外设。
相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中 APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。
(1)确定GPIOx总线基地址
总线名称 | 总线基地址 | 相对外设基地址的偏移 |
APB1 | 0x4000 0000 | 0x0 |
APB2 | 0x4001 0000 | 0x0001 0000 |
APB | 0x4001 8000 | 0x0001 8000 |
上述表格的“相对外设基地址偏移”即该总线地址与“片上外设”基地址 0x4000 0000的差值。
(2)找到GPIOx外设基地址
总线上挂载着各种外设,这些外设也有自己的地址范围,特定外设的首个地址称为“XX 外设基地址”,也叫 XX 外设的边界地址。
在此,以 GPIO 外设来讲解外设的基地址,GPIO 属于高速的外设 ,挂载到APB2 总线上:
外设名称 | 外设基地址 | 相对APB2总线地址的偏移 |
GPIOA | 0x0000 0800 | 0x0 |
GPIOB | 0x4001 0C00 | 0x0000 C000 |
GPIOC | 0x4001 0000 | 0x0001 0000 |
GPIOD | 0x4001 1400 | 0x0001 4000 |
GPIOE | 0x4001 1800 | 0x0001 8000 |
GPIOF | 0x4001 C000 | 0x0001 C000 |
G |