原标题:STM8L探索套件学习笔记-EEPROM(十一)

上节将到官方例程使用 EEPROM存储外围电路消耗的电流值,今天我们对 STM8L的EEPROM介绍下。STM8L带有的32K的FLASH和1K的EEPROM都可以编程和擦除,编程模式有1、字节byte,2、字word,3、BLO CK和4、编程和擦写完中断。

由于默认是锁定的,所以对FLASH和EEPROM编程首先要解锁,解锁的方式是写如寄存器特定值,0X56 0XAE。在IAR编译器当中,__eeprom 用于EEPROM 存储空间, 控制数据存放,控制指针类型和存放。@用于变量的绝对地址定位。也可以用#pragma location 命令。

EEPROM 区域数据存储:

用关键字 __eeprom 控制来存放, __eeprom关键字写在数据类型前后效果一样。

__eeprom unsigned char a;//定义一个变量存放在EEPROM空间

unsigned char __eeprom a;//效果同上

__eeprom unsigned char p[];//定义一个数组存放在EEPROM空间

对于EEPROM空间的变量操作同SRAM数据空间的操作方法一样,编译器会自动

调用 __EEPUT(ADR,VAL), __EEGET(VAR, ADR)宏函数来对EEPROM变量的

操作。

EEPROM空间绝对地址定位:

__eeprom unsigned char a @ 0x8;//定义一个变量存放在EEPROM空间

0X08单元

__eeprom unsigned char p[] @ 0x22//定义一个数组存放在EEPROM空间,

开始地址为0X22单元

__eeprom unsigned char a @ 0x08=9;//定义一个常数存放在EEPROM空

间0X08单元

__eeprom unsigned char p[] @0x22={1,2,3,4,5,6,7,8};

//定义一个组常数存放在EEPROM空间开始地址为0X22单元

由于常数在EEPROM空间的地址是已经分配的,读取EEPROM空间值可以用

变量和地址。

需要用户外加三个函数才能使得编译器使用_eeprom变量自动写入EEPROM。

/*

* The user must implement the three extern-declared functions be low

* in order for the compiler to be able to automatically write to the

* EEPROM memory when __eeprom variables are assigned to.

*/

/*

* Wait for the last data EEPROM operation to finish. Return 0 if the

* operation failed, otherwise non-zero. You may want to handle

* errors here, since the utility functions below simply ignore

* errors, aborting multi-write operations early.

*/

int __eeprom_wait_for_last_operation(void)

{

FLASH_Status_TypeDef status = FLASH_WaitForLastOperation(FLASH_MemType_Data);

return !!(status & ( FLASH_Status_Successful_Operation));

}

/*

* Write one byte to the data EEPROM memory.

*/

void __eeprom_program_byte(unsigned char __near * dst, unsigned char v)

{

FLASH_ProgramByte((u32)dst, (u8)v);

}

/*

* Write one 4-byte long word to the data EEPROM memory. The address

* must be 4-byte aligned.

*/

void __eeprom_program_long(unsigned char __near * dst, unsigned long v)

{

FLASH_ProgramWord((u32)dst, (u32)v);

}

加入了这三个函数后,我们就可以很方便的使用_eeprom的定义变量了

void main(void)

{

uint8_t temp1='a';

//temp1=2;

//temp2=0;

/* Initialize I/Os in Output Mode */

GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_Low_Fast);

//输出低电平-高速10M

GPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_Low_Fast);

//输出低电平-高速10M

FLASH_Unlock(FLASH_MemType_Data);

FLASH_ProgramByte(0x1001, temp1);//eeprom memory: address is 0x1001 =temp1

FLASH_WaitForLastOperation(FLASH_MemType_Data);

//temp2=FLASH_ReadByte(0x1000);

if(num=='a')

GPIO_SetBits(LED3_PORT,LED3_PIN);

while(1);

责任编辑:

eeprom stm8l 擦除 读写_STM8L探索套件学习笔记-EEPROM(十一)相关推荐

  1. STM8L探索套件学习笔记(转)

    源:STM8L探索套件学习笔记 转载于:https://www.cnblogs.com/LittleTiger/p/4460631.html

  2. eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写

    原标题:[STM8L]EEPROM操作读与写 带有片上EEPROM,常用来保存参数,事实上STM8L整个程序存储区都可以用于作为EEPROM,只是默认情况下被闭了. 不同型号的STM8L器件其内部默认 ...

  3. STM8L探索套件学习笔记-EXTI外部中断

    http://blog.chinaunix.net/uid-23085164-id-3534045.html

  4. 《Go语言圣经》学习笔记 第十一章 测试

    <Go语言圣经>学习笔记 第十一章 测试 目录 go test 测试函数 测试覆盖率 基准测试 剖析 示例函数 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语 ...

  5. Linux学习笔记(十一):磁盘配额、磁盘阵列与逻辑卷

    Linux学习笔记(十一):磁盘配额.磁盘阵列与逻辑卷 磁盘配额Quota 磁盘阵列RAID RAID level 软件磁盘阵列 逻辑卷管理器LVM 基本概念:PV, VG, LV 逻辑卷创建与管理 ...

  6. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  7. OpenCV学习笔记(十一)(十二)(十三)(十四)(十五)

    OpenCV学习笔记(十一)--谈谈像素的类型和对Templates的限制使用 Templates是c++的一个很强大的特征,可以是数据结构更加安全高效.但也会增加编译时间和代码的长度,当函数被频繁调 ...

  8. OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold()

    OpenCV学习笔记(十一):阈值化:threshold(),adaptivethreshold() 一.定义: 1)固定阈值操作 double threshold( InputArray src, ...

  9. QT学习笔记(十一):QString类

    QT学习笔记(十一):QString类 1.概述 2.编辑操作 3.查询操作 3.转换操作 1.概述 1.1 QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中.QStr ...

最新文章

  1. 探索Oracle之数据库升级八 12c Downgrade 11gR2
  2. 《系统集成项目管理工程师》必背100个知识点-98大数据的特点
  3. python win32转pdf 横版_使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)...
  4. ML.NET 0.9特性简介
  5. oracle常用的字符串函数,Oracle的常用字符函数实验展示
  6. ads s参数拟合_S参数仿真(ADS)
  7. 基于依存句法分析的资金账户交易画像
  8. IPC通信:互斥锁和条件变量
  9. 华为手机怎么设置字体?
  10. python小波包分解_小波包变换(Wavelet Packet Transform)的学习笔记
  11. 谷歌Chrome浏览器不再支持Flash Player的完全解决方案
  12. spring quartz 表达式在线生成器
  13. 马原期末复习知识点完整版!
  14. 百度地图开发入门(6):3D建筑
  15. 蓝桥杯 Java 算法提高 盾神与积木游戏
  16. 手机百度云如何打开doc
  17. 好物分享 | 也许是最好用的文件/目录对比软件
  18. 惠普暗影精灵6安装Ubuntu双系统显卡及Wi-Fi问题解决
  19. 《人物动作:角色骨骼、蒙皮制作工艺》
  20. Instagram 账号被封如何申诉拿回账号?ins账号解封经验分享

热门文章

  1. EntityFramework 7 OrderBy Skip Take-计算排序分页 SQL 翻译
  2. Android提供的LruCache类简介
  3. VC++2012编程演练数据结构《3》堆栈实现进制转换
  4. USACO 2.3 Money Systems(DP)
  5. PMCAFF | 产品经理如何设计敏捷开发流程?
  6. 2015版App推广全攻略:你所不知道的撕逼营销,事件营销和PR传播
  7. 命令行下从bak文件恢复sqlserver数据库方法
  8. input file 上传文件格式限制
  9. 对AFTER触发器的一些整理
  10. 没SBA,就试试SBS吧