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

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

[复制链接]
七哥 发布时间:2019-3-11 01:45
本帖最后由 toofree 于 2019-3-12 00:46 编辑 ! o$ R4 ^% B7 @+ T  Y
( B6 c% {" J% q! m
【STM8-SO8-DISCO】——9、测试EEPROM

/ w" i9 a; t4 `

' q( T. h. _+ f. z$ b/ L1 a3 }2 m  本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。

& U/ d8 u  Z( I1 Y! |# Y4 N/ _) Z
* ^* I* c9 S% Q  从数据手册得知,STM8S001J3只有128字节的EEPROM。
, b5 @) e2 [: G4 |+ I/ W 01.jpg
3 h5 h' L( q& ^0 U5 s! m2 e* v! Z
/ [5 M. G% \" a& y
  EEPROM起始地址(基地址)0x4000。
" n% Y. ?  u! k8 u6 m# f 02.jpg
. \1 F; W, a$ Q# Y- D, G2 j$ c
) |" j* ?3 ?* {3 T
  在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。
) e' a; l: d+ _& i- r0 h% b 21.jpg
* t  T* l" i- {$ D  d  e
8 \" o1 p, G2 S' }- ^7 r) n2 _1 N  16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。
7 z6 }6 j( S' Y8 T5 F% z 22.jpg ' [& t5 |3 h1 d. M' [' {" m# a

  W* h2 o  @! @3 W$ V  主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。
% n! ?6 t) G( g9 L 23.jpg $ O+ P& T/ [4 k1 J$ [

' i0 C. p6 Z9 X+ P  读取当前全部EEPROM内容到数组GBuffer[];
+ a1 T2 N$ n; b7 B  当第个数组元素为0x00时设置dir=1,否则设置为0;
- O# ~: f) l' N' ~5 p1 k$ E# e  当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF;
2 B5 X( t5 ?. u( S0 ?; n, j  再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。+ c- z( {1 A/ i
  并增加设置两处断点。1 Y2 E: D4 h) D1 N! C$ d. P
24.jpg
) H$ r% [- i% [. u/ Q0 Y# @# Y0 C" Y/ p& Z7 A8 P$ X
  编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。  h3 Z+ q3 f! s8 U  R/ S# P
11.jpg : C" z$ }$ a& z$ M( _

" W9 q) J: h8 s) G9 N  全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。3 G/ O  ]4 F  C$ n( A
12.jpg
( r/ J( Y; p9 V* P  k  {  i9 r. C. v% l
  全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。: N6 N: G/ U; N
13.jpg # J% L3 [1 v, Y" |9 y% C: u4 d

) H! ?6 q4 k, a' ~9 J  停止程序,将调试复位后,重新打断点调试运行。* E1 Q$ m5 F; c0 C# m
  此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。
: G$ t3 B+ c% e% e$ q: F2 ^8 F2 s  O7 n9 C+ f% d' D: x
/ V) \) Q4 U7 U. W' z
  中间也测试过FLASH_EraseByte()函数,然而对于EEPROM读写来说,没啥作用,只是往地址中写0x00。对于EEPROM来说,不需要擦除操作,因为是“真EEPROM”。( k. Y8 |9 _  _) i: n0 C( q
1 I$ k8 D2 I* W  Y( |  l4 X
  至此,EEPROM字节读写测试结束。
3 E& G: D5 x$ g% G( W7 z& }
0 i% e' _5 h% Y/ s+ {: w0 n
1 j  Y, k! j$ W, k6 n) e3 N3 e
  本贴测试工程附上:
* @. |- I$ D$ Y, f& e8 R+ Z2 G# U/ F   STM8S_StdPeriph_Flash_EEPROM.rar (267 KB, 下载次数: 18)
赞 收藏 评论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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版