想实现这么个功能:
有三个二维数组paraa[4][7], error[4][7], resRefValue[4][7]需要保存,将三个数组写入到stm32f103内部flash的三个扇区里,上电时再重新读出来。
下面有读flash的函数,该函数只有一个参数。参数为0时,读出所有数据;参数为1-4时,读出存储的对应路数的数组。
计算好第一路的三个数组后,保存到了paraa[0][], error[0][], resRefValue[0][]里。
重新上电时,调用读flash函数,参数给的是0,应该读出所有参数,结果发现,第一路的前两个参数没有被保存,都是0,resRefValue[0][]倒是正常。
修改为上电时只读第一路的参数,结果倒是正常的。
- void FlashRead(u8 readChanelNUmber)
- {
- u8 i;
- if(readChanelNUmber == 0)
- {
- for(i = 0; i < 4; i++)
- {
- STMFLASH_Read(FLASH_SAVE_ADDR+i*28, ¶a[i][0].u16_value[0], 28);
- STMFLASH_Read(FLASH_SAVE_ADDR+i*28+0x0400, &error[i][0].u16_value[0], 28);
- STMFLASH_Read(FLASH_SAVE_ADDR+i*28+0x0800, &resRefValue[i][0].u16_value[0], 28);
- }
- }
- else if(readChanelNUmber > 0 && readChanelNUmber < 5)
- {
- readChanelNUmber -= 1;
- STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28, ¶a[readChanelNUmber][0].u16_value[0], 28);
- STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28+0x0400, &error[readChanelNUmber][0].u16_value[0], 28);
- STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28+0x0800, &resRefValue[readChanelNUmber][0].u16_value[0], 28);
- efValue[%d][%d] = %d", readChanelNUmber, i, resRefValue[readChanelNUmber][i].u16_value[0]);
- }
- }
复制代码
|
对于STM32F1系列来言,内部FLASH仅支持16位半字写。
该函数引用错误,第三个参数为写入的16位数据的个数,所以对应的第一个参数里的i*28就不合适了,应该改成i*14;
另,二维数组这样保存可能没必要,数组肯定是连着的。没必要加这个for循环,直接保存56个16位数据即可。
评分
查看全部评分
已经解决,就是上边的问题,没有仔细看函数说明。