欢迎光临
我们一直在努力

STM32学习笔记:Flash读写

手头开发板上芯片是STM32F103C8T6,片上Flash为64KB,按ST定义,属于中容量的,下表就是中容量内存组织。

文档中对写Flash有专门的描述,重要的知识点包括但不限于:

1)擦除操作只能是页擦除或全部擦除。

2)写操作只能是每次写入16-bit,即双字节。

3)在擦除之前,要先写两个键值KEY1(0x)和KEY2(0xCDEF89AB)到FLASH_KEYR寄存器,以解除闪存锁。

我们的程序基本流程是,先读取Flash中一个固定地址的数据,然后通过串口打印,再修改此数据,修改后再读回来。

这是写Flash的程序:

void Writeflash(void)

FLASH_Unlock();

FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

FLASHStatus = FLASH_ErasePage(StartAddress);

if(FLASHStatus == FLASH_COMPLETE)

FLASHStatus = FLASH_ProgramWord(StartAddress, 0x);

USART1_printf(USART1, "\r\n");

FLASH_Unlock()就是完成解除闪存锁的工作,以下是FLASH_Unlock()函数的实现。

void FLASH_Unlock(void)

/* Authorize the FPEC of Bank1 Access */

FLASH->KEYR = FLASH_KEY1;

FLASH->KEYR = FLASH_KEY2;

#ifdef STM32F10X_XL

/* Authorize the FPEC of Bank2 Access */

FLASH->KEYR2 = FLASH_KEY1;

FLASH->KEYR2 = FLASH_KEY2;

#endif /* STM32F10X_XL */

FLASH_ErasePage()函数就是完成擦除整页数据功能,FLASH_ProgramWord()是向Flash固定的地址写入一个32-bit数据。

程序进行相应修改可以做成通过USART对Flash操作,比如,通过串口发送数据,修改Flash中的数据。

对Flash的操作用处很多,比如在CAN网络中可以在Flash中预先设置CAN的地址,也可以通过can通信在线修改地址,再比如在温度测量控制系统中可以在Flash预置传感器的标定值等。

ASPENCORE 旗下媒体

识别下方二维码,关注我吧!

赞(55)
分享到: 更多

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址