STM8L101 EEPROM读写的问题
用下面的代码在仿真器跟踪状态下读写正常,芯片独立运行时不能写入。请高手指点一下。谢谢//CPU: STM8L101F3P6 主时钟设为2M
#define EEPROM_ADDR 0x9800
//---------------------------------------------------------------------
u8 Init_EEPROM(void)
{
u16 tc=0;
do
{
if(tc<0xffff) tc++; else return 1;
FLASH->DUKR=0xae;
FLASH->DUKR=0x56;
FLASH->CR2=0x00;
}while((FLASH->IAPSR & 0x08)==0);
return 0;
}
//-----------------------------------------------------------------------
u8 EEPROM_Read(u16 Addr,u8 *RxBuffer,u8 Length)
{
u8 *EEP;
EEP=(u8 *)(EEPROM_ADDR+Addr);
if(Init_EEPROM()) return 1;
while(Length--){
*RxBuffer++=*EEP++;
}
FLASH->IAPSR &= (uint8_t)FLASH_MemType_Data;//0xf7 lock
return 0;
}
//-----------------------------------------------------------------------
u8 EEPROM_Write(u16 Addr,u8 *RxBuffer,u8 Lenth)
{
u16 T=0;
u8 *EEP;
EEP=(u8 *)(EEPROM_ADDR+Addr);
if(Init_EEPROM()) return 1;
while(Lenth--){
*EEP++=*RxBuffer++;
T=0;
while((!(FLASH->IAPSR&0x04))&(T<0xFFFF)) T++;
if(T==0xFFFF)return 1;
}
FLASH->IAPSR &= (uint8_t)FLASH_MemType_Data; // 0xf7 lock
return 0;
}
//-----------------------------------------------------------------------
eeprom不要仿真看,eeprom速度慢的要死,最好是打印出来 //-----------------------------------------------------------------------
u8 EEPROM_Write(u16 Addr,u8 *RxBuffer,u8 Length)
{
u16 T=0;
uint8_t i=0;
u8 *EEP;
EEP=(u8 *)(EEPROM_ADDR+Addr);
FLASH->CR1 = 0x00;
FLASH->CR2 = 0x00;
while((FLASH->IAPSR&FLASH_FLAG_PUL)==0)
{
FLASH->PUKR = 0x56;
FLASH->PUKR = 0xAE;
}
for(i=0;i<Length;i++)
{
*EEP++=*RxBuffer++;
T=0;
while((FLASH->IAPSR)&FLASH_FLAG_EOP==0){
if(T<0xffff) T++;
else return 1;
};
}
FLASH->IAPSR &= 0xFD;
return 0;
}
//-----------------------------------------------------------------------
用这段代码可以写STM8L101-EEPROM 电压是否正常 eeprom不要仿真看,直接多接几个LED观察, 请问楼主,SMT8L101读写 EEPROM的问题解决没有呢?我也是遇到您类似的问题,不能写EEPROM 我也遇到这样问题,楼主如何解决的?
页:
[1]