本帖最后由 日月华人 于 2014-4-18 22:09 编辑
这是EEPROM的代码,编译可以通过,但是用STVP下载的时候会弹出verify failed at address 0x4000这样的对话框,请问什么原因?
#include "iostm8s103f3.h"
#define uchar unsigned char
#define uint unsigned int
//EEPROM初始化
void eeprom_init(void)
{
FLASH_CR1=0x00;
FLASH_CR2=0x00;
FLASH_NCR2=0xFF;
FLASH_DUKR=0xae; //锁1密匙
FLASH_DUKR=0x56; //锁2密匙
while(!(FLASH_IAPSR&0x08)); //等待解密就绪
}
//EEPROM指定地址写入一个数据
void eeprom_write(unsigned char addr, unsigned char dat)
{
unsigned char *p;
p=(unsigned char *)(0x4000+addr);
*p=dat;
while(!(FLASH_IAPSR&0x04)); //等待写操作成功
}
//EEPROM指定地址读出一个数据
uint eeprom_read( unsigned char addr)
{
unsigned char *p;
p=( unsigned char *)(0x4000+addr);
return *p;
}
// 函数功能:延时函数
// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ
// 输出参数:无
// 返 回 值:无
// 备 注:无
void DelayMS(unsigned int ms)
{
FLASH_CR1=0x00;
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms--;
}
}
// 函数功能:主函数
// 初始化GPIO端口PD3,驱动PD3为高电平和低电平
// 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ
// 输出参数:无
// 返 回 值:无
// 备 注:无
void main()
{
unsigned char value;
CLK_CKDIVR = 0x08;
PD_DDR = 0xff;
PD_CR1 = 0xff; // 将PD设置成推挽输出
PD_CR2 = 0x00;
eeprom_init();
eeprom_write(0x01,3); //向0x4001处写入‘3’
value=eeprom_read(0x01);
while(1)
{
PD_ODR = value; // 将PD的输出设置成1
DelayMS(500); // 延时500MS
}
}
|