2.问题分析
从上图可以了解到,实际上这里所定义的 Sector 的大小为 128Bytes,也就是 STM32L073 的 Page,所以这里的 Sector 定义
与 STM32L073 的参考手册定义的 Sector 是不一样的,不要造成误解。在 RM0367 中,每 128Bytes 为 1 个 Page,每 32 个
Page 才是 1 个 Sector。所以不要误会就行了。在这个 Mapping 窗口中,也可以看到地址 0x08003C00 之前的空间为 Read
only,也就是 Bootloader 所处的空间为只读,以避免对这部分代码的重写。而后面的空间,也就是用户代码所处的空间为
Read/Write/Erase。
这些信息是从哪里来的呢?其实它来自于 usbd_dfu_flash.c 里边定义的描述符 FLASH_DESC_STR,如下:
- #define FLASH_DESC_STR "[url=home.php?mod=space&uid=2283616]@internal[/url] Flash /0x08000000/120*128 a,1416*128 g"
来解释一下这个描述符的内容:0x08000000 为起始地址。“a”代表的是 Read-only,“g”代表 Read/Write/Erase。也就是说,“a”所指明的区域为
Bootloader 的空间,“g”所指明的区别为用户代码空间。大小由前面的数字决定,乘号“*”前面的为 Sector 的个数,后面
的为 Sector 的大小,这里的意思就是从 0x08000000 开始,前面 120 个 Sector(每个 Sector 为 128 字节)为 Read-only,后
面 1416 个 Sector(每个 Sector 为 128 字节)为 Read/Write/Erase。
|