金牌会员
 
- 积分
- 1091
- 金钱
- 1091
- 注册时间
- 2017-11-7
- 在线时间
- 311 小时
|
STM32F030F4P6使用FLASH模拟EEPROM,写入数据:
FLASH_ProgramHalfWord(0x08007800,0xDD); //写入一个uint16_t类型数,stm32写flash的长度固定是16bit
FLASH_ProgramWord(0x08007802,0x89ABCDEF); //写入一个uint32_t类型数
下装后调试查看FLASH地址数据已正确写入,读取数据:
uint16_t TT2;
uint32_t TT3;
TT2 = *(uint16_t *)0x08007800;
TT3 = *(uint32_t *)0x08007802;
执行到这句 TT3 = *(uint32_t *)0x08007802;就出错进入 HardFault_Handler,折腾了半天也没找出原因,用
*(uint16_t *)0x08007802 *(uint16_t *)0x08007804分段可读出写入的uint32_t类型数,上网查了半天,发现可能与4字节
对齐有关,将程序改为 FLASH_ProgramWord(0x08007804,0x89ABCDEF);读取正常,又实验下,发现uint32_t类型数地址必须
能被4整除,否则读出错,uint16_t类型数地址必须是偶数,否则也会出错。看来STM32读特定类型数据对地址有特殊要求,请
大神讲解下原因,谢谢。
|
|