你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM8-SO8-DISCO】——9、字节方式读写EEPROM

[复制链接]
七哥 发布时间:2019-3-11 01:45
本帖最后由 toofree 于 2019-3-12 00:46 编辑
$ u0 B5 U3 A/ b# e& C4 T+ `8 r0 n
【STM8-SO8-DISCO】——9、测试EEPROM
( F: @$ a, B. M* d/ M! D) o9 k
5 J2 o1 G/ H0 [3 |& o( H+ j/ `
  本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。
% X* Q) m3 g) W
6 }1 k5 S: O) A
  从数据手册得知,STM8S001J3只有128字节的EEPROM。
- t4 @: m; @3 L* O6 j 01.jpg 9 b) v6 }* W9 q9 R  ]( ^
! B$ ~/ K9 w8 B8 L
  EEPROM起始地址(基地址)0x4000。; {0 j+ T  @4 B& L: D
02.jpg 9 t+ J+ ?, q1 Z0 K+ l) E
( |8 Z& H4 M7 T& n
  在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。
. m4 b1 _& C5 c! e 21.jpg
7 G, \" Y) m! C3 A! Y( u8 A
" p, r& S' O0 f& v  16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。
" A2 Q( D! U  M) F  [ 22.jpg
6 Z5 I9 m( x3 Q2 W& V
! L/ I9 x) \1 Y- s! |$ d( V  主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。
' y* p6 v" S* N 23.jpg - {9 B2 ^2 M2 F" i/ e! u5 z

) D/ O1 U/ C3 n  b: [  读取当前全部EEPROM内容到数组GBuffer[];
  f% O! P, t1 X4 h6 Q2 s: I! j  当第个数组元素为0x00时设置dir=1,否则设置为0;
% h+ x, g( S2 d( F  F& N  当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF;
% }9 _( o. E" ?1 G7 ~' X  再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。
& T9 h" M2 J9 @! Y0 q  并增加设置两处断点。8 H4 x! R) R7 r7 l, Z
24.jpg / h3 Y9 P: H( D1 a& k, V! j& o- _
9 g$ A8 U6 m: W1 d
  编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。) U# \4 Z" N' {8 N0 M5 X
11.jpg / Z% h2 E6 V% M0 W6 y: c6 m' {

* I4 w" O4 U  \/ a: E, [9 o  全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。9 P" @, p  n- e4 a/ H
12.jpg & }: R5 Q7 w* a7 N% O- Q1 e

$ }( F# R- Q4 L7 @
  全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。: G7 |2 X! q9 `8 {
13.jpg ( ]6 `2 A  ~7 o/ T7 b9 D

8 A0 J5 K" X/ T' W7 |# {" Y2 ~  停止程序,将调试复位后,重新打断点调试运行。( `- ^0 }2 s9 d# G/ r0 k; M
  此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。7 k4 G1 P- ~: _9 @7 m
9 |/ ~6 c2 H7 H# G% I
; C+ R) k1 W) r$ ?1 i
  中间也测试过FLASH_EraseByte()函数,然而对于EEPROM读写来说,没啥作用,只是往地址中写0x00。对于EEPROM来说,不需要擦除操作,因为是“真EEPROM”。
! {7 H8 W! A/ P
. U; }6 D  G( _! @9 @" _. f  至此,EEPROM字节读写测试结束。
. C7 |5 H9 L& s
( u0 D  I+ \/ f* x8 a# p1 S" n# A
* S9 ~' M1 ~- Q- q
  本贴测试工程附上:
- f! ^& s' i* L6 L0 _9 s: a   STM8S_StdPeriph_Flash_EEPROM.rar (267 KB, 下载次数: 15)
收藏 评论3 发布时间:2019-3-11 01:45

举报

3个回答
STMCU-管管 回答时间:2019-3-22 17:51:38
支持支持
qytcs 回答时间:2019-6-10 10:56:39
感谢  感谢   
wangdexin 回答时间:2019-7-17 14:04:28
感谢,感谢
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版