stm32f103rct6 FLASH操作

2019-08-14 01:48发布

      今天对stm32f103的flash进行操作的时候,发现数据总是无法写到flash里面。     代码如下:

      HAL_FLASH_Unlock();  //解锁
     __HAL_FLASH_PREFETCH_BUFFER_DISABLE();  //擦除flash的时候禁止数据缓存
     FLASH_PageErase(0x08010000);  //擦除扇区
     while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)==SET) {};   //等待擦除完成
     HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08010000, 0x11111111);  //写flash
     __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
     HAL_FLASH_Lock();

     发现数据死活都写不进0x08010000这个地址,但0x08010000开始的2K扇区已经被擦除了。
     于是我把擦除扇区的操作"FLASH_PageErase(0x08010000); "这一句去掉,因为之前的操作使得0x08010000这个地址的2K扇区已经被擦除,所以数据能被写进去。
     然后把程序改为:
     HAL_FLASH_Unlock();  //解锁
     __HAL_FLASH_PREFETCH_BUFFER_DISABLE();  //擦除flash的时候禁止数据缓存
     FLASH_PageErase(0x08010000);  //擦除扇区
     while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY)==SET) {};   //等待擦除完成
     FLASH->CR &= ~(FLASH_CR_PER);   //必须清楚此位
     HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x08010000, 0x11111111);  //写flash
     __HAL_FLASH_PREFETCH_BUFFER_ENABLE();
     HAL_FLASH_Lock();
     也就是加多了一句清楚FLASH->CR寄存器的FLASH_CR_PER位,然后就读写、擦除正常了。
     具体原因还需要找个时间好好阅读一下datasheet才行。
0条回答

一周热门 更多>