本帖最后由 damiaa 于 2019-1-23 15:50 编辑 + k2 X8 \6 Y% b% @6 q
0 P0 }, e! ]5 }) h
STM8-SO8-DISCO】+ EEPROM读写
! X! W/ B$ s3 R% Y9 S【STM8-SO8-DISCO】+ EXIT中断中做按键去点灯帖子后 继续玩EEPROM
& B: S# G7 X2 v dEEPROM是地址0X4000开始的128字节: K; J+ V8 e) ^1 p
1,工程以上面的。
& @. v. C% g; ]/ J" Z% {, ^' c& G* {2,EEPROM 写程序- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num) J3 E1 ^0 q( ?$ P) {2 j$ l( s
- {
2 i/ _ \3 i9 [6 r% @( d/ E$ q i - uint8_t i;, M1 l. I$ c: f6 X7 v( Q" k
- /* Define FLASH programming time */# n' M5 Y: T" K- i8 F. V' C4 x
- FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
( a- F4 {6 _( V p- } - /* Unlock Data memory */
4 C, k5 ?7 i% u& K3 p; n4 y - FLASH_Unlock(FLASH_MEMTYPE_DATA);* V( u2 i. y0 v( j+ A( i9 E
- for(i=0;i<num;i++)
4 U }9 {2 j5 T/ d$ s" N% C' J7 m( \ - FLASH_ProgramByte(addr++, pDat[i]);" [; N! R4 f( z
- FLASH_Lock(FLASH_MEMTYPE_DATA);
?, L& W7 z `5 J - }
复制代码
2 }# v0 e+ k4 U ^, S3,EEPROM 读程序1 J1 `' n+ |6 k4 K
- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)
+ t4 ]! k0 J7 S ^7 [7 j7 y - {7 B* J; j( z, s4 S; @! ~- j
- uint8_t i;
: G4 z9 b( y( u* X5 f/ Y& V - //eeprom_unlock();
* n( d( p1 z+ E; i+ w - for(i=0;i<num;i++): Y4 z$ J8 o& P) A% q V
- pDat[i] = FLASH_ReadByte(addr++);. J2 k4 O8 K; U2 y$ ]5 W
- }
复制代码
$ c% d7 [3 u; L! L. S4,把TIM4关掉(不知道为啥要这样)6 Q) T2 f1 R9 a ~
5,主程序调用* w9 @/ A! Z: D/ i) C# ]+ v* \
- #include "stm8s.h") ?# D# n$ Z1 R% i, k- {5 P3 b( K
- #define LED_GPIO_PORT (GPIOA)
* d( w3 ?2 y7 A/ D8 H - #define LED_GPIO_PINS (GPIO_PIN_3)
, x; f9 _3 h1 D! t ~. H, K+ P& K - #define USER_BUTTON_GPIO_PORT (GPIOC)
; P# ~! T, }8 W8 g% n - #define USER_BUTTON_GPIO_PINS (GPIO_PIN_3) //这里可以设置为PC3,PC4,PC5中任何一个。 O5 W* W; L) d$ u! D
- #define TIM4_PERIOD 124
6 P4 I% L% W# _" ?% Q' G$ p - #define EEPROM_BEGIN 0x4000. a) L# ?1 s9 u" d4 {7 m, O
- void Delay(uint16_t nCount);
, T; e* F7 `+ Q# S3 [ e8 d - static void TIM4_Config(void);
! b" P/ T- h4 R0 S - void LED1_Toggle(void);
9 C- j& ~8 y8 X+ \3 y5 @* w6 N - void Exit_Init();& p# b5 }" E% Z! ?
- void eeprom_unlock(void);$ W! [0 B1 F7 j
- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);* Q' b. N9 j, G6 ]4 @
- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);
/ {; N: E* @6 `2 c - uint32_t addr= EEPROM_BEGIN;
$ c; ~% x3 G7 a - uint8_t test1[8],test2[8];
, [- F) Q) Z+ s" S* R - void main(void)
8 s7 D( M7 P1 g7 ~; r5 Z - {
& Z8 l' ?% G2 A - /* Initialize I/Os in Output Mode */
) z# J9 i% x" e) B) _/ X C - GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
( a1 m0 `& {" R! t7 e1 y& f) q - /* Initialize I/O in Input Mode with Interrupt */* _3 }# d; W& [7 c
- Exit_Init();
- {3 [0 z* L0 y. ]: M0 ` Y - /* TIM4 configuration -----------------------------------------*/
1 d. v/ Y+ ]5 Q9 s - //TIM4_Config(); ) j) n" U1 j8 ]9 `" Y X0 U7 \
- while (1)
* s: \' P0 p7 n0 P o - {7 d' ^# t% A3 {3 e3 J
- uint8_t j;+ E4 W2 J& o" w* T/ J8 `- p/ E c9 j
- for(j=0;j<8;j++)' H) r3 z; J0 i+ i! S
- test1[j] =10+j;
' e e0 z( |5 \) h4 U: L8 R - write_eeprom(EEPROM_BEGIN,&test1[0],8);
1 R/ C4 w" |3 M - Delay(10);
4 l8 L. c: P& H+ ~/ S- \8 j - read_eeprom(EEPROM_BEGIN,&test2[0],8);8 H2 j) k, L: x6 y+ E6 g; s
- Delay(10);
! X" J) {6 l: @0 e% o - }
复制代码 , q. V( \5 w/ _+ z" o/ g ]0 V
6,结果:
7 B+ n% {. j# o( w2 V
! ?3 [4 Q' A+ B
7,代码:
eeprom_uart_test.zip
(874.57 KB, 下载次数: 14)
|