1. 文档准备
做嵌入式开发的第一步就是了解主芯片,了解STM32F407主要要关注几个文档:
1. stm32F407芯片手册
2. stm32F407参考手册
3. Arm Cortex-M4数据手册
4. Arm Cortex-M4技术手册
stm32的文档可以去stm32的官网下载: STM32F407ZG - 带DSP和FPU的高性能基础系列ARM Cortex-M4 MCU,具有1 MB Flash、168 MHz CPU、ART加速器、以太网和FSMC - STMicroelectronicsSTM32F407ZG - 带DSP和FPU的高性能基础系列ARM Cortex-M4 MCU,具有1 MB Flash、168 MHz CPU、ART加速器、以太网和FSMC, STM32F407ZGT6, STM32F407ZGT7, STM32F407ZGT6J, STM32F407ZGT6TR, STMicroelectronicshttps://www.st.com/zh/microcontrollers-microprocessors/stm32f407zg.html#documentationARM相关的文档可以在ARM官网下载:
nullhttps://developer.arm.com/documentation?_ga=2.29971583.177163753.1633836460-549852162.1603547607&_gac=1.114635125.1633836460.Cj0KCQjw-4SLBhCVARIsACrhWLWR6ZBn-fN8GXNFr50IGXSltca9OB3wkkiSbDvmQhxcd9LHGwOzyDYaAgi9EALw_wcB#sort=relevancy&f:@navigationhierarchiesproducts=[IP%20Products,Processors,Cortex-M,Cortex-M4]
2. stm32系统架构
了解STM32的系统架构主要看手册里面的下面一张图:
这张图很清楚的描述了STM32F407内部各个外设和ARM的连接,一定要好好看看这张图,对于后面的调试很有帮助。从这张图里我们大概可以总结如下内容:
1. STM32F407使用的时ARM Cortex-M4的核心,有硬件浮点计算单元FPU(这个主要在编译的时候要设置硬件FPU的参数,这样我们的代码编译成汇编语言的时候就会用到这个硬件单元,可以加速浮点数的运算),最大频率168MHz
2. ARM Cortex-M4的D-BUS,I-BUS,S-BUS, Ethernet MAC, USB OTG HS, DMA2, DMA1,AHB3, SRAM, AHB2, AHB1都挂在了AHB Bus-matrix的模块上,那么什么是AHB Bus-matrix呢?主要参考如下图片:
这样矩阵设计的目的就是为了加快外设的访问,不同控制器可以同时访问不同的外设
3. 可以看到GPIO控制器挂在了APB1总线上,同时可以看大哪些外设控制器挂在了哪个APB总线上。
3. 内存映射
主要参考stm32f407中的这张图:
这样我们就可以知道不同的地址段的含义,如flash的起始地址为0x08000000, 我们的链接文件会把中断向量表和代码放在这个这个区间。
还有就是可以看到SRAM,CCM,AHB, APB等的地址空间,从而知道对应的挂在这些总线上的外设控制器的地址空间。
这个只是CPU的大致寻址空间,如果需要更细的地址空间,如GPIO寄存器地址,可以参考stm32的数据手册。