当前位置:网站首页>CMT2380F32模块开发6-flash例程

CMT2380F32模块开发6-flash例程

2022-08-11 05:24:00 andylauren

本设备包含一颗 32kByte 容量的 FLASH 存储器,共划分为 64 个 Sector,每个 Sector 容量为 512Byte。本模块支持对该存储器的擦除、编程以及读取操作。此外,本模块支持对 FLASH 存储器擦写的保护,以及控制寄存器的写保护。

如果是初学者不建议使用这个做离线数据保存,还是老老实实外加eeprom吧,除非你明确的直到你的代码用了哪些flash,哪些falsh没有被使用。如果你是大神,可以使用这个功能做升级。

本样例展示FLASH的擦写功能,包括Sector擦除,字节/半字/字写功能。

en_result_t FlashWriteTest(void)
{
    en_result_t enResult = Error;
    uint32_t u32Addr = 0x3ff0;
    uint8_t u8Data = 0x5a;
    uint16_t u16Data = 0x5a5a;
    uint32_t u32Data = 0x5a5a5a5a;

    Flash_Init(FlashInt, 0);

    Flash_SectorErase(u32Addr);

    enResult = Flash_WriteByte(u32Addr, u8Data);
    if (Ok == enResult) {
        if (*((volatile uint8_t*)u32Addr) == u8Data) {
            enResult = Ok;
        } else {
            return enResult;
        }
    } else {
        enResult = Error;
        return enResult;
    }

    u32Addr += 2;
    enResult = Flash_WriteHalfWord(u32Addr, u16Data);
    if (Ok == enResult) {
        if (*((volatile uint16_t*)u32Addr) == u16Data) {
            enResult = Ok;
        } else {
            return enResult;
        }
    } else {
        return enResult;
    }

    u32Addr += 2;
    enResult = Flash_WriteWord(u32Addr, u32Data);
    if (Ok == enResult) {
        if (*((volatile uint32_t*)u32Addr) == u32Data) {
            enResult = Ok;
        } else {
            return enResult;
        }
    } else {
        return enResult;
    }

    return enResult;
}

这是它的测试代码,就是对0x3ff0地址进行字节/半字/字 擦写读过程。读数据是通过指针强制类型转换进行的。

这个例程只能通过打断看,查看FlashWriteTest的返回结果。

单独跑这个程序都能成功,要是自己写的程序就不能保证了。

原网站

版权声明
本文为[andylauren]所创,转载请带上原文链接,感谢
https://blog.csdn.net/andylauren/article/details/126136553