stm32基础知识

stm32主要由内核和片上外设组成。与电脑相比,内核就当于cpu,外设相当于主板、内存、显卡、硬盘。
片上外设有GPIO、USART、I2C、SPI。
stm32基础知识_第1张图片
驱动单元
ICode总线 内核通过ICode总线来粗去存放在flash中的指令
DCode总线 常量放在flash中,变量放在SRAM中
System总线 用来访问外设的寄存器
DMA总线 主要用来传输数据。DCode和DMA都能用来传输数据,在取数的时候通过总线矩阵来决定哪个总线取数
被动单元
闪存存储器(flash) 用来存放编写好的程序
SRAM 程序的变量,堆栈等开销
FSMC 用来扩展静态内存
AHB到APB的桥

存储器映射
被动单元Flash、RAM、FSMC、和AHB到APB的桥,这些功能部件共同排列在一个4GB的地址空间中。在编程的hi后,可以通过地址找到它们,进而操作它们。在这4GB的地址空间中,ARM将它平均分成了8个块,每个块也规定了用途。
stm32基础知识_第2张图片

寄存器映射
存储器本身不具有地址信息,它的地址是由芯片厂商或者用户分配,给存储器分配地址的过程成为存储器映射

在存储器Block2这块区域上设计的是片上外设,以4个字节为一个单元,共32位,每一个单元对应着不同的功能。如果我们想驱动这些外设工作,我们可以找到每个单元的起始地址,然后通过C语言指针操作的方式来访问这些单元。但是这种方式不断不好记还容易出错,因此,我们可以根据每个单元的功能的不同,以功能为名给这个内存单元取以一个别名,这个别名就是经常说的寄存器。

比如,我们找到GPIOB端口的输出数据寄存器ODR的地址是0x40010C0C,ODR寄存器是32位,低16位有效,对应16个外部IO,写0/1对应的IO输出低/高电平。0x40010C0C在我们看来是GPIOB端口ODR的地址,但是在编译器看来,这只是一个普通的变量,是一个立即数,要想让编译器也认为是指针,得进行强制类型转换,把它转换成指针,即(unsigned int *)0x40010C0C,然后再对这个指针进行*操作。

寻址空间
0x0000000~0xFFFFFFFF=2^33 = 2 ^(3+10+10+10) = 4G

各种单位运算关系
1字节 = 8bit
1字 = 4字节

你可能感兴趣的:(stm32,单片机,arm)