本帖最后由 damiaa 于 2019-1-23 15:50 编辑
9 a1 t# ?/ B8 W) e8 A/ K# s" Z6 k# Z! V# G& W" g# a
STM8-SO8-DISCO】+ EEPROM读写2 j A8 m5 b5 a6 S! p
【STM8-SO8-DISCO】+ EXIT中断中做按键去点灯帖子后 继续玩EEPROM6 v1 n9 u A2 E9 Y8 u
EEPROM是地址0X4000开始的128字节; C r6 X" {5 S& F4 Y- ^+ P
1,工程以上面的。9 l1 x0 l: G2 N4 z% ?: S
2,EEPROM 写程序- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)
+ s1 y# ~" k. o% E - {
5 l: t" I4 R# w - uint8_t i;
( C/ A$ j O+ O! ^ - /* Define FLASH programming time */
( ?; k+ g, Q! U: m# m1 y - FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
1 J5 ^' x# V r2 X( p4 A6 s - /* Unlock Data memory */) f) @2 z' s7 L5 W8 H
- FLASH_Unlock(FLASH_MEMTYPE_DATA);
! M0 `2 S# W! \ T2 Q; g+ A4 p - for(i=0;i<num;i++)* \3 t* K$ [( c0 h3 q
- FLASH_ProgramByte(addr++, pDat[i]);
3 \1 R# j. b x, N - FLASH_Lock(FLASH_MEMTYPE_DATA);
! Z+ |& `4 L2 E% U3 _ - }
复制代码 2 W2 k% t6 g; H, R. A( t5 n
3,EEPROM 读程序
) V8 q: [+ ]) w- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)
6 b# }- @2 l" }; D6 c - {: E) Y' A/ O3 Q* Q. b" b
- uint8_t i;
8 O5 N8 s9 a6 M4 M1 }. G) o* h; J - //eeprom_unlock();
0 Y7 W; g7 z9 L& g- x1 ~ m" Q - for(i=0;i<num;i++); T0 w- [9 z$ w" `% J, l7 G; V
- pDat[i] = FLASH_ReadByte(addr++);
* i) a* _ n. F: t F* W- ] - }
复制代码 : Y, r+ c$ s' ^8 U: c' x
4,把TIM4关掉(不知道为啥要这样)
* g/ @0 ?4 ~ o, ]+ D$ Z7 |5,主程序调用
, h5 @& |" x: R' o7 w' ^- #include "stm8s.h"
1 D4 x. I' U7 a: j. K' o - #define LED_GPIO_PORT (GPIOA)
% t0 D4 k7 r/ M4 C - #define LED_GPIO_PINS (GPIO_PIN_3)" b/ Y3 z$ M5 s5 L' S
- #define USER_BUTTON_GPIO_PORT (GPIOC): \! ?/ y% p* f6 p* l6 e
- #define USER_BUTTON_GPIO_PINS (GPIO_PIN_3) //这里可以设置为PC3,PC4,PC5中任何一个。
, P) r& ?# v7 W) g0 } - #define TIM4_PERIOD 124
) W! ~% e$ k/ ~4 A: ?$ U: I - #define EEPROM_BEGIN 0x4000$ g6 g* F! R f0 e! L
- void Delay(uint16_t nCount);" V$ i- `% |/ L7 ]! Z5 x
- static void TIM4_Config(void); d( @7 G3 f G' b: [, v. s, I
- void LED1_Toggle(void);
- n" o; l9 ]- N' @ - void Exit_Init();
9 s' j% A# H3 p; T - void eeprom_unlock(void);
1 `' \9 j& r, ^6 i5 t8 o - void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);& B9 s2 v0 D, a3 k
- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);) d/ k5 P! @5 A3 ~$ B( L9 s
- uint32_t addr= EEPROM_BEGIN;
- g. ^7 d& w5 b$ f3 T/ o - uint8_t test1[8],test2[8];
. ~6 ]9 \8 l0 c+ L2 \+ P - void main(void)* Z6 B. s9 s7 ~8 `# F- s3 Z, X7 C
- {
! m w; [; f- I' o& U1 v2 | - /* Initialize I/Os in Output Mode */% H$ S: n% Q4 f5 q0 \
- GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);
1 L: ^) @3 k$ N5 f - /* Initialize I/O in Input Mode with Interrupt */
5 n4 d) Q1 i& ~" W# @; { - Exit_Init();9 K0 j" x9 n( r( y2 B$ p% `! f: B
- /* TIM4 configuration -----------------------------------------*/7 ~: ?8 I; s. V) d
- //TIM4_Config();
, V/ e# [" j( U - while (1)
: O3 s4 ~! z- y6 Q - {
! k. O% L8 l' `# R - uint8_t j;% f) U, o+ C# z$ u& w8 T X9 Z
- for(j=0;j<8;j++)5 {- ?" [) _5 T2 ?, z9 j
- test1[j] =10+j;& a+ B! [- E8 R/ I( \/ V: p
- write_eeprom(EEPROM_BEGIN,&test1[0],8);3 x/ Y* _" F' C
- Delay(10); 0 t5 d1 Q, _- z' K' Y/ \8 ~4 t9 r
- read_eeprom(EEPROM_BEGIN,&test2[0],8);( V7 r- g U7 _# Z, m0 a) n
- Delay(10);
2 ^) H: w3 y, s( ]' f: B7 h - }
复制代码 2 c" S% b" k' O C l
6,结果:( z& g9 z9 h( J" T3 n% p7 V5 W
& u) x4 ^! @$ Z7,代码:
eeprom_uart_test.zip
(874.57 KB, 下载次数: 14)
|