#define FLASH_PROG_START_ADD ((ulong)0x008000) /*!< Program memory: start address */
#define FLASH_PROG_END_ADD ((ulong)0x027FFF) /*!< Program memory: end address */
#define FLASH_PROG_BLOCKS_NUMBER ((uint)1024) /*!< Program memory: total number of blocks */
#define FLASH_DATA_START_ADD ((ulong)0x004000) /*!< Data EEPROM memory: start address */
#define FLASH_DATA_END_ADDR ((ulong)0x0047FF) /*!< Data EEPROM memory: end address */
#define FLASH_DATA_BLOCKS_NUMBER ((uint)16) /*!< Data EEPROM memory: total number of blocks */
RE:关于stm8单片机EEPROM问题
RE:关于stm8单片机EEPROM问题
回复:关于stm8单片机EEPROM问题
从STM8的编程手册来看,里面的EEPROM主要是用于加密之类应用的,貌似FLASH被读写保护后EEPROM同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。
EEPROM读写前要解锁的。这个很简单,在技术文档里讲得很清楚。我用一个宏定义来代表EEPROM单元。
#define EEPROM_BASE_ADDR 0x4000
#define ADDRESS(i) (*(volatile unsigned char *)(EEPROM_BASE_ADDR + i))
读0x4000单元,用 x = ADDRESS(0); 读0x4001单元,用 x = ADDRESS(1);。。。。。。。。。。
写0x4000单元,用 ADDRESS(0) = x; 写0x4001单元,用 ADDRESS(1) = x; 。。。。。。。。。。
调试时,用 memory 窗口可以看到数据是否写进去。
RE:关于stm8单片机EEPROM问题
/*=========================================================
* 函 数 名: uchar f_MCU_UnLock_EEROM(void)
* 功能描述: EEROM解锁
=========================================================*/
uchar f_MCU_UnLock_EEROM(void)
{
uint iCnt;
FLASH_CR1|=0x01; //设置为标准编程时间
if(FLASH_IAPSR&0x08)return true; //已经解锁
else
{
FLASH_DUKR=0xAE;
FLASH_DUKR=0x56;
}
while(!(FLASH_IAPSR&0x08))
{
iCnt++;
if(iCnt>=65500)
{
return false;
}
}
return true;
}
/*=========================================================
* 函 数 名: void f_MCU_WriteByte(uchar ADD,uchar iData)
* 功能描述: 向EEROM写入一个字节
=========================================================*/
void f_MCU_WriteByte(uchar ADD,uchar iData)
{
ulong Start_ADD;
Start_ADD=FLASH_DATA_START_ADD+ADD;
*((@far uchar*)(Start_ADD))= iData;
}
/*=========================================================
* 函 数 名: uchar f_MCU_ReadByte(uchar ADD)
* 功能描述: 向EEROM读出一个字节
=========================================================*/
uchar f_MCU_ReadByte(uchar ADD)
{
ulong Start_ADD;
Start_ADD=FLASH_DATA_START_ADD+ ADD;
return(*((@far uchar*) Start_ADD));
}
/*=========================================================
* 函 数 名: void f_MCU_Lock_EEROM(void)
* 功能描述: EEROM上锁
=========================================================*/
void f_MCU_Lock_EEROM(void)
{
FLASH_IAPSR&=0xf7;
}
RE:关于stm8单片机EEPROM问题
#define FLASH_PROG_END_ADD ((ulong)0x027FFF) /*!< Program memory: end address */
#define FLASH_PROG_BLOCKS_NUMBER ((uint)1024) /*!< Program memory: total number of blocks */
#define FLASH_DATA_START_ADD ((ulong)0x004000) /*!< Data EEPROM memory: start address */
#define FLASH_DATA_END_ADDR ((ulong)0x0047FF) /*!< Data EEPROM memory: end address */
#define FLASH_DATA_BLOCKS_NUMBER ((uint)16) /*!< Data EEPROM memory: total number of blocks */
RE:关于stm8单片机EEPROM问题
回复:关于stm8单片机EEPROM问题
回复第 3 楼 zpwang于2009-12-16 16:14:30发表:
从STM8的编程手册来看,里面的EEPROM主要是用于加密之类应用的,貌似FLASH被读写保护后EEPROM同时被保护。在被读写保护后可能在应用程序中可能我发对其操作。不知我的理解是否正确。
EEPROM读写前要解锁的。这个很简单,在技术文档里讲得很清楚。我用一个宏定义来代表EEPROM单元。
#define EEPROM_BASE_ADDR 0x4000
#define ADDRESS(i) (*(volatile unsigned char *)(EEPROM_BASE_ADDR + i))
读0x4000单元,用 x = ADDRESS(0); 读0x4001单元,用 x = ADDRESS(1);。。。。。。。。。。
写0x4000单元,用 ADDRESS(0) = x; 写0x4001单元,用 ADDRESS(1) = x; 。。。。。。。。。。
调试时,用 memory 窗口可以看到数据是否写进去。
写得倒是简单,但是初学的不知道这其中的工作过程!
RE:关于stm8单片机EEPROM问题