
一、存储器映射4 c R( \( g# R0 R* g' E 0 ^- ^2 Q* _" {& G 1、统一编址,程序存储器、数据存储器、外设寄存器组织在一个4GB的地址空间。. {9 ~- j2 |( [- ` 2、小端格式9 k! @# A% ?! G. _1 p7 w+ W: ~! e& P9 e 8 \0 F. [ b* Z7 g, z) @, g6 _ 3、映像(stm32f107,256KB产品)4 }4 g( h9 c4 a/ @! } 5 l% p2 j( @/ V+ b1 a3 r 可以看到,所谓的256KB闪存,是指主存储,片上FLASH如下图所示: . W( N0 g; e6 x2 i/ T f2 U ![]() A$ n) c) M" z8 r" ~& N9 G) o 介绍了片上的资源后,来看他们的地址映像。芯片将4GB的空间,划分为8个512MB的块(block),这些块有些是整块不用的,芯片对地址的安排可以参考数据手册,memory mapping章节中的那个图。只有block1、2、3、7是使用的。$ ^9 W# D" P0 N( R 3 f4 E8 _: }2 m$ B5 w) Z. r 地址中block7是核内的外设对应的地址,block2是其他外设对应的地址。block1的低地址64KB是片上SRAM,block0则如下图# s% h5 b$ b( B0 K. W ![]() ( Z3 p; S2 r0 P4 @4 T V option bytes即是选项字节;system memory就是系统存储,也即片上ROM;这两部分就是所谓信息块。Flash就是指主存储,有256KB。: W8 ]* W+ t( v! H$ F) Q 再往下看alias to flash or system memory.....这个区域256KB就是启动开始的区域。这个区域并没有一个自己的存储器,只是根据BOOT0、BOOT1的接法来选择哪个存储器映射到这个地址上。如下图3 n" |% |8 l/ m; S , e: n+ Z+ M3 x; m ![]() 选择用户闪存启动,是典型的做法;选择系统存储器,则在ST烧写进去的自举程序引导下,通过USART1下载程序;选择从SRAM执行代码则方便调试,比较快。 6 m6 W: l' ]. ^6 ~. _ 二、复位: S& b+ w8 X7 w" S0 c, B+ G z! N& c ( e s* O7 N( q/ x CM3将复位视作异常,优先级最高的异常。 # E; n& `* `6 |( m& _' p: d stm32f1有三种复位:系统复位、电源复位、备份区复位。7 b2 ?4 @! o8 q% I; u' { 3 w7 k" I! {* i9 ~ 前两种是真正的复位,对他的响应由硬件完成,这个响应对软件流的影响是这样的:程序指针指向0x0000 0004,这个单元存储的是复位服务子程序(或者汇编叫子过程),同时从0x0000 0000获取堆栈顶的地址。不同的复位类型还有对其他寄存的不同复位方式,这就完成了复位。而备份区复位则不然,The backup domain has two specific resets that affect only the backup domain(参考手册6.1 reset章节)4 J% E5 W- o) i9 O6 z; j( P$ z % Q/ d: J; g9 Z# |# f 零地址存放的是堆栈顶的地址,之后就是以Reset_Handler打头的向量表。 & r3 i" ?$ {! V: [7 X( [ 上面所说的向量表的存储从零地址开始,这是缺省的情况,可以通过NVIC的一个寄存器来重定向向量表。(权威指南7.3向量表)# ?7 A9 e) d4 e" @( S, g* V 三、flash读写
没仔细看,但能实现读写,不过用这两个函数的话,有一个bug,记下来回头研究。( x h. B2 ]" ~, z flash必须先擦再写,flash_write以后,再写确实不行了,但再次上电,就能在同一个地址写了。而且flash确实烧写好了,掉电后数据不会消失 5 D- l' X8 W5 F- L+ D7 s7 b * U; f2 M9 Q4 a( r- H 0 a4 U7 Y& e5 q( L! p8 r# t* z |
【经验分享】STM32F1 GPIO工作原理
【经验分享】STM32F0xx_DMA收发USART数据配置详细过程
【经验分享】STM32F1和STM32F4 区别
【经验分享】STM32F1系列之常用外设说明
【经验分享】STM32介绍
【经验分享】STM32F1x系列——Flash 模拟 EEPROM
【经验分享】STM32F1在MDK下新建标准库函数工程
【经验分享】stm32F1 us延时函数
【经验分享】STM32F1之定时器
【经验分享】STM32 system_stm32f10x.c文件分析