打印
[STM8]

STM8S EEPROM的读写操作问题

[复制链接]
10752|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 日月华人 于 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
  }                              
}  
沙发
hugo0chen| | 2014-6-12 11:49 | 只看该作者
奇怪,我的也出现这样的问题,前段时间试着在EEPROM操作前增加一些延时,然后表现不错,现在又出现这样的问题。

使用特权

评论回复
板凳
pofu007| | 2014-6-13 13:18 | 只看该作者
**作EEPROM都是直接调用STM8S的固件库的,一定要自己写,也值得去参考下固件库!个人建议吧CR1的FIX位置1,设置为固定标准编程时间试试。

使用特权

评论回复
地板
769854714| | 2015-5-13 09:40 | 只看该作者
hugo0chen 发表于 2014-6-12 11:49
奇怪,我的也出现这样的问题,前段时间试着在EEPROM操作前增加一些延时,然后表现不错,现在又出现这样的问 ...

我也加延时  好了  但是不知道是什么问题   心里一直忐忑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝