初级会员

- 积分
- 52
- 金钱
- 52
- 注册时间
- 2015-6-27
- 在线时间
- 4 小时
|
1金钱
stm32F103C8芯片,用FLASH模拟EEPROM,擦写最后2KFLASH,但现在每次重新上电后都无显示,我想是自己把程序段也给擦除了吧;但一直不知道怎么解决;
我的要求是定义STM32F103C8的最后2KFLASH来做EEPROM,放置数据,由于103C8只有64K的flash,所以地址为定义为:#define EEROM_BASR_ADDR 0x0800f400;这个不知道我计算是不是正确,然后#define PageSize 0x400,因为这个芯片每页是1K的容量,而我需要2K,所以要擦2页,那我利用函数的方式来写,函数如下:
int WriteEEPROMData(unsigned int StartAddr,unsigned int *p_data, unsigned int size)
{
int count = 0;
unsigned int* p = (unsigned int*)p_data;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(EEROM_BASR_ADDR);
FLASH_ErasePage(EEROM_BASR_ADDR + PageSize);
while (count < size*sizeof(unsigned int))
{
FLASH_ProgramWord((EEROM_BASR_ADDR+count*4),*p++);
count++;
}
FLASH_Lock();
return 0;
}
以上是我的写FLASH的函数,现在我主要集中的问题是:STM32 的FLASH是16bit的,而我要存的数据是U8 类型的,我要把2048byte的U8 数据给存到EEPROM里面去,不知道这里该怎么处理,FLASH是16位,我想把高8位直接就附值0,低8位写我需要的数据就好了,但看原子教程里面又说这个FLASH不允许写单数的FLASH地址,我无法明白这个是啥意思?FLASH里面不允许一个地址一个地址的写吗?我上面的数据我也不知道该怎么处理了,能有高手指点我一下吗?
|
最佳答案
查看完整内容[请看2#楼]
我的问题解决了,就是一次必须写16bit数据或32bit数据,我之前可能是写的8bit数据导致的错误,现在更改为halfword写,且每次增加1地址,写16bit进去,就可以了!
|