使用的是 STM32F103C8xx (64K FLASH) , 引用mini的FLASH读写代码 .
写入代码 :
#define FLASH_SAVE_ADDR 0X0800C800 //使用50K以后的地址(上限为64K)
...
u16 IR_BUFFER[150]; //一次读写150字节 , 而实际将会占用300个字元地址.
u8 item,index;
u32 addr;
...
addr=(item-1)*600+(index-1)*300+100; // item与index的变化顺序为 item=1,index=1 -> item=1,index=2 -> item=2,index=1 -> item=2,index=2 .......item=9,index=2
// +100是为了保留了前面50个字节储放特别参数用
STMFLASH_Read(FLASH_SAVE_ADDR+addr,&IR_BUFFER[0],150); // 写入放于IR_BUFFERP[]接收到的150个字节的红外码高低电平
........
.......
读取代码 :
...
addr=(item-1)*600+(index-1)*300+100; // item与index的变化顺序为 item=1,index=1 -> item=1,index=2 -> item=2,index=1 -> item=2,index=2 .......item=9,index=2
STMFLASH_Read(FLASH_SAVE_ADDR+addr,&IR_BUFFER[0],150); //将已储存的对应组资料(150个字节)读入至IR_BUFFER[]
...
整个源代码使用MDK4.12编译如下, 整个代码空间使用不到15K .
Build target 'Target 1'
linking...
Program Size: Code=8650 RO-data=1682 RW-data=20 ZI-data=1948
FromELF: creating hex file...
"TEST.axf" - 0 Error(s), 0 Warning(s).
问题 :
1. FLASH可写入启始位置(0X0800C800), 为什么设不一样时, 能成功写进再成功读出完全相同数据的机会不一样 .
(如果用0X800C800, 可以成功写入10组以上数据 , 以上item及index组合共18组, 如果基底地址改成0X800C000或0X800D000或其它64K范围内地址,
大概只能 "写入及读取成功" 不到5组 , 不知道是为什么?)
2. 单步仿真来看, 每一组都有做 FLASH写入的动作. 但追踪读出的部份, 很多全是只会读到一整片0Xffff .
目前计划是找别的flash读写函式库再套上去试看看. 我确定读写地址一定没有超过64K, 也都是偶数地址 . 但是感觉失败率很高.
特别是基底地址设不同时, 就有不同结果 . 请教各位不知道怎么来追查这个问题 ?? 感谢 !!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>