6946|9

95

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教:STM8的EEPROM的之写保护 [复制链接]



这两天用到了EEPROM资源,写操作等都顺利,但是在写保护的问题上,一直找不到合适的做法,我个人比较转牛角尖,晒出问题和大家讨论。
部分程序代码如下:
/*******************************************************************************
Copyright (C), 2003-2009, winpark Electronics Co., Ltd.
Flie name:  for STM8Sxxx--eeprom
Author:  black.lu
Version: V1.00
Date:  2010-6-29
Description:对STM8系列单片机的内部EEPROM进行操作
*******************************************************************************/
#include "File_Include.h"
//----------------------------------------------------------
#define MASS_KEY1 0XAE //写操作密钥,注意FLASH与EEPROM的密钥相反
#define MASS_KEY2 0X56
#define EEP_BASE 0x4000 //EEPROM的起始地址
//----------------------------------------------------------
/***********************************************************
* 函数:void STM8_EEPROM_Init(void)
* 说明:EEPROM的寄存器初始化
* 参数:无
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Init(void)
{
//都初始化为默认值
FLASH_CR1=0X00;
FLASH_CR2=0X00;
FLASH_NCR2=0XFF;
}
/***********************************************************
* 函数:void STM8_EEPROM_MASS(void)
* 说明:对STM8的EEPROM写使能和写保护
* 参数:bool mass_en
  0--写保护
  1--写使能
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_MASS(bool mass_en)
{
if(mass_en)  //写使能
{
  FLASH_DUKR=MASS_KEY1;
  FLASH_DUKR=MASS_KEY2;
  while(!FLASH_IAPSR_DUL)asm("nop"); //等待硬件置位
}
/*else   //写保护
{
  FLASH_IAPSR_DUL=0;  
}*/
}
/***********************************************************
* 函数:void STM8_EEPROM_Write_Byte(void)
* 说明:EEPROM写一字节函数
* 参数:uint16 address----写入数据的偏移地址
  uint8 dat----写入的一字节数据
* 输出:无
* 返回:无
***********************************************************/
void STM8_EEPROM_Write_Byte(uint8 address, uint8 dat)
{
STM8_EEPROM_MASS(1); //密钥使能
*((uint8 *)(address+EEP_BASE))=dat; //写入地址
STM8_EEPROM_MASS(0); //禁止写入
}
首先很肯定的是,STM8的单字节可擦写的功能非常好用。我之前做法都是密钥开启写入权限,然后对地址写入,最后写保护。
前面两步骤都没有问题,最后写保护的操作
/*else   //写保护
{
  FLASH_IAPSR_DUL=0;  
}*/
编译器报错,提示此变量为不可修改变量。
在抱着对中文手册怀疑态度,查阅了英文手册,如下:
“Bit 3 DUL: Data EEPROM area unlocked flag
This bit is set by hardware and cleared by software by programming it to 0.
0: Data EEPROM area write protection enabled
1: Data EEPROM area write protection has been disabled by writing the correct MASS
keys


即软件可清零,郁闷……于是我斗胆更改了“iostm8.h”的头文件,将头文件库中的“__IO_REG8_BIT(FLASH_IAPSR, 0x505F, __READ, __BITS_FLASH_IAPSR);”
改为“__IO_REG8_BIT(FLASH_IAPSR, 0x505F, __READ_WRITE, __BITS_FLASH_IAPSR);”

结果编译通过……以为问题到此结束,但是仿真结果证明,FLASH_IAPSR寄存器确实不可更改,且此寄存器初始值为0X4A,那这样是不是说明只要我EEPROM的密钥已开启,就始终处于可改写状态?还是我有其它没有注意的地方?
此帖出自stm32/stm8论坛

最新回复

                                 楼主最郁闷的在这里: 结果编译通过……以为问题到此结束,但是仿真结果证明,FLASH_IAPSR寄存器确实不可更改,且此寄存器初始值为0X4A, 你以为仿真器是万能的?  详情 回复 发表于 2010-9-4 23:07
点赞 关注
 

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 这么冷清,自己顶一下。
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 顶了还是很冷清
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 我一般不会轻易改头文件,都是封装好的,有问题首先从自己开始找起
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
不太可能的吧,那也太那个了把。。。

MCU硬件在写操作成功后会不会自动清除呢?
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 可以复位的。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 我后来没改头文件,我改的目的只是想看看那个读保护位能不能软件清零,后来结果是不行。我再查查原因,有结果了再来。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 复位肯定是可以
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

9
 
写保护应该这样:
FLASH->IAPSR = (u8)(~FLASH_IAPSR_DUL);
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

10
 
楼主最郁闷的在这里:

结果编译通过……以为问题到此结束,但是仿真结果证明,FLASH_IAPSR寄存器确实不可更改,且此寄存器初始值为0X4A,

你以为仿真器是万能的?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表