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

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

[复制链接]
七哥 发布时间:2019-3-11 01:45
本帖最后由 toofree 于 2019-3-12 00:46 编辑 1 T1 A. e! E( H' z; [

5 a2 }% t9 K6 w6 P0 z& q4 P* R
【STM8-SO8-DISCO】——9、测试EEPROM

/ F: h; X8 f/ ~
- i2 j7 V" g! e5 s5 D
  本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。

5 d3 r# ^7 t/ Z3 E: n" I. R. c0 F1 r; h) O" k( q) ?
  从数据手册得知,STM8S001J3只有128字节的EEPROM。
: K2 O# G) O% [" l. N9 v 01.jpg * ~6 g/ R* j$ k
* J" F. m0 |" E4 r4 P  K# z& t
  EEPROM起始地址(基地址)0x4000。
: J3 w/ J7 c% i( L% u' Z 02.jpg
/ t2 C0 b3 Q) F  c9 r9 d, _, P$ B! N- q( r) q
  在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。. ~* R4 N- [7 s4 z2 }% o
21.jpg 0 [1 [  q# {6 O5 [

4 n+ m- N1 B: t3 ^  16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。- ]# [6 Z5 Q. o4 P* B
22.jpg
& T9 l. n, A; P& Q
3 Y+ C+ I8 A$ r/ `8 Y0 l4 o! j  主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。
8 P: w# ]5 x8 `7 m1 z 23.jpg 4 w: F5 z; s6 V/ p5 O* X
3 N5 i! o9 A# A. ^/ c
  读取当前全部EEPROM内容到数组GBuffer[];
1 N2 e) N4 J# _8 Q; U  当第个数组元素为0x00时设置dir=1,否则设置为0;  F" A2 c' t, u# H
  当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF;0 g) K$ }& z* s9 A
  再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。! v* c/ V, W/ P9 e/ ?; @; y
  并增加设置两处断点。
! N% B- ?; v0 {( ^; s# } 24.jpg
3 W) I2 H1 Z; Z% f! F: O: q( F- S4 f- f, f2 X7 y
  编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。+ U. Q* \7 v, M  r! `
11.jpg
! i$ k0 R" [" Y7 _- }2 H* L  d. j0 q, y
  全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。
" T- j: \8 v+ f1 A2 M 12.jpg 9 o5 K2 ^% q  Y, X$ e8 d  a" T

& f9 V. g' R0 }; p
  全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。8 w! {( _# p& Z+ u* f: A
13.jpg 3 S# r, j9 ?, y" B( [
, K( W" ~7 h( X) x  w# V" c, i" a& E
  停止程序,将调试复位后,重新打断点调试运行。. g9 I! t3 ^+ o5 @* H9 Q
  此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。
6 G! D4 k* s4 c+ e; |7 i' G" X, J4 K/ Q

, l6 h% C/ \8 S% z+ q$ x  S4 q  中间也测试过FLASH_EraseByte()函数,然而对于EEPROM读写来说,没啥作用,只是往地址中写0x00。对于EEPROM来说,不需要擦除操作,因为是“真EEPROM”。
) x  J# F# b( D- P5 y$ Z2 _6 V( o* h, Z9 `+ M
  至此,EEPROM字节读写测试结束。" A3 U( c) S+ I6 S/ R' n( n* T

! c4 ^1 n. ]9 K# ~) [' \

+ B; N: }- A- j$ z. W# e  本贴测试工程附上:
( x! W/ D; x  _- L" 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 手机版