以下为FLASH操作:
#include "flash.h"
#include "stm8s_flash.h"
void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length)
{
uint16_t Count=0;
for( Count=0 ; Count FLASH_ProgramByte_User(Address+Count,DataBuff[Count]); } } void FLASH_ProgramByte_User(uint32_t Address, uint8_t Data) //将库函数中u16改为u32,否则当地址超过10000H时出错 { /* Check parameters */ assert_param(IS_FLASH_ADDRESS_OK(Address)); *(PointerAttr uint8_t*) (uint32_t)Address = Data; } 注:写FLASH前需要解锁 FLASH_Unlock(FLASH_MEMTYPE_PROG); //FLASH解锁 以下为EEPROM操作: #include "EEPROM.h" #include "stm8s_flash.h" /******************************************************************************* * ==EEPROM初始化函数== * FLASH_DeInit(); --> 复位EEPROM的寄存器值 * FLASH_Unlock(FLASH_MEMTYPE_DATA); --> 解锁 对 Data EEPROM memory 进行操作 * FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); --> 标准编程时间 *******************************************************************************/ void EEPROM_INIT(void) { FLASH_DeInit(); FLASH_Unlock(FLASH_MEMTYPE_DATA); FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); } /**************************************************************************************** * Function: Derive_EPWrite * Object: 写EEPROM * 输入: 头地址(0~2048) 数据指针 数据长 * 输出: 无 * 备注: 2K EEPROM 不能超过 ****************************************************************************************/ void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //写数据 for( ; Len > 0; Len--) { Refresh_WWDG_Window(); //喂狗 *p++ = *pData++; //等待写完成 while(!(FLASH_GetFlagStatus(FLASH_FLAG_EOP))); } //加锁 FLASH_Lock(FLASH_MEMTYPE_DATA); } /**************************************************************************************** * Function: Derive_EPRead * Object: 读EEPROM * 输入: 头地址(0~2048) 数据存放指针 数据长 * 输出: 无 * 备注: 2K EEPROM ****************************************************************************************/ void Derive_EPRead(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //读数据 for( ; Len > 0; Len--) { *pData++ = *p++; Refresh_WWDG_Window(); //喂狗 } //加锁EEPROM FLASH_Lock(FLASH_MEMTYPE_DATA); }
上一篇:STM8内部EEPROM的使用详解
下一篇:【STM8S】 窗口看门狗
推荐阅读
史海拾趣
为了进一步扩大市场份额,Calmos Systems Inc公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还积极参加各类行业展会和交流活动,与业内同行进行深入交流,了解行业动态和发展趋势。通过这些努力,公司的品牌知名度和影响力不断提升,为公司的长期发展打下了坚实的基础。
Dantona Industries非常重视人才的培养和团队建设。他们深知,一个优秀的团队是公司发展的基石。因此,公司投入大量资源用于员工培训、激励机制建设等方面。他们定期组织技术研讨会、团队拓展活动等,提升员工的业务能力和团队凝聚力。同时,公司还建立了完善的晋升机制和薪酬体系,确保员工能够享受到与公司共同成长的成果。这种以人为本的管理理念为公司的持续发展提供了有力保障。
为了进一步提升公司的竞争力和市场份额,EQCOLOGIC公司决定实施国际化战略。公司积极参与国际电子展会和交流活动,与国际同行建立广泛的合作关系;同时,还加大在海外市场的投入力度,拓展销售渠道和市场份额。通过不断的努力和创新,EQCOLOGIC的产品逐渐打入国际市场,公司的国际化战略也取得了显著成效。
随着环保意识的日益增强,电子行业对环保的要求也越来越高。EQCOLOGIC公司积极响应环保号召,将环保理念贯穿于产品研发、生产和销售的各个环节。公司采用环保的生产工艺和材料,减少污染物的排放;同时,还开展了一系列环保宣传活动,提高员工和消费者的环保意识。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。
近年来,电子行业面临着诸多变革和挑战,如智能化、物联网等新技术的发展。BOSER公司积极应对这些变革,不断调整和优化产品结构,加大在智能化、物联网等领域的研发投入。同时,公司还加强与高校、科研机构的合作,共同推动电子行业的创新与发展。
Broyce Control的故事始于1963年,当时创始人[XXXXX]在英国的一个工业小镇上开设了这家专注于控制面板制造的公司。起初,Broyce Control主要为当地的中小型工厂提供定制化的电气控制解决方案。由于[XXXXX]对电气技术的深刻理解和对工业应用的敏锐洞察,公司的产品在市场上迅速获得了认可。随着口碑的传播,订单量逐渐增加,Broyce Control逐渐积累起了一定的资本和技术储备。
某大型水泥厂具有多套电子地磅与计算机计量系统,由于都是地磅是串口设备无法远距离连接,因此计量PC服务器就近配置在现场,未能将实时获取的采集数据上传到中控室完成数据计量汇总难,并且设备配置分散重复。 ...… 查看全部问答∨ |
|
有没有人使用EBOX开发WinCE? 有没有人具体用过EBOX的机子,现在想找个EBOX-2300或是其他的EBOX系列机子玩X86结构的WinCE 6.0的开发,希望大家给点建议:EBOX系列的用在啥行业,与ARM的有竞争力? 在网上找个人转让“闲置2年”的EBOX-2300,开价60 ...… 查看全部问答∨ |
|
哪位大虾有stm32的中断服务程序的例程啊,我在写程序的时候使用了STM32_Init.c文件来初始化配置,写个简单的接受中断程序就好了,谢谢了最好有类似的例程,小弟感激涕零!最主要的是用STM32_Init.c这个文件… 查看全部问答∨ |
|
电路中需要用430的IO口控制步进电机的脉冲和方向,还有一个5V的阀,用io口控制5V通断,如果控制两个步进电机,两个阀,就需要六个9013,有没有实现这功能的集成电路芯片呢? ULN2003,这个芯片是不是可以实现这个功能?… 查看全部问答∨ |
1.首先让我们做下准备工作吧,需要准备的是工具,工欲善其事,必先利其器嘛。需要的工具有:一块电路板(PCB板),老虎钳,烙铁,焊锡。如果不熟悉工具的应用,建议先找点更简单的玩意先练练手~然后看看施工图纸,所需要的零件以及线路也标记在电 ...… 查看全部问答∨ |