u8 Write_Sector( u32 start_address, u32 data_length, u32 *buff )
{
u32 end_address,i,j;
i=start_address;
j=start_address;
end_address=start_address+data_length*4;
if( start_address%4 || start_address<Start_Sectoraddress || start_address>End_Sectoraddress || end_address>End_Sectoraddress )
{
printf("the enter address is incorrect
");
return 0;
}
unlock();
FLASH->ACR |=~(1<<10);
/**************************************************************************************/
for(j=start_address; j<=end_address;)
{
if( (*(vu32*)j) != 0XFFFFFFFF )//这里是扇区里面的内容是否为0XFFFFFFFF
{
Sector_Erase( GetTheSector( j ) );
printf("
");
}
else j+=4;
}
主要是在擦除扇区的时候加入printf 这个输出函数 我在循环读扇区里面的东西就可以显示多次,不然我循环读扇区里面的内容就只能显示一次不知道问题出在哪里
/***************************************************************/
FLASH->CR |= 1<<0; //PG位激活Flash编程
FLASH->CR &= ~(3<<8);
FLASH->CR |= 2<<8; //32位编程并行位数
while( i<=end_address ) // 开始往扇区上面写数据
{
while( FLASH->SR & (1<<16) ){} //检查FLASH_SR中的BSY位,确保当前未执行任何FLASH操作
*( vu32 * )i=*buff; // 将i强制转化为指针变量 i是指针 *i 是取值
buff++;
i+=4;
}
FLASH->CR &=~(1<<0);
lock();
FLASH->ACR|=1<<10; //FLASH擦除结束,开启数据fetch
return 1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>