stm8s eeprom读写

stm8s有自带的eeprom,起始地址是0x4000,终止到哪看手册,因为我用的时候只写一个4字节数据,配置如下:

入参:eeprom偏移地址,写入的数据   

void eeprom_write(const unsigned char addr,unsigned long date)
{
   asm("sim");
   FLASH_CR1_FIX = 1;//编程时间固定为标准编程时间
   FLASH_CR2_WPRG = 1;//使能字编程
   FLASH_NCR2_NWPRG = 0;/使能字编程
   do
   { 
     FLASH_DUKR = 0xAE;
     FLASH_DUKR = 0x56;
   }
   while(!(FLASH_IAPSR_DUL & 1));//等待解锁
   unsigned long *p = (unsigned long*)(0x4000 + addr);
   *p = date;
   //while(!FLASH_IAPSR_EOP & 1);//等待写完成//加上掉电写入不准
   FLASH_IAPSR_DUL = 0;//上锁
   asm("rim");

}

说明:while(!FLASH_IAPSR_EOP & 1);被我注释掉了,原因如注释所写的那样,我也不知道为什么。然后写完之后记得上锁,要不然会不准。另外就是这里中文手册又出错了,就是do while语句中的那两句给FLASH_DUKR写入密钥,中文手册写反了。

读eeprom就比较简单了,代码如下:

入参:eeprom地址偏移量                             出参:相应地址的值*/
unsigned long eeprom_read(const unsigned char addr)
{
   return *((unsigned long*)(0x4000 + addr));
}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32的EEPROM和FLASH是统一编址的,它们共用同一个读写电路。因此,在进行EEPROM读写操作时,STM32的核心会暂停对FLASH的访问和操作,只有当EEPROM的操作完成后,才会继续执行后续代码。在这期间,只有EEPROM的读写电路工作,而CPU处于挂起状态。\[1\] 要使用STM32的EEPROM进行读写操作,可以使用STM32HAL库。通过该库,可以像操作FLASH一样操作芯片内部的EEPROM,实现掉电保存数据的功能。需要注意的是,不是所有型号的STM32芯片都有内部的EEPROM,如果没有的话,可以使用内部FLASH模拟EEPROM,或者外挂EEPROM芯片。\[2\] 下面是一个示例代码,用于从EEPROM中按字节读取数据和按字读取数据: 按字节读取数据: ```c void EEPROM_ReadBytes(uint16 Addr,uint8 *Buffer,uint16 Length) { uint8 *wAddr; wAddr=(uint8 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr++; } } ``` 按字读取数据: ```c void EEPROM_ReadWords(uint16 Addr,uint16 *Buffer,uint16 Length) { uint32 *wAddr; wAddr=(uint32 *)(EEPROM_BASE_ADDR+Addr); while(Length--){ *Buffer++=*wAddr++; } } ``` 以上代码示例中,`EEPROM_BASE_ADDR`是EEPROM的基地址,`Addr`是要读取数据的起始地址,`Buffer`是存储读取数据的缓冲区,`Length`是要读取的数据长度。通过调用这两个函数,可以实现从EEPROM中读取数据的功能。 #### 引用[.reference_title] - *1* *3* [STM32L系列单片机内部EEPROM的读写](https://blog.csdn.net/WangSanHuai2010/article/details/7932867)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32HAL库-针对芯片内部EEprom读写操作介绍](https://blog.csdn.net/qq_36075612/article/details/116722932)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值