本帖最后由 damiaa 于 2019-1-23 15:50 编辑 & B) {% D# ^; L, Y+ b2 w& A
8 @: Z0 ?& I5 S; H8 W' {: N& }1 x2 W
STM8-SO8-DISCO】+ EEPROM读写- T. M* X. e6 Y/ o# T
【STM8-SO8-DISCO】+ EXIT中断中做按键去点灯帖子后 继续玩EEPROM- v+ T0 n, P. i5 M5 a; P
EEPROM是地址0X4000开始的128字节- k4 J# J- K$ o/ h; k3 F
1,工程以上面的。% |. s' E1 N. T0 |) q0 H1 J8 S% J
2,EEPROM 写程序- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)
# P. Y( b# c/ r! C, | - {
: |9 O8 V2 W3 ~* D$ ^3 T - uint8_t i;
7 H& M4 G- F! q- [; a - /* Define FLASH programming time */& {' d# _; H6 @& y) ?
- FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);1 v( H% j8 | R/ d3 I w( Y- v/ a
- /* Unlock Data memory */3 c9 u! t" e& C4 k9 h" @2 w* P
- FLASH_Unlock(FLASH_MEMTYPE_DATA);& l' `) O$ ?# p; j4 i8 x, |. p
- for(i=0;i<num;i++)# m0 T% Y1 j* F+ h# ?
- FLASH_ProgramByte(addr++, pDat[i]);0 E9 Z$ u+ L m3 ^2 [& W% A4 \8 {
- FLASH_Lock(FLASH_MEMTYPE_DATA);% G, O; i$ Q$ p* h
- }
复制代码
6 s% z3 n& M& B( f) R) }5 N3,EEPROM 读程序2 c0 Q7 y! y' j! R. o+ l
- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)5 s: }+ r; Y6 H9 l9 E' E
- {
' h) Y5 `6 U% K: k2 q4 r - uint8_t i;: u9 X, S/ r2 `& E
- //eeprom_unlock();" s$ u& q" z7 b3 m, Z- ^0 i( g0 V
- for(i=0;i<num;i++)
3 [! ~- _" l6 O F: h% j3 F - pDat[i] = FLASH_ReadByte(addr++);
! Y7 D' v4 d- ?: E: U- R! L - }
复制代码
+ T$ m$ M ~2 Y3 P4,把TIM4关掉(不知道为啥要这样)* X, {" e: ]: ~) y" d4 p
5,主程序调用
/ o- x$ F, V; j- #include "stm8s.h") W4 `3 Q$ V$ V
- #define LED_GPIO_PORT (GPIOA) B- m0 E( z' R) E, ^1 R; W# g6 g
- #define LED_GPIO_PINS (GPIO_PIN_3)+ s8 [, j9 Z+ J
- #define USER_BUTTON_GPIO_PORT (GPIOC)
% X+ v G0 T i' k7 @6 {' \ - #define USER_BUTTON_GPIO_PINS (GPIO_PIN_3) //这里可以设置为PC3,PC4,PC5中任何一个。7 G! B5 f w! d$ H
- #define TIM4_PERIOD 124
! l7 e' x2 ~# Y U. {- \5 @ - #define EEPROM_BEGIN 0x4000/ c7 y' H0 y% A; `% t! n8 ?
- void Delay(uint16_t nCount);( a! ~6 U- q l- i& C3 u1 }2 m
- static void TIM4_Config(void);+ u2 l7 o+ f6 q! K; e H* }0 C: E
- void LED1_Toggle(void);
8 V6 r: Q1 v# C P2 x4 p - void Exit_Init();' b0 U- m0 e% {! t* `
- void eeprom_unlock(void);/ T2 \8 C4 V; @: L
- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);
+ {5 _* _1 y1 _% P5 } - void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);8 r. [; @! [! A* O
- uint32_t addr= EEPROM_BEGIN;
3 ^6 O0 G( O' [( `0 F - uint8_t test1[8],test2[8];& \: ^' y9 @' I4 d! w3 i) u$ Z9 G' f
- void main(void)
7 A$ u% M: N3 ^, n# | - { # p f2 c4 e6 }
- /* Initialize I/Os in Output Mode */
, a! |# S2 I/ V4 s/ [2 L( ? - GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
, Z! d- J$ s" J& [" w* h o# ? - /* Initialize I/O in Input Mode with Interrupt */
7 {% E" m# j4 l2 }3 [! ^4 n" Z - Exit_Init();
4 P X0 u" |6 v: Z) V3 W( X9 K7 Z - /* TIM4 configuration -----------------------------------------*/5 t! O' B. L2 c2 [( t$ v
- //TIM4_Config(); 4 T* ]# f8 z+ `4 w+ w0 b) @
- while (1)
0 h1 n1 M9 Z$ i6 S6 C1 |8 } - {9 @, S t! \" S: z1 r; {
- uint8_t j;
& S, M3 X O1 |1 L - for(j=0;j<8;j++)
1 n7 [# p8 g6 n( l6 K! f( \3 J* X - test1[j] =10+j;
: T! b+ d3 m+ [' {$ O - write_eeprom(EEPROM_BEGIN,&test1[0],8);1 N, A/ k2 R0 G' ~* u" T' F' K
- Delay(10); " }4 J ?8 r2 z
- read_eeprom(EEPROM_BEGIN,&test2[0],8);
% g' t$ r4 g G2 X, H8 O9 l2 f - Delay(10); , |7 ?1 W0 Z7 G& L& z4 i' [
- }
复制代码
% v5 ~0 ` |1 `" ?/ q7 H) }$ o. w6,结果:
/ ~2 S4 T4 z& r% H# n {$ t, K
" q" ^% [2 P( k7 M# w5 Q+ E
7,代码:
eeprom_uart_test.zip
(874.57 KB, 下载次数: 16)
|