flash块 stm32l0_STM32L011K4 Flash 操作

本文介绍了STM32L011K4微控制器中Flash和EEPROM的操作,包括编程、擦除和密码解锁步骤。详细讲解了如何在RAM中运行代码,并提供了编程示例,涉及Flash的半页编程优化和EEPROM的寿命。此外,还讨论了Flash的掉电模式以及选项字节编程。
摘要由CSDN通过智能技术生成

在L011中,除了普遍的Flash和OB外,还有EEPROM,而且还可以让Flash掉电运行.所以,他其实有4个密码,没错,是4个密码啊.如果Flash掉电了,那么就要RAM运行,也可以省一些电的.在Keil中这样定义RAM中运行代码.

__attribute__ ((section (".ramcode"))) void MyFunc(void){

while(1);

}

不过这2K RAM,是不是真的有点小呢,对于如果在RAM运行,就看要运行的小代码多大了.当然建议把Flash操作过程代码都放在RAM调试,当OK了再转移到Flash,不然调试过程因为Flash没法获取就没法调试了.

说回来那4个钥匙,手册也给了我们.

FLASH->PDKEYR = 0x04152637;

FLASH->PDKEYR = 0xFAFBFCFD;

FLASH->PEKEYR = 0x89ABCDEF;

FLASH->PEKEYR = 0x02030405;

FLASH->PRGKEY = 0x8C9DAEBF;

FLASH->PRGKEY = 0x13141516;

FLASH->OPTKEY = 0xFBEAD9C8;

FLASH->OPTKEY = 0x24252627;

开锁顺序我也整理了一下.

编程EEPROM:PEKEY

编程Flash扇区:PEKEY+PRGKEY

编程OP字节:PEKEY+PRGKEY+OPTKEY

编程Flash RunMode 下掉电模式:PDKEY

EEPROM的地址范围是0x08080000 – 0x080801FF,测试程序如下.

uint8_t i = 0;

__attribute__ ((section (".ramcode"))) void EEPROM_WriteBytes(uint32_t addr, uint8_t code)

{

/* 储存总线没有进行写入/擦除工作. */

while (FLASH->SR & FLASH_SR_BSY);

/* 输入密码解锁储存器 */

FLASH->PEKEYR = 0x89ABCDEF;

FLASH->PEKEYR = 0x02030405;

/* 等待解锁成功 */

while(FLASH->PECR & FLASH_PECR_PELOCK);

/* 编程内容 */

*(uint8_t *)(addr) = code;

/* 等待编程完成 */

while (FLASH->SR & FLASH_SR_BSY);

/* 加锁储存器 */

FLASH->PECR |= FLASH_PECR_PELOCK;

}

int main(void)

{

for(i = 0; i < 0xff; i++)

{

EEPROM_WriteBytes(0x08080000, i);

if(*(uint8_t *)(0x08080000) != i)

{

while(1); /* 错误发生 */

}

}

while (1)

{

}

}

当然了,实际操作中,可以全部写完再加锁,甚至可以不加(就是有点不安全吧).EEPROM的寿命是100K次的,也就是10万次,寿命是很足够的记录很多数据.大致推算也有几十MB的写入寿命了,这EEPROM又这么慢,很耐用的.

接下来看看Flash.其中已知Flash编程需要2个Key.根据Flash特性还要先擦后写.每个扇区大小是128B,所以这一系列器件最大的竟然可以到1536扇区.但是这个Flash只支持一次性编程32Bit或者一次性编程16 Word(Half Page).一次性编程Half Page肯定比32Bit不断来回节省的.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值