【电机控制器】FM33LF015芯片——FLASH模拟EEPROM


@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,评论区欢迎讨论。