系统的认识STM32

本文介绍了STM32微控制器的基本概念,包括STM32的起源、分类、命名方法,以及学习资源。详细阐述了STM32的组成,如编程方法(寄存器编程和固件库编程)、芯片结构(内核、片上外设、总线系统),并重点讲解了存储器映射和寄存器映射的概念和实例。
摘要由CSDN通过智能技术生成

目录

一、初识STM32

二、STM32分类

三、STM32的命名方法

四、学习STM32配套资料

五、STM32组成

1. STM32编程方法

2.STM32芯片

3.芯片内部结构

(1)  ICode总线

(2)驱动单元

(3)被动单元

六、存储器映射

七、寄存器映射

1. 概念理解

2. 外设地址映射

(1)总线基地址

(2)外设基地址

(3)外部寄存器


一、初识STM32

        51单片机是嵌入式学习中一款入门级的经典MCU,它诞生于20世纪70年代,属于传统的8位单片机。但现在的市场产品竞争越来越激烈,对成本极其敏感,相应地对MCU的性能要求也更苛刻:更多功能,更低功耗,易用界面和多任务。基于这样的市场需求,ARM公司推出了其全新的基于ARMV7 架构的32位 Cortex-M3 微控制器内核。紧随其后,ST公司推出了基于 Cortex-M3 内核的MCU-STM32。STM32 凭借其产品线的多样化、极高的性价比、简单易用的库开发方式,迅速在众多 Cortex-M3 MCU中脱颖而出。

STM32,从字面上来理解,ST是指意法半导体公司,M是Microelectronics 的缩写,32表示32位,所以STM32就是指ST公司开发的32 位微控制器。它自带了各种常用通信接口,比如USART、SPI等,可连接非常多的传感器,也可以控制很多的设备。现实中应用范围广泛。

二、STM32分类

        STM32有很多系列,从内核上分有 Cortex-M0、M3、M4和M7这几种,每个内核又大概分为主流、高性能和低功耗

( 从学习的角度出发,可以选择F1和F4,F1代表了基础型,基于 Cortex-M3 内核,主频为72MHz;F4代表了高性能,基于 Cortex-M4 内核,主频180MHz )

三、STM32的命名方法

四、学习STM32配套资料

补充(数据手册引脚定义查看方法):

五、STM32组成

1. STM32编程方法

        有两种:一种是寄存器编程;另外一种是固件库编程,其中寄存器编程是基础,而固件库编程是在寄存器编程的基础上升级而来的一种易于学习和开发的编程方法。在学习8位或者16位单片机的时候,大多采用寄存器编程。

2.STM32芯片

        芯片正面是丝印,ARM表示该芯片使用的是ARM的内核,STM32F103V8T6是芯片型号,后面的字与生产批次相关,左下角的是ST的LOGO。

        芯片四周是引脚,左下角的小圆点表示引脚1,然后从引脚1起按照逆时针的顺序排列(所有芯片的引脚顺序都是逆时针排列的)。开发板中把芯片的引脚引出来,连接到各种传感器上,然后在STM32上编程(实际就是通过程序控制这些引脚输出高电平或者低电平)来控制各种传感器工作。

        开发板是一种评估板,板载资源非常丰富,引脚复用比较多,力求在一个板子上验证芯片的全部功能。

3.芯片内部结构

我们看到的STM32芯片是已经封装好的成品,主要由内核和片上外设组成。若与电脑类比,内核与外设的关系就如同电脑上的CPU与主板、内存、显卡、硬盘的关系。 STM32F103采用的是Cortex-M3内核,内核即CPU,由ARM公司设计。ARM公司并不生产芯片,而是出售其芯片技术授权。芯片生产厂商如ST,负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设,如GPIO、USART(串口)、I2C、SP等都叫作片上外设。

        芯片(指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个(可理解成CPU部分),被动单元也有4个(可理解成外设)

(1)  ICode总线

        l 表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在Flash中,内核要读取这些指令来执行程序就必须通过ICode总线,其专门用来取指

(2)驱动单元

①  DCode总线

        D表示Data,即数据,说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量是固定不变的,在C语言中用const关键字修饰,是放到内部的Flash当中的;变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM中。因为数据可以被DCode总线和DMA总线访问,为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线取数。

② System(系统)总线

        主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

③  DMA总线

        主要用来传输数据( 数据可以在某个外设的数据寄存器中,在SRAM中,也可以在内部的Flash中)。因为数据可以被DCode总线和DMA总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线取数。

(3)被动单元

① 内部的闪存存储器

        即Flash编写好的程序就放在这个地方,内核通过ICode总线来取里面的指令。

② 内部的SRAM

        即RAM,程序的变量、堆栈等的开销都基于内部的SRAM。内核通过DCode总线来访问它。

③  FSMC

        其英文全称为Flexible static memory controller,即灵活的静态的存储器控制器,是STM32F10xx中一个外设。通过FSMC,可以扩展内存,如外部的SRAM、NANDFlash和NORFlash。但我们要注意的一点是,FSMC只能扩展静态的内存,不能是动态的内存,比如SDRAM就不能扩展。

④ AHB到APB的桥

        从AHB总线延伸出来的两条APB2和APB1总线,上面挂载着STM32各种各样的特色外设。经常说的GPIO、串口、12C、SPl这些外设就挂载在这两条总线上。

六、存储器映射

        被动单元Flash、RAM、FSMC和AHB到APB的桥(片上外设)这些功能部件共同排列在一个4GB的地址空间内。在编程的时候,可以通过它们的地址找到它们,进而操作它们(通过C语言对它们进行数据的读和写)。

        存储器本身不具有地址信息,它的地址是由芯片厂商或用户分配,给存储器分配地址的过程称为存储器映射。如果给存储器再分配一个地址就叫存储器重映射

        在4GB的地址空间中,ARM粗线条地把它平均分成8个块,每块512MB,每个块也都规定了用途。芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,只用了其中的一部分

在这8个块里面,有3个块非常重要:Block0被设计成内部Flash,Block1被设计成内部RAM,Block2被设计成片上的外设

七、寄存器映射

1. 概念理解

        在存储器Block2这块区域,设计的是片上外设,它们以4个字节为一个单元,共32位,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C语言指针的操作方式来访问这些单元。但如果每次都是通过这种地址的方式来访问, 不仅不好记忆还容易出错,那么可以根据每个单元功能的不同, 以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的、有特定功能的内存单元取别名的过程就叫寄存器映射

        e.g. 我们找到GPIOB端口的输出数据寄存器ODR的地址是0x40010C0C,ODR寄存器是32位,低16位有效,对应16个外部1O,写0/1对应的lO输出低/高电平。我们通过C语言指针的操作方式,让GPIOB的16个IO都输出高电平。

2. 外设地址映射

(1)总线基地址

        片上外设区分为3条总线,根据不同的外设速度,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中APB1总线的地址最低,片上外设从这里开始,它也叫外设基地址

(2)外设基地址

总线上挂载着各种外设,他们也有自己的地址范围特定外设的首个地址称为“XX外设基地址”。以GPIO这个外设来讲解外设的基地址,GPIO属于高速的外设,挂载到APB2总线上。

(3)外部寄存器

        在XX外设的地址范围内,分布着的就是该外设的寄存器

        以GPIO外设为例,GPIO有很多寄存器,每一个都有特定的功能。每个寄存器为32位,占4个字节,在该外设的基地址上按照顺序排列,寄存器的位置都以相对该外设基地址的偏移地址来描述。以GPIOB端口为例。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值