新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2020-3-18
- 在线时间
- 15 小时
|

楼主 |
发表于 2020-3-27 15:14:34
|
显示全部楼层
蠢蠢的写了个函数分块写入,大哥们有什么好的建议吗
#define U16_SECTOR_SIZE (STM_SECTOR_SIZE/2)
void STMFLASH_Write_BigData(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite)
{
u16 secoff; //扇区内偏移地址(16位字计算)
u16 secremain; //扇区内剩余地址(16位字计算)
u32 offaddr; //去掉0X08000000后的地址 //解锁
u16 i=0,index=0;//
offaddr=WriteAddr-STM32_FLASH_BASE; //实际偏移地址.
secoff=(offaddr%STM_SECTOR_SIZE)/2; //在扇区内的偏移(2个字节为基本单位.)
secremain=STM_SECTOR_SIZE/2-secoff; //扇区剩余空间大小
if(NumToWrite>secremain)//数据大于该扇区范围
{
index = (u32)NumToWrite / U16_SECTOR_SIZE;//需要写入几个2K
}
//写入2K数据
for(i=0;i<index;i++)
{
//写入偏移后的地址和数据
STMFLASH_Write(WriteAddr+i*STM_SECTOR_SIZE,(pBuffer+i*U16_SECTOR_SIZE),U16_SECTOR_SIZE);
}
//数据非2K整数
if(NumToWrite%STM_SECTOR_SIZE != 0)
{
STMFLASH_Write(WriteAddr+index*STM_SECTOR_SIZE , pBuffer+index*U16_SECTOR_SIZE , NumToWrite-index*U16_SECTOR_SIZE );
}
}
|
|