STM8S 操作内部EEPROM

本文介绍了STM8S103F3芯片内置EEPROM的使用方法,包括其640字节容量的具体应用场景,如无线应用中保存配置参数等。文章详细解析了读写操作流程,并针对写操作中涉及的存储区安全机制提供了具体的解锁步骤。
AI助手已提取文章相关产品:

对于STM8S103F3这款芯片来讲,存在640个字节的EEPROM,当然如果有外部EEPROM,自然是不会使用到内部的EEPROM的。但小东西也有大用途,例如做无线应用时,减少成本的情况下,还能保存一些特定设置,如:休眠时间,工作频率,输出功率,密码等。

下图所示,STM8S系列EEPROM大小一目了然。


操作EEPROM自然分成读操作和写操作,先查看STM8S的手册描述如下:

中文手册上的存储器组织结构存在错误,如:


对应英文手册如:


对应的代码如下;

char *p = 0x4000;
u8 a,b,c;

a = *p;
b = *p++;
c = *p++;
就像C8051操作外部数据存储一样,只需要简单通过指针指向0x4000位置即可。


写操作,则有些小麻烦,主要是STM8S的存储区安全机制问题。

中文手册描述:

英文手册描述:


u8 write_header(header *h)
{
	u8 *p=(u8 *)EP_HEADER_ADDR; //EP_HEADER_ADDR    0x4000
	if(!h)
		return 0;
		
	/*操作EEPROM,需要先进行解锁*/
	FLASH_DUKR=0xAE; //注意这里不能断点调试,否则会造成内部不同步,FLASH解锁失败
	FLASH_DUKR=0x56;
	FLASH_CR2=0x00;
	FLASH_NCR2=0xFF;
	if(!(FLASH_IAPSR & 0x08)) //检测对应的位是否解锁
		return 0;
	_memcpy(p,(u8 *)h,sizeof(header));
	FLASH_IAPSR=(u8)(~0x08); //重新上锁	
	return 1;
}

执行解锁后,操作也是非常简单的。


总结:

1、STM8S内部EEPROM使用还是挺方便的,只有写操作时需要解锁。

2、中文手册很多时候会存在错误,只能作为快速浏览用,具体应用还得参考官方英文手册。


您可能感兴趣的与本文相关内容

STM8S103微控制器内部集成了EEPROM存储器,可以通过特定的库函数实现读写操作STMicroelectronics为该系列微控制器提供了标准外设库(Standard Peripheral Library),其中包含针对EEPROM操作的API[^1]。 ### STM8S103 EEPROM 读写操作支持 在STM8S103中,EEPROM操作通常使用`stm8s_eeprom.h`和`stm8s_eeprom.c`文件提供的函数进行管理。这些函数由ST官方提供,并集成在其标准外设库中。以下是一些常见的EEPROM操作函数及其版本信息: - **初始化与解锁** 在执行任何EEPROM读写操作之前,必须先调用`EEPROM_Unlock()`函数来解除对EEPROM的写保护。该函数在STM8S标准库v2.3.0及后续版本中均有支持[^1]。 - **写入数据** 写入单个字节可使用`EEPROM_WriteByte()`函数,而批量写入则可以使用`EEPROM_Program()`或`EEPROM_WriteBlock()`等函数。这些函数在标准库的多个版本中保持兼容性[^1]。 - **读取数据** 通过`EEPROM_ReadByte()`函数可以直接从指定地址读取一个字节的数据。这一功能在所有支持EEPROM的标准库版本中均可用[^1]。 - **擦除操作** 若需擦除某个扇区或整个EEPROM区域,可使用`EEPROM_EraseByte()`、`EEPROM_EraseSector()`或`EEPROM_Clear()`等函数。这些函数在v2.x版本的标准库中均有实现[^1]。 ### 推荐使用的库版本 对于STM8S103系列MCU,推荐使用**STM8S_StdPeriph_Lib_V2.3.1**版本的标准外设库,它包含了完整的EEPROM操作函数,并且经过了广泛测试,适用于大多数工业级应用。该版本可以在ST官网下载,并附带详细的文档说明和示例代码[^1]。 ### 示例代码:EEPROM写入与读取 ```c #include "stm8s.h" #include "stm8s_eeprom.h" int main(void) { // 解锁EEPROM以允许写入 EEPROM_Unlock(); // 向地址0x4000写入数据0xA5 EEPROM_WriteByte((uint32_t)0x4000, (uint8_t)0xA5); // 从地址0x4000读取数据 uint8_t data = EEPROM_ReadByte((uint32_t)0x4000); while (1); } ``` 上述代码展示了如何使用标准库函数对EEPROM进行基本的写入和读取操作。确保在项目设置中正确包含`stm8s_eeprom.h`头文件并链接相关源文件[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值