前言
无论是对STM32还是ZYNQ的开发,基于库函数的开发都有着寄存器开发无法比拟的便捷易懂的优势,但是基于寄存器的开发是嵌入式开发最基础,最底层的技术,了解什么是寄存器、什么是地址映射以及如何基于寄存器进行开发,有着十分重要的意义。
本文讲一下个人的认识,从stm32的片上外设、地址映射、寄存器作用到库函数具体实现的操作,由下到上进行分析,供大家参考。
STM32架构与存储器映射
我们都知道STM32是ST公司基于ARM内核设计的,整体结构如图1所示。其中Cortex-M3就是ARM核,由ARM公司设计,其他诸如Flash、SRAM、ADC、GPIO等等都是ST公司设计,称为片上外设。
下面是STM32F103与STM32F407的系统结构图,两者表现方法不一样,放一起进行对比可以增加理解,图1中的总线矩阵与图2中的总线矩阵相对应。其中
- ICode(I总线)表示指令总线
- DCode(D总线)表示数据总线
- System(S总线)表示系统总线

图1.STM32F103结构

图2.STM32F407结构
我们知道芯片内部由许多存储器,通过修改读取存储器的数据即可实现对外设的控制以及数据的读取功能,但是存储器本身是没有地址信息的,这样我们就没办法准确在众多存储器中定位某一个存储器进行读写。因此,我们需要给每个存储器进行地址分配来实现对存储器的精确控制,这些地址是由芯片厂商或用户分配的,给存储器分配地址的过程就是存储器映射。如果给存储器再分配一个地址就叫存储器重映射。
Crotex-M3有32根地址线,所以它的寻址空间大小为2的32次方,即4GB。而这4GB地址如何分配,是ARM公司设计好的,共分了8块(block),每块512MB,每块具体功能如表1所示,详细地址分配如图3所示。其中,0x40000000到0x5FFFFFFF这512MB的地址分配给片上外设。

图3.存储器映射
| 序号 |

本文介绍了STM32的架构与存储器映射,详细讲解了寄存器的作用、地址分配、以及基于寄存器和库函数的开发过程,包括GPIO寄存器的操作和基于库函数的开发原理。
最低0.47元/天 解锁文章
3482

被折叠的 条评论
为什么被折叠?



