佛山住房和城乡建设厅网站,wordpress图片外链转内链,页面排版布局,做旅行社网站文章目录 前言STM32F105的内部ROM分布STM32F10x的闪存擦写解锁FPECMain FLASH 的编写 main Flash的擦除注意点 前言
在通过OTA的方式对设备进行升级#xff0c;若在使用内部FLASH装载固件程序的方式下#xff0c;需要擦写 内部FLASH 从而实现把新的固件程序写入到 内部FLASH… 文章目录 前言STM32F105的内部ROM分布STM32F10x的闪存擦写解锁FPECMain FLASH 的编写 main Flash的擦除注意点 前言
在通过OTA的方式对设备进行升级若在使用内部FLASH装载固件程序的方式下需要擦写 内部FLASH 从而实现把新的固件程序写入到 内部FLASH。
参考文档ST的闪存编程文档
STM32F105的内部ROM分布 F105属于互联型设备其内部的主存储器ROM有256KB。 这256KB 由 128页 每页2KB的页面组成
Information block 分为两个部分System memory 和 Option bytes
System memory 这个部分存储了是STM32官方系统的bootloader程序在通过选择对应的BOOT模式可以进入该bootloader程序该bootloader程序是通过 把USART1的传输过来的程序 写入到Main memory中。 在互联型产品中bootloader程序 还可以读取 USART2(重映射)等接口从而烧录程序。Option bytes 有两种保护方式①写包含②读保护
注意 1.只有在写FLASH完毕后才能正确的读取FLASH。在 写FLASH时读取FLASH将会造成写失败 2.只有在内部高速晶振开启时才能写入/擦除内部FLASH。 3.在低功耗模式下对FLASH的任何访问将被中止。
STM32F10x的闪存擦写
STM32F10x的闪存擦写由 FPEC 控制。
FPEC指Flash program and erase controllerFPEC由7个32位的寄存器组成。 注意只有CPU没有访问 正在操作的FLASHCPU将不会因操作FLASH而阻塞。
解锁FPEC
在复位后FPEC是被保护着。
需要往 FLASH_KEYR 寄存器写入固定的值才可解开FPEC的锁。
如果这个值写错了那么只有在下一次复位后才能再次接口FPEC的锁。
Main FLASH 的编写
每次只能往main flash写入16位数据。
在写入main flash的指定地址时若该地址并未被擦除则FLASH_SR的 PGERR 将会被置位。 若该地址是写保护的(通过 FLASH_WRPR 设置)则FLASH_SR的 WRPRTERR 将会被置位。
标志的擦写 main Flash的步骤如下
main Flash的擦除
在编写 main Flash 之前需要先擦除。
擦除 main Flash 的方式有两种页擦除全擦除。 页擦除页擦除是擦除 main Flash的一个页面。
map 0x40000000,0x40080000 read write注意点
在使用stm32自带的flash保存数据时候如下特点必须知道
1、必须是先擦除一个扇区才能写入
2、读数据没有限制
3、写数据必须是偶数2字节、4字节同时写入地址以一定要考虑字节对齐
4、一般都是在最后几页进行数据保存的确保数据量不超过flash的的大小比如f103大容量是2k字节其实一个扇区只能写入1k数量的2字节的数据。
http://eeskill.com/article/id/294795、写入数据时采用大端模式如想往 0x0800 0000写入0x31 0x32 0x33 0x34则写入的数据是uint32_t data 0x31 0x328 0x3316 0x3424;即写入0x34333231
6、一旦写入数据无论你写的是FLASH擦除后的默认值0xff还是其他值若在不擦除的情况下再次往该地址写数据必定失败。
7、若遇到写入 或 擦除失败的清空需要清除标志位后才能再继续写入或擦除。
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
flash_staFLASH_ErasePage(UPDAFLAG_FLASH_56K);