stm32内部flash操作实例与验证

一:FLASH的读写操作
1.stm32内部flash写操作只能是两个byte写入,不能一个byte一个byte的写
2.写之前需要擦除,擦除后数据均为FF
3.内部flash为512kb为大容量,小于512为小容量。在stm32的stm32f10x_flash.c里面FLASH_Status FLASH_ErasePage擦除页函数有区别擦2k还是擦1k,大容量擦2k,小容量擦1k
4. 读可以只读1个字节,例如:(uint8_t)(Address)
读可以只读4个字节,例如:(uint32_t)(Address)
5.擦除和写过程没有加延时函数,因为库函数里面已经有一个确保操作完成的函数。
6.擦写前先调用解锁函数。

#define BaseStartAddr	0x08000000	

uint16_t STMFLASH_ReadHalfWord(uint32_t addr)
{
	rt_kprintf("读取:WriteAddr=%08X,pByte=%08X\n",BaseStartAddr+addr,*(uint32_t*)(BaseStartAddr+addr));
	return *(uint32_t*)(BaseStartAddr+addr);
}	
	
void STMFlashByteWrite(uint32_t WriteAddr,uint32_t pByte)
{	
	FLASH_Unlock();	
	
	FLASH_ErasePage(BaseStartAddr);	
	FLASH_ProgramWord(BaseStartAddr+WriteAddr,pByte);	
	rt_kprintf("写入:WriteAddr=%08X,pByte=%08X\n", BaseStartAddr+WriteAddr, pByte);
	STMFLASH_ReadHalfWord(WriteAddr);	
	
	FLASH_Lock();
}	

二:FLASH读写的验证
hex文件如下只裁剪hex文件的头部和尾部

:020000040800F2
:10000000505A00201D1F0108992F0008797E000812
:100010009B2F00089F2F0008A32F0008000000005E
:10002000000000000000000000000000A72F0008F2
:10003000A92F0008000000000B7E0008AF2F000869
……
:1013C0000304060708090C69100C2C0204065401DA
:1013D000131E640D02088C041AAC041A6C041A580B
:1013E000041A40041A4C041AA0041A78041A80043F
:1013F0001A9404011B043C106E19021D0100000028
:04 0000 05 08000131 BD
:00000001FF

随后会xshell截图:

猜你喜欢

转载自blog.csdn.net/weixin_42399752/article/details/87967231