如何读取M3062型号设备的FLASH内容?
M3062读取FLASH的过程涉及多个步骤,包括解锁、擦除、写入和重新上锁等,以下是一个详细的操作流程:
一、准备工作
1、定义相关寄存器和地址:
FLASH_CR(Flash控制寄存器)
FLASH_SR(Flash状态寄存器)
FLASH_AR(Flash地址寄存器)
FLASH_KEYR(FPEC密钥寄存器)
FLASH_USER_START_ADDR(用户数据存储的首地址,例如0x08007C00)
2、设置用户数据存储的首地址:
通常建议将最后一个扇区用于用户数据存储,以避免在程序更新时丢失数据。
二、解锁FLASH
在进行任何FLASH操作之前,需要先解锁FLASH,这是因为每次复位后,FLASH都被锁定,只能通过特定的密钥序列进行解锁。
void Flash_unlock(void) { if ((FLASH>CR & FLASH_CR_LOCK) != RESET) { //判断LOCK位 FLASH>KEYR = 0x45670123; FLASH>KEYR = 0xCDEF89AB; } }
三、读取FLASH数据
读取FLASH数据相对简单,只需使用指针直接访问指定地址即可,以下是读取一个16位半字数据的示例:
uint16_t Flash_ReadHalfWord(uint32_t Address) { return *((__IO uint16_t *)(Address)); //使用指针访问指定地址下的数据并返回 }
假设要读取的数据地址为0x08007C00,可以这样调用:
uint16_t Flash_Data; //存储数据 __IO uint16_t * flashPtr; //该指针用来存储Flash读写地址 flashPtr = (__IO uint16_t *) 0x08007C00; //指向数据地址 Flash_Data = *flashPtr; //读取数据
四、写入FLASH数据
写入FLASH数据前,需要先擦除目标扇区,因为FLASH的最小擦除单位是扇区,以下是写入一个16位半字数据的完整流程:
1. 解锁FLASH
与读取操作相同,首先需要解锁FLASH。
2. 擦除目标扇区
void Flash_ErasePage(uint32_t PageAddress) { FLASH>CR |= FLASH_CR_PER; //置位扇区擦除控制位 FLASH>AR = PageAddress; //对应扇区起始地址 FLASH>CR |= FLASH_CR_STRT; //开始扇区清除 while ((FLASH>SR & (FLASH_SR_BSY | FLASH_SR_EOP)) != 0x20); //等待擦除完毕 FLASH>SR |= FLASH_SR_EOP; //清除标志位 FLASH>CR = 0x80; //重新上锁,擦除完成 }
假设要擦除的页地址为0x08007C00,可以这样调用:
Flash_ErasePage(0x08007C00);
3. 写入数据
void Flash_WriteHalfWord(uint32_t Address, uint16_t Data) { Flash_unlock(); //解锁 flashPtr = (__IO uint16_t *) Address; //选择写入地址,只能是擦除的扇区内 FLASH>CR |= FLASH_CR_PG; //置位Flash写入控制位 *flashPtr = Data; //写入数据到flashPrt地址对应空间中 while ((FLASH>SR & (FLASH_SR_BSY | FLASH_SR_EOP)) != 0x20); //等待写入完成 FLASH>SR |= FLASH_SR_EOP; //清除标志位 FLASH>CR = 0x80; //重新上锁 }
假设要写入的数据为0x1234,地址为0x08007C00,可以这样调用:
Flash_WriteHalfWord(0x08007C00, 0x1234);
五、重新上锁FLASH
虽然在上述写入函数中已经包含了重新上锁的步骤,但在某些情况下,可能需要单独执行重新上锁的操作:
void Flash_Lock(void) { FLASH>CR |= FLASH_CR_LOCK; //设置LOCK位,重新上锁 }
M3062读取FLASH的过程主要包括以下几个步骤:解锁FLASH、使用指针直接访问指定地址读取数据、(可选)擦除目标扇区、写入数据以及重新上锁FLASH,需要注意的是,由于FLASH的最小擦除单位是扇区,因此在写入新数据之前通常需要先擦除整个扇区,为了确保数据的安全性和稳定性,建议在实际项目中加入必要的错误检测和处理机制。
作者:豆面本文地址:https://www.jerry.net.cn/articals/14087.html发布于 2025-01-10 09:26:37
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司