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

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

[复制链接]
七哥 发布时间:2019-3-11 01:45
本帖最后由 toofree 于 2019-3-12 00:46 编辑 5 G, E  a& n) J8 W8 g3 N- Q

# J; |; J; Q# h1 G5 [2 s3 v" |  X; W3 ]
【STM8-SO8-DISCO】——9、测试EEPROM

+ }3 A. Z1 N  V6 u

( {1 U+ D  Y/ [) o5 Y9 X+ x* h2 h" i  本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。

* z1 K% S, x) e! R3 M6 o! @- X7 z2 L/ h( U! p# [2 B
  从数据手册得知,STM8S001J3只有128字节的EEPROM。
' A8 Z9 M4 V6 W( h/ q* D 01.jpg ( d" M. j( d7 K: F" o

* |% W* @9 K) X0 z1 ^3 l0 D
  EEPROM起始地址(基地址)0x4000。8 Z, u4 S  x' ~. G) K3 C7 ?
02.jpg
6 X/ H* a  g; \2 Z; D% h
$ S! K0 k/ B8 b4 E1 F( d
  在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。0 G  j7 V$ `+ N2 z  R# H2 [- [4 {4 ?9 P
21.jpg , ^9 P, w! l7 @
$ }7 @* }, D% e4 u
  16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。; d/ g. }& c! p( j6 @8 a
22.jpg   P7 L7 M$ ~, ?
  P- c1 a0 r5 m( L; b' i
  主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。5 m3 F% D9 r: B/ j/ q9 p# `; S
23.jpg 5 V' M0 v4 C# f* w- ?$ ~6 o% v
+ e& S$ |) t, u8 a' z' @
  读取当前全部EEPROM内容到数组GBuffer[];
4 @- ^/ b/ I3 H% I. ?  当第个数组元素为0x00时设置dir=1,否则设置为0;
2 @- p1 j0 r8 y  当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF;
/ k5 F3 C  ?  Q  W7 Q* U  再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。
! m7 O% F4 q6 O5 ]" M$ s  并增加设置两处断点。$ s4 J* z8 ^' t
24.jpg # r" p% L; A2 [3 {& Z4 N
' `0 {/ x/ ?7 q) m( r1 T2 a3 H5 n
  编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。
; I- M8 u1 U& a/ x 11.jpg
2 K7 k5 P7 G4 t, j" s  _: Q5 _6 n
. Y0 h4 N( @, k/ K# L, u  全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。
1 c' z" A5 r3 N 12.jpg $ o. c1 w0 f* E) P, t
2 G1 M) v9 m9 p
  全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。
* A  q& ]( [+ L: y* N+ Q* B& `3 j 13.jpg 1 s8 |" e5 Y& X3 F3 ^
2 |, l* {8 w! d
  停止程序,将调试复位后,重新打断点调试运行。
% [9 [0 s3 W+ H: l( L9 x1 v  此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。
( O1 _1 p! r9 N( g2 e3 M1 m7 K7 l! b6 G4 v4 d2 A7 s" h9 q! J
" e- s. Q' C' ]* I
  中间也测试过FLASH_EraseByte()函数,然而对于EEPROM读写来说,没啥作用,只是往地址中写0x00。对于EEPROM来说,不需要擦除操作,因为是“真EEPROM”。3 r( k" ?/ U# k8 ?2 k3 s6 N7 m5 m" T
# y* P6 F0 @9 ^4 R" Y
  至此,EEPROM字节读写测试结束。7 s/ J( Q3 I1 ?" p* l

# I' H4 s" F. p8 O( H" ~) m, L
: y- U* @7 S2 s+ a6 E- Y
  本贴测试工程附上:- \; B1 V: C! ?% S1 q2 J0 }
   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 手机版