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

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

[复制链接]
七哥 发布时间:2019-3-11 01:45
本帖最后由 toofree 于 2019-3-12 00:46 编辑 / ]% `# Y. O' {) F3 S+ U/ M8 V/ Z+ s
# F# z, Q' B# L' v* }* P4 ]
【STM8-SO8-DISCO】——9、测试EEPROM
, z+ N1 r3 E* g3 q$ p
2 _! h5 X; o( b; e( k; H" k
  本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。

4 s/ J* ?5 T  G) u/ `+ S, F/ N: U5 \1 z
  从数据手册得知,STM8S001J3只有128字节的EEPROM。
. N3 N" y: j; n* g& n 01.jpg
. B5 V& G, }. |* ~6 N# g4 T# V/ w8 Q# `: W1 c, n! e3 M2 Z
  EEPROM起始地址(基地址)0x4000。/ @) l: r- w. r9 }6 f1 T
02.jpg
+ N* T4 S. V: d; J
2 }, j# F( }$ Q
  在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。
) X) m4 L/ j% l' z 21.jpg * ^4 A" k% x, L* t1 v

8 Y0 Q; {- O% q* {: `. R  16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。
% L/ M# l- A: o) j$ W, e( i" } 22.jpg
/ D% l4 w4 N6 x: ^# R4 K5 u( ?+ o1 s
  主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。; \- ]# p+ E) \& r6 @: w8 f
23.jpg ! v. m- z; K6 O

/ z* q: i2 O" x# b7 z. T  读取当前全部EEPROM内容到数组GBuffer[];5 ?) H! {6 i/ n' N9 S
  当第个数组元素为0x00时设置dir=1,否则设置为0;
  |7 d' i5 `% I. @. v5 R: Y) A  当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF;
' F% F) p! L1 Z' i! E% T$ a0 c  再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。# c* t! R& F" i3 {( K; Z2 N+ t& Y
  并增加设置两处断点。
; J+ ^3 h3 T, l* a- \! B+ y$ w- {: t 24.jpg
! D, \  J* _  Y7 V3 |; A) N( |# d2 b4 ^. p7 M
  编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。
& n) j! H+ H; z# N" g! { 11.jpg . z# `$ N0 r- Q

0 @' u$ l* B1 b/ k! N# ]9 W2 `2 Z  全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。
- l0 T0 D8 M) r7 k0 g& c 12.jpg 0 T& Q0 {( ~# c% M
5 a* }0 l: L' G1 N
  全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。! t, _$ I% K7 y
13.jpg 9 y( `8 L8 l% O, u

2 v9 A9 N( a) \  停止程序,将调试复位后,重新打断点调试运行。
" s& D' \$ H$ r5 c  此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。
. J* d7 O' t% P2 d: f" `1 R" D' d1 f8 \$ ^1 |

. w8 H# A2 t  e$ d; F; b: x- x  中间也测试过FLASH_EraseByte()函数,然而对于EEPROM读写来说,没啥作用,只是往地址中写0x00。对于EEPROM来说,不需要擦除操作,因为是“真EEPROM”。6 l4 p- ]# x# Q' K) d

  u, J8 A( U) {% C  至此,EEPROM字节读写测试结束。
8 G. x4 {- y! k8 j* f  s8 M
8 |* m. B* O# {8 I& i! s: B
# C* _+ H1 L+ N- S, Q
  本贴测试工程附上:% V. G2 g+ e  d: Z3 L0 q
   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 手机版