本帖最后由 toofree 于 2019-3-12 00:46 编辑 5 G, E a& n) J8 W8 g3 N- Q 【STM8-SO8-DISCO】——9、测试EEPROM 本贴实验以样例程序“STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\FLASH\FLASH_DataProgram”为原型,将块编程写改为了字节写。 ! @- X7 z2 L/ h( U! p# [2 B 从数据手册得知,STM8S001J3只有128字节的EEPROM。 EEPROM起始地址(基地址)0x4000。8 Z, u4 S x' ~. G) K3 C7 ? 在main.c主程序中,修改添加EEPROM基地址宏定义,GPIO宏定义。测试数组GBuffer[128]定义。时钟配置、GPIO配置、Flash配置函数声明。0 G j7 V$ `+ N2 z R# H2 [- [4 {4 ?9 P $ }7 @* }, D% e4 u 16M系统时钟、GPIO配置LED和KEY、Flash配置解锁EEPROM。FLASH_SetProgrammingTime()函数作用暂时没去研究,保留。; d/ g. }& c! p( j6 @8 a P- c1 a0 r5 m( L; b' i 主函数main()中,有事没事加上5S开机延时,调用时钟配置、GPIO配置、Flash配置函数。5 m3 F% D9 r: B/ j/ q9 p# `; S + e& S$ |) t, u8 a' z' @ 读取当前全部EEPROM内容到数组GBuffer[]; 当第个数组元素为0x00时设置dir=1,否则设置为0; 当dir为0时,即GBuffer[0]不等于0x00时,依次递加写入EEPROM数据从0x00到0x7F;当dir为1时,依次写入EEPROM数据从0x80到0xFF; 再次读取全部EEPROM内容到数组GBuffer[],观察数据是否正确。 并增加设置两处断点。$ s4 J* z8 ^' t ' `0 {/ x/ ?7 q) m( r1 T2 a3 H5 n 编译、下载和调试运行。并打开变量观察窗口,打开内存窗口选择查看EEPROM数据。 全速运行,5S钟后,跑到第一处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x00到0x7F,是上一次程序运行是写入的数据。 2 G1 M) v9 m9 p 全速运行跑到第二处断点,查看EEPROM和数组GBuffer[]内容,依次全部为0x80到0xFF。取消第二处断点,程序全速运行,看到LED灯在闪烁。 2 |, l* {8 w! d 停止程序,将调试复位后,重新打断点调试运行。 此次看到的现象,在第一处断点处数据为0x80到0xFF;第二处断点处数据为0x00到0x7F。每次数据都会交换。 6 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 : y- U* @7 S2 s+ a6 E- Y 本贴测试工程附上:- \; B1 V: C! ?% S1 q2 J0 } |
支持支持 |
感谢 感谢 |
感谢,感谢 |