打印
[STM8]

关于stm8 EERPOM读写问题?

[复制链接]
1438|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyx1992106|  楼主 | 2017-4-6 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我第一次烧录一个全新的IC,我在软件里面对EEPROM进行了写操作,烧录完成我并没有执行程序,为什么用STVP查看eeprom里面就有数据?难道烧录的时候执行了程序?
沙发
lh18753385| | 2017-4-6 11:44 | 只看该作者
eeprom数据的值,和你要写的一样么?

使用特权

评论回复
板凳
zyx1992106|  楼主 | 2017-4-6 11:54 | 只看该作者
是啊,顺便问下:配置字和eeprom写的方法是一样的把?

使用特权

评论回复
地板
lh18753385| | 2017-4-6 12:01 | 只看该作者
代码贴出来吧。

使用特权

评论回复
5
zyx1992106|  楼主 | 2017-4-6 12:11 | 只看该作者
void SysInit(void)
{
  FoscInit();
  IrInit();
  GpioInit();
  PwmInit();
  E2promInit();
  if((E2promReadByte(0x4006)==0))//eeprom从未赋值过
  {
    FactoryResetData();//初始化需要保存到EEPROM的参数
  }
}
      
void FactoryResetData(void)
{
  E2promWriteByte(0,0); //clolr_index   
  E2promWriteByte(1,0);//display_mode
  E2promWriteByte(2,1);//light_level
  E2promWriteByte(3,1);//light_frequency
  E2promWriteByte(4,0);//power
  E2promWriteByte(5,0);//white_index
  E2promWriteByte(6,1);//表明EEPROM已经初始化
  E2promWriteByte(7,0);//flag_power_off
  *((unsigned char*)0x4803) = 0x01;
  *((unsigned char*)0x4804) = 0xfe;//PC5 PC6能输出PWM,option bytes;
}

使用特权

评论回复
6
zyx1992106|  楼主 | 2017-4-6 12:13 | 只看该作者
#include "eeprom.h"
#include<iostm8s003f3.h>

#define FLASH_RASS_KEY1 0x56
#define FLASH_RASS_KEY2 0xae
#define FLASH_BASE_ADD  0x4000
void E2pUnlock(void);

void E2promInit(void)
{
  FLASH_CR1  = 0x01;//编程时间为标准编程时间
  FLASH_CR2  = 0x80;//使能选项字编程
  FLASH_NCR2 = 0x7f;
  FLASH_IAPSR = 0x00;
  E2pUnlock();
}

void E2pUnlock(void)
{

  FLASH_DUKR = FLASH_RASS_KEY2;
  FLASH_DUKR = FLASH_RASS_KEY1;
  while((FLASH_IAPSR&0x08)== 0);//等待解锁
}

void E2promWriteByte(uint8_t offset,uint8_t data)
{
  uint8_t *pAdd =(uint8_t*) FLASH_BASE_ADD;
  pAdd += offset ;
  *pAdd = data;
  while((FLASH_IAPSR&0x04)==0);//等待编程完成,是否需要将该位清0?
}


uint8_t E2promReadByte(uint16_t address)
{
  return (*(uint8_t*)address);
}

使用特权

评论回复
7
zyx1992106|  楼主 | 2017-4-6 12:17 | 只看该作者
下面是EEPROM初始化,现在的问题就在于我想在烧录的时候不通过STVP软件配置ARF0,我想通过软件直接配置ARF0:
*((unsigned char*)0x4803) = 0x01;
  *((unsigned char*)0x4804) = 0xfe;//PC5 PC6能输出PWM,option bytes;
但是总是不成功,EEPROM都能正常读写

使用特权

评论回复
8
xyz549040622| | 2017-4-6 15:33 | 只看该作者
可以的呀。官方都有库函数和例程,直接用就好了。

使用特权

评论回复
9
zyx1992106|  楼主 | 2017-4-6 16:06 | 只看该作者
我不明白我这样写为什么配置位就是没有写进去,烧录还是要在STVP中配置ARF0位

使用特权

评论回复
10
gyfeng1017| | 2017-4-6 16:46 | 只看该作者
你烧录好了  ,再去读  应该就有上电复位的 过程了吧

使用特权

评论回复
11
gyfeng1017| | 2017-4-6 16:47 | 只看该作者
配置位 你没写过  当然  就没有了

使用特权

评论回复
12
zyx1992106|  楼主 | 2017-4-6 17:59 | 只看该作者
*((unsigned char*)0x4803) = 0x01;
  *((unsigned char*)0x4804) = 0xfe;//PC5 PC6能输出PWM,option bytes;     我这不就是写配置位吗?

使用特权

评论回复
13
zyx1992106|  楼主 | 2017-4-6 18:04 | 只看该作者
gyfeng1017 发表于 2017-4-6 16:46
你烧录好了  ,再去读  应该就有上电复位的 过程了吧

我是在板子烧录的,我想我烧录完成,复位就执行了程序,所以用stvp读取eeprom就有数据;但是我的配置位还是没有写进去啊?就是AFR寄存器我想把第0位置1 ;stm8写配置位和eeprom应该是一样的我看规格书!

使用特权

评论回复
14
wang1979| | 2017-4-6 19:09 | 只看该作者
if((E2promReadByte(0x4006)==0))//eeprom从未赋值过
  {
    FactoryResetData();//初始化需要保存到EEPROM的参数
  }

第一次用,默认的是0xff,所以就没执行条件里的语句

使用特权

评论回复
15
zyx1992106|  楼主 | 2017-4-7 09:25 | 只看该作者
不会啊,没用过的ic,eeprom里面全是0

使用特权

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

本版积分规则

33

主题

81

帖子

2

粉丝