【电机控制器】FM33LF015芯片——FLASH模拟EEPROM
文章目录
- @[TOC](文章目录)
- 前言
- 一、概述
- 二、代码
- 三、实验
- 四、参考资料
- 总结
文章目录
- @[TOC](文章目录)
- 前言
- 一、概述
- 二、代码
- 三、实验
- 四、参考资料
- 总结
前言
使用工具:
1.ARM仿真器/J-OBV2仿真器
提示:以下是本篇文章正文内容,下面案例可供参考
一、概述
二、代码
#define FLASH_PROG_ADDR 0x00004000
#define PAGE_BUFFER_SIZE 128
#define SECTOR_BUFFER_SIZE 512
/* Page大小为512字节 即128个字 */
/* 32位=32bit=4byte,1byte=4bit */
/* PageDataBuffer[128]数组有128个元素,每个元素占用4个byte,即4个字节 */
/* 1byte占用8位 */
uint32_t PageDataBuffer[PAGE_BUFFER_SIZE];
/* Sector大小为2048字节 即512个字 */
uint32_t SectorDataBuffer[SECTOR_BUFFER_SIZE];
uint32_t ReadData;
void FlashRW(void)
{FL_FLASH_PageErase(FLASH, FLASH_PROG_ADDR);memset(PageDataBuffer, 0x55, PAGE_BUFFER_SIZE * 4);FL_FLASH_Program_Word(FLASH, FLASH_PROG_ADDR, PageDataBuffer[0]);ReadData = *((uint32_t *)FLASH_PROG_ADDR);//将flash数据读出// FL_FLASH_PageErase(FLASH, FLASH_PROG_ADDR);
// memset(PageDataBuffer, 0xAA, PAGE_BUFFER_SIZE * 4);
// FL_FLASH_Program_Page(FLASH, FLASH_PROG_ADDR / FL_FLASH_PGAE_SIZE_BYTE, PageDataBuffer);
// ReadData = *((uint32_t *)FLASH_PROG_ADDR);//将flash数据读出// FL_FLASH_SectorErase(FLASH, FLASH_PROG_ADDR);
// memset(SectorDataBuffer, 0x00, SECTOR_BUFFER_SIZE * 4);
// FL_FLASH_Program_Sector(FLASH, FLASH_PROG_ADDR / FL_FLASH_SECTOR_SIZE_BYTE, SectorDataBuffer);
// ReadData = *((uint32_t *)FLASH_PROG_ADDR);//将flash数据读出//FL_FLASH_SectorErase(FLASH, FLASH_PROG_ADDR);
}
三、实验
写两个字节,0x55,掉电后重新上电,仍然是2个字节的0x55
这里的地址和芯片手册没有对上,芯片手册是0x00040000,试了一下没有成功
反而是0x00004000是可以的
后续我在bootswap章节中看到了对于IF3的描述是最低word 00004000地址和实验结论相符
用连续写word的方式,写入8个Word,即4个byte,4个字节,32个bit
四、参考资料
【C语言】十六进制、二进制、字节、位、指针、数组
总结
本文仅仅简单介绍了【电机控制器】FM33LF015芯片——FLASH模拟EEPROM,评论区欢迎讨论。