比如我在代码里使用了以下eeprom空间 // eeprom 存储项定义 __no_init __eeprom unsigned char ee_damp_c; __no_init __eeprom unsigned char ee_dot_c; __no_init __eeprom unsigned char ee_default_c; __no_init __eeprom unsigned char ee_polling_addr; 在代码中如何初始化预置数据,想在下载代码的时候一同写入eeprom区,可以做到吗?我用的下载器是ST-link v2 仿真平台IAR FOR STM8 请大家指点! |
RE:stm8s eeprom如何在代码中预置数据?
2、可以实现下载。
实现有三个方法,一是编写专门的读写EEPROM函数,需要写入解锁命令。二是 利用这三个函数,你既然定义了__eeprom 这个字段,用这三个函数实现下载比较好,可以参考一下相关例程。FLASH_Unlock()FLASH_ProgramByte()FLASH_WaitForLastOperation()
三,实现编程器载入,那样的方式有时会不成功的,所以,用一二方法较好。
RE:stm8s eeprom如何在代码中预置数据?
{
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Unlock(FLASH_MEMTYPE_DATA);
for(unsigned short i=0;i
RE:stm8s eeprom如何在代码中预置数据?
void __eeprom_write_8(unsigned short addr_eep,unsigned char data)
{
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Unlock(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep, data);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Lock(FLASH_MEMTYPE_DATA);
}
void __eeprom_write_16(unsigned short addr_eep,unsigned short data)
{
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Unlock(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep, data/256);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep+1, data%256);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Lock(FLASH_MEMTYPE_DATA);
}
void __eeprom_write_32(unsigned short addr_eep,unsigned long data)
{
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Unlock(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep, (unsigned char)(data>>24));
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep+1, (unsigned char)(data>>16));
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep+2, (unsigned char)(data>>8));
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_ProgramByte(addr_eep+3, (unsigned char)(data>>0));
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Lock(FLASH_MEMTYPE_DATA);
}
void __eeprom_write_many(unsigned short addr_eep,unsigned short size,unsigned short dummy,unsigned short addr_ram)
{
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
FLASH_Unlock(FLASH_MEMTYPE_DATA);
for(unsigned short i=0;i
RE:stm8s eeprom如何在代码中预置数据?
如果要预置数据,建议在EEPROM中的固定地址存放一个标志,表示EEPROM是否被初始化过,再用一个标志表示EEPROM是否写入了预置数据。
1、如果EEPROM未被初始化,则初始化EEPROM(第一次刷固件时用)
2、如果EEPROM初始化过了,则检测与之数据是否存在,不存在则写入,存在则后续可使用;
3、软件刷新,更新标志。
可靠性的方案,尽量不依赖编译器,用自己的代码实现方案
RE:stm8s eeprom如何在代码中预置数据?
这条语句,连续读写出错,搞了几天。
感谢各位前辈