历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2021年02月22日 | STM8S单片机的内部eeprom编程

2021-02-22 来源:eefocus

简介:STM8S单片机芯片内部也集成有EEPROM,容量从640字节到2K字节。最为特色的是,在STM8单片机中,对EEPROM的访问就象常规的RAM一样,非常方便。EEPROM的地址空间与内存是统一编址的,地址从004000H开始,大小根据不同的芯片型号而定。


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


EEPROM的3种编程模式:


l字节编程(没有擦除操作)


可对EEPROM的数据区域进行逐字地编程。应用程序直接向目标地址写入数据。


l字编程


EEPROM允许字编程(一次编程4个字节),从而缩短EEPROM的编程时间。


l块编程(没有擦除操作)


EEPROM块编程操作允许一次对整个块(64个字节)进行编程,整个块在编程前被自动擦除。但块编程操作一定要在RAM中运行。


下面以字节编程进行讲解:


实验平台:stm8s103k3 + stlink


在stm8s_flash.h中:


#if defined (STM8S103) || defined(STM8S903)


#define FLASH_PROG_END_PHYSICAL_ADDRESS((uint32_t)0x9FFF)


#define FLASH_PROG_BLOCKS_NUMBER((uint16_t)128)


#define FLASH_DATA_START_PHYSICAL_ADDRESS ((uint32_t)0x004000)


#define FLASH_DATA_END_PHYSICAL_ADDRESS((uint32_t)0x00427F)


#define FLASH_DATA_BLOCKS_NUMBER((uint16_t)10)


#define FLASH_BLOCK_SIZE((uint8_t)64)


#endif


从这里可以看出,eeprom的地址为0x004000~0x00427F,这段地址分为10个Block,每个Block有64个Byte,总容量为640Byte.


关于2个秘钥在stm8s_flash.h中已经定义:


#define FLASH_RASS_KEY1 ((uint8_t)0x56)


#define FLASH_RASS_KEY2 ((uint8_t)0xAE)


中文数据手册上KEY1和KEY2的定义与代码一致,但是英文数据手册上KEY1为0x56和KEY1为)0XAE.暂且不讨论谁搞反了,以代码为准吧!


首先要初始化EEPROM:


我们在eeprom.h中定义:


typedef enum{


#if defined(STM8S103) || defined(STM8S003) ||defined(STM8S903)


Block_0=0x4000,


Block_1=0x4040,


Block_2=0x4080,


Block_3=0x40C0,


Block_4=0x4100,


Block_5=0x4140,


Block_6=0x4180,


Block_7=0x41C0,


Block_8=0x4200,


Block_9=0x4240


#endif


}BlockStartAddress_TypeDef; //分块存数,方便读写操作!


在eeprom.c中初始化:


初始化操作步骤:


1.设定编程时间。FIX=1为标准编程时间(一般一次编程时间为6ms)。如果EEPROM被擦除过并且FIX=0,那么变成时间为标准编程时间的一半(一般为3ms)。


2.向FLASH_DUKR寄存器连续写入两个MASS密钥值来解除DATA区域的写保护。


第一个硬件密钥:0b0101 0110 (0x56)


第二个硬件密钥:0b1010 1110 (0xAE)


如果第二个秘钥匹配正确,FLASH_IAPSR的DUL位自动置位。


3.等待DATA EEPROM区解锁。


void EEPROM_Init()


{


FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_TPROG);


//注意顺序:FLASH_DUKR = 0xAE为Key2,FLASH_DUKR = 0x56;为Key1


FLASH_Unlock( FLASH_MEMTYPE_DATA);


//如果第二个秘钥正确,FLASH_IAPSR_DUL=1;


//直到FLASH_IAPSR_DUL由硬件置位,才跳出while循环


while((FLASH->IAPSR & FLASH_IAPSR_DUL) == 0);//等待DATA EEPROM区解锁


}


FLASH_Unlock函数原型在stm8s_flash.c中:


void FLASH_Unlock(FLASH_MemType_TypeDef FLASH_MemType)


{


assert_param(IS_MEMORY_TYPE_OK(FLASH_MemType));


if (FLASH_MemType == FLASH_MEMTYPE_PROG)


{


FLASH->PUKR = FLASH_RASS_KEY1;


FLASH->PUKR = FLASH_RASS_KEY2;


}


else


{


FLASH->DUKR = FLASH_RASS_KEY2;


FLASH->DUKR = FLASH_RASS_KEY1;


}


}


在main.c中,你就可以进行擦除,读,写操作了!


FLASH_EraseByte(uint32_t Address);//擦除某地址的一个字节


FLASH_ProgramByte(0x4001,0x08); //写入一个字节


while((FLASH_IAPSR & 0x04) != 0x00);//直到EOP=1,EEPROM编程结束


Rdat= FLASH_ReadByte(0x4000);//读出某地址的一个字节


推荐阅读

史海拾趣

Abilis Systems公司的发展小趣事

Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。

  2. 技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。

  4. 并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。

  5. 未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。

CTS [CTS Corporation]公司的发展小趣事

随着电子技术的不断进步和广泛应用,CTS敏锐地捕捉到了电子元器件和传感器市场的巨大潜力。于是,公司开始逐步转型,将业务重心转向这些领域。通过不断的研发和创新,CTS成功设计并生产出一系列高性能的电子元器件和传感器产品,赢得了市场的广泛认可。

Anritsu公司的发展小趣事

随着电子技术的不断进步和广泛应用,CTS敏锐地捕捉到了电子元器件和传感器市场的巨大潜力。于是,公司开始逐步转型,将业务重心转向这些领域。通过不断的研发和创新,CTS成功设计并生产出一系列高性能的电子元器件和传感器产品,赢得了市场的广泛认可。

Akustica(Bosch)公司的发展小趣事

随着电子技术的不断进步和广泛应用,CTS敏锐地捕捉到了电子元器件和传感器市场的巨大潜力。于是,公司开始逐步转型,将业务重心转向这些领域。通过不断的研发和创新,CTS成功设计并生产出一系列高性能的电子元器件和传感器产品,赢得了市场的广泛认可。

启珑(CHIPLON)公司的发展小趣事

为了满足全球市场的需求,CTS开始实施全球化扩张战略。公司在北美、亚洲和欧洲等地设立了生产设施,以便更好地服务全球客户。同时,CTS还积极与各地的合作伙伴建立紧密的合作关系,共同推动电子元器件和传感器市场的发展。

Doodle Labs公司的发展小趣事

为了进一步扩大市场份额,Doodle Labs开始寻求国际合作和业务拓展。公司与多家国际知名的无人机制造商和物联网企业建立了合作关系,共同开发新的解决方案和产品。同时,Doodle Labs还积极开拓国际市场,将产品出口到欧洲、北美等地区。这些努力不仅为公司带来了更多的商业机会,也提升了Doodle Labs在国际市场的知名度。

问答坊 | AI 解惑

基于差动电压放大器的占空比测量电路设计

基于差动电压放大器的占空比测量电路设计 作者:戚栋 王宁会 孙炳全 1 引言   占空比是脉冲电源的重要参数之一。不同的应用场合,对脉冲电源输出电压的占空比要求不同,同时,脉冲电源输出电压的占空比对相应的生产工艺也会产生影响 ...…

查看全部问答>

单片机控制 3个220V电动机

我现在想用单片机来控制 3个220V电动机  或是 5个电动机     而一般的电路设计是 光偶 加 可控硅 实现关与开  或是继电器实现     但是电动机开与关 到底有没有执行单片机没有得到 ...…

查看全部问答>

用电池做电源应当如何稳压?

使用电池做电源时会出现电压下降和内阻等增加等麻烦,因此一直想弄明白:能不能实现稳压以尽可能保持电路稳定?一般使用什么器件和方式?有什么原则和注意的?…

查看全部问答>

MC35i 中文资料

谁有MC35i的datesheet啊,发我一份。 邮箱 wyz1986111@163.com 收到立即给分 …

查看全部问答>

SEGA MD5的开发包

SEGA MD是很久以前的TV游戏机, 前些时候整理了一下, 找到完整的开发包: 1)C,汇编开发工具和库; 2)调试工具(免ICE开发); 3)MIDI音乐转换工具; 工具虽老了些,但当初用这个工具开发过很多的商业SEGA游戏, 包括为日本著名游戏厂家BANDAI开发的SEGA ...…

查看全部问答>

高可靠性心电采集电路

按国内医学会制定的心电图标准,心电信息数字化精度不小于12bit,(信号输入范围+/-5mV的情况下,心电信号最小分辨率2.44uV)心电采样率不低于500Hz 我们想做一款心电图的分析软件,想找一个可靠心电电路,当然比上面标准更高的更好 最好有实际使用过 ...…

查看全部问答>

求AT指令截取手机屏幕方法?

请问AT指令怎么样可以截取到手机屏幕内容(全屏,或者部分都可以) 谢谢.…

查看全部问答>

请教高手:应用层关闭后,winlogon占用cpu过高。

一个can卡驱动,通讯时运行良好,可是应用层程序关闭后,winlogon占用cpu过高。请教高手这是什么原因?…

查看全部问答>

求教用SYSTEMVIEW做PN码相应同步系统.

求教用SYSTEMVIEW做PN码相应同步系统. 1、判决器用哪个控件? 2、VCO所连接的时钟用什么控制? 最好能有解决电路图。谢谢~~…

查看全部问答>

赠送3片8962芯片,见图

赠送3片8962芯片,BGA封装的,自己付快递费就行,红线内就是 …

查看全部问答>