FLASH编程过程
1.检查FLASH_CR的LOCK是否解锁,如果没有则先解锁。
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作
3.设置FLASH_CR寄存器的PG位为“1”在指定的地址写入编程的半字。
4.等待BSY位变为0
5.读出写入的地址并验证数据。
STM32的FLASH擦除过程
页擦除和整片擦除
页擦除
1.检查FLASH_CR的LOCK是否解锁,如果没有则先解锁。
2.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作
3.设置FLASH_CR寄存器的PER位为“1”.
4.用FLASH_AR寄存器选择要擦除的页
4.用FLASH_CR寄存器的STRT位为“1”
5.设置FLASH_CR寄存器的STRT位为“1”.
6.等待BSY位变为“0”
7.读出被擦除的页并做验证
flash_status flash_erasepage(unit32_t page_Address)
flash_status flash_eraseallpages(void)
flash_status FLASH_ERAseOPtionBytes(void)
FLASH全片擦除
1.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作
2.设置FLASH_CR寄存器的MER位为“1”.
3.设置FLASH_CRR寄存器的STRT为1
4.等待BSY为0
5.读出所有页并验证
programoptionbyte编程选项字节
flash_erasepage页擦除 写入AR寄存器
flash_eraseallage全片擦除
flash_eraseOptionBytes擦除选项字节
flash_GetStatus编程的状态
flash_WaitForlastoperation等待上次操作 等待SR=0
总结
1.锁定解锁函数
对FLASH进行写操作前必须先解锁,解锁操作也就是必须在
FLASH_KEYR寄存器写入特定的序列(KEY1和KEY2),固件函数实现:void FLASH_Unlock(void)
同样的道理,在对FLASH写操作完成之后,我们要锁定FLASH
VOID FLASH_Lock(void)
2.写操作函数
固件库提供三个FLASH写函数
FLASH闪存读取
EG:我们从地址addr,读取一个半字(半字为16位,字为32位)
可以通过如下语句读取:data=(vu16)addr