关于F407的FLASH问题

2019-07-20 06:00发布

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;       

               
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。