(HAL)STM32F103C8T6——内部flash模拟EEPROM

        内部Flash大部分空间是用来存储烧录进单片机的程序代码,因此可以将非代码等无关区域用来存储数据。项目工程的代码量可以通过Keil uVision5软件底下框查看,如下图所示。一般只需参考代码量(Code)以及只读数据(RO-data)即可。

        由于本设计需要存储的内容需求不大,仅要求存放修改成功的密码,故采用内部Flash模拟EEPROM,实现单片机断电后重新上电时,修改成功的密码仍然有效。无需购置外部存储器EEPROM模块(W25QXX)等,减少一定的成本,并且使得存储变得简单方便。相关的函数如下:

/* 静态函数(仅限stmflash.c调用) */

static void stmflash_unlock(void);                                      /* 解锁STM32 内部FLASH */

static void stmflash_lock(void);                                        /* 锁定STM32 内部FLASH */

static uint8_t stmflash_get_error_status(void);                         /* 获取FLASH错误状态 */

static uint8_t stmflash_wait_done(uint32_t time);                       /* 等待操作完成 */

static uint8_t stmflash_erase_sector(uint32_t saddr);                   /* 擦除扇区 */

static uint8_t stmflash_write_halfword(uint32_t faddr, uint16_t data);  /* FLASH写半字 */

      在实际操作时,采用接口函数对Flash某块区域进行读写。

/* 接口函数(外部可调用) */

uint16_t stmflash_read_halfword(uint32_t faddr);                        /* FLASH读半字 */

void stmflash_read(uint32_t raddr, uint16_t *pbuf, uint16_t length);   

void stmflash_write(uint32_t waddr, uint16_t *pbuf, uint16_t length);   /* 在FLASH 指定位置, 写入指定长度的数据(自动擦除) */

      值得注意的是,设置FLASH 保存地址要大于本代码所占用FLASH的大小 + 0X08000000,并且该值必须为整数,才能保证不出错且不覆盖到原先的代码,储存相关内容。另外,STM32F103C8T6属于中容量产品,其闪存(Flash)组织结构如表所示。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

成为不掉头发的工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值