& D# L8 L; u7 y+ r/ C- s
7 E! d, X3 i8 J$ [ 使用STM8L050读写内部eeprom测试程序。
. ]4 c8 O+ y, x w; {1 O0 c7 [; a STM8L050手册上EEPROM内部空间是256B。
* T6 O3 K4 \, e9 P- r; J % Y; o9 m) i8 r5 ? U
一、手册资料
9 Y* v* C3 L, b- B0 U$ p0 \ ; _: A9 h6 H0 {, [: f
8 m% d3 w6 Z* V* A/ \7 Y7 C/ Q
- }1 C0 P( Z- i 二、程序部分9 y2 s. T" h) x8 u
~0 T5 S& T' }% H% u5 @ 2.1、eeprom程序: {$ O' V5 W1 [
1 f8 S6 Z. m, D3 @- D- //eeprom.c
& G& t: H2 `7 X - #include "stm8l15x.h"% j" i$ h& Y2 g, Q4 k
: Y, T: F0 x) ?/ |9 ~- //eeprom初始化' V1 S2 ~* m1 y ?; ~* }
- void eeprom_init(void)
4 h% _2 D# ~ w - {
y* e' [) \. x; v - FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);
1 K3 E0 D0 g5 f% ~* r: |9 Z - FLASH_Unlock(FLASH_MemType_Data);5 G/ o3 {9 \3 D7 |# A, d
- while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);/ @: T/ Q) b' M: w
- }
o! l# F- d ~8 f2 G! }" y
* x4 G) n* R+ J8 |1 D% o7 k- //eeprom写一个字节0 F8 f |# k( ~, X/ z) G
- void eeprom_write(uint32_t addr, uint8_t dat), z/ g, \- I' T2 h% G0 Z
- {0 A( U7 j5 C5 R- I9 z$ E
- FLASH_ProgramByte(addr, dat);- T1 |# ]0 v2 I2 y2 W# W
- FLASH_WaitForLastOperation(FLASH_MemType_Data);' l% ], C4 v" ]# p& ?
- }
V9 ]5 F2 C0 p( v2 b, n - //eeprom读一个字节
1 x$ Z8 s' ?# Z9 E6 A1 K- S* K. z - uint8_t eeprom_read(uint32_t addr)
4 N4 Y( q- W; B% p; q% M& | - {: L [0 W5 O. T& Z
- uint8_t idat = 0;, y1 E( [2 t. r
- 1 g( @- b. {5 ~) |5 C" X5 `7 D8 F5 W
- idat=FLASH_ReadByte(addr);5 |( k) W" |9 V
- FLASH_WaitForLastOperation(FLASH_MemType_Data);
0 v* ]# _5 q/ q8 s" c3 r
. Y( q0 S+ ~3 Q3 N- return idat;
- O) A1 s( j2 |0 ~9 B, Y - } }# r3 y9 i% Q
. q0 g1 k# _* T' e2 ^- //eeprom.h5 i- |& n* k# ~& _( c# v2 Q% Y
- #ifndef __EEPROM_H
* B& [4 |9 N. Y$ W# L! m& k0 z$ j3 B - #define __EEPROM_H- t2 v- I2 S3 g* Z5 ?
( n. f1 W( d+ K" b* D0 f- void eeprom_init(void);
5 |4 e" o6 f t2 E8 g; C5 {$ B - void eeprom_write(uint32_t addr, uint8_t dat);. O1 G0 A- C3 `& R" Z S$ a: b* _& L6 s" b
- uint8_t eeprom_read(uint32_t addr);0 ]( h+ N E# B& n4 l
f0 Y* \- j, L. O! ?- #endif
复制代码
7 q) I3 Q7 | d8 O c6 F' u 2.2、主程序5 }' E6 m5 N2 j. W( M5 ~
: g; K6 u' J0 B, W/ B$ s- v- void main(void)
$ p! A, D! {# h3 | - {& l' x9 S# _* L, a8 g1 } w2 ?
- uint8_t i=0;
; d9 R0 l Y0 M h* Q- R2 Q - uint8_t j=0;( w1 R1 U) z. i0 a7 P& C0 ?. W4 _
- CLK_Config(); //时钟初始化
y, b3 T3 ^+ ~ o -
d" d9 `7 s8 s - Delay(0x2fffff); //延时5S
7 U( E: e* k: j- T5 Y9 p- k! W -
9 U" _" U, ~9 U* B - uart_init_halfduplex(); //串口初始化 0 ]6 Y1 F' G! ?
- eeprom_init(); //EEPROM初始化3 D4 N4 @3 G9 F: Y3 c
- for(i=0;i<255;i++)
* r& ~! W% m5 ]: ]3 V - {# m, o! v7 X1 O
- eeprom_write(0x1000+i, i);+ v6 X+ u) E1 h9 z- `8 J
- }
4 e7 r+ ~5 u1 H" Z) k
2 A+ G$ K% @9 h' K1 c: D1 X- while (1)
1 a& W2 @+ P) E1 B, { - {, i$ X6 s& N6 L( X5 h! \2 ?7 k5 A9 ^
- for(i=0;i<255;i++), H$ H: _$ M7 `3 ]1 ^8 r5 P
- {
& V% y, Q( G8 [& l$ I+ c - j=eeprom_read(0x1000+i);) H$ {9 Q: C/ B
- Uart_SendDat(j);* |/ x. }+ [5 \3 V
- }
. ^6 i% U% m9 [ - Delay(0xfffff);. [9 W" O- V0 r7 R: D/ n; a
- }$ D: I2 y0 s) F' h
- }
复制代码
7 u0 M6 q+ u5 Z+ Y& H% w 三、执行结果
\' G( i; Q( J ; p& ^# B" Z/ Y8 ^8 V4 H+ f
串口输出结果:5 |( n" f2 J- b0 |! S5 u
# b0 D; ]" M3 s8 P( D: G9 r$ Q2 z
1 c9 U) P3 g8 ~! u! h+ u% I' r
' J6 e& V$ \3 ?) }! o& ]
" |$ i, a- |! C/ h! t& | |