STM32F0X单片机的内部FLASH问题

本文介绍了在STM32F0X单片机中遇到的内部FLASH编程问题,包括计算FLASH起始页的错误及编程错误标志的处理。强调了在写入数据前必须先擦除并清除状态寄存器的相关标志,以确保编程操作的正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef enum {FAILED = 0, PASSED = !FAILED} Status;//定义要使用的状态枚举变量
#define FLASH_Page_Size    ((uint32_t) 0x00000400) //FLASH页的大小    不够页面大不要去除,否则除不了
#define FLASH_Start_Addr   ((uint32_t) 0x08007000) //要编写的起始地址
#define FLASH_End_Addr     ((uint32_t) 0x08007003) //要编写的结束地址

 


uint32_t EraseCounter = 0x00;
uint32_t AddressX = 0x00;
u32 Data_Read ;
uint32_t First_Page = 0x00;                       //起始页


__IO FLASH_Status FLASHStatus = FLASH_COMPLETE;
__IO Status MemoryProgramStatus = PASSED;




void FLASH_Erase(void)//擦除程序必须变成ff才可以
{
  //printf("\r\n擦除变为0xff\r\n");
	
  FLASH_Unlock();//先解锁
  FLASH_ClearFlag( FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPERR); //清除相应的标志位
 
  First_Page = (FLASH_End_Addr - FLASH_Start_Addr) ;//计算出起始页
	//printf("【FLASH初始页面】【%d】\r\n",First_Page);
  /* 使用前先擦除 */
  for(EraseCounter = 0; (EraseCounter < First_Page) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
  {
    if (FLASH_ErasePage(FLASH_Sta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值