本帖最后由 damiaa 于 2019-1-23 15:50 编辑 ( q' i f! ~# j3 H3 ?
C) I; Z4 u7 Q1 P
STM8-SO8-DISCO】+ EEPROM读写
+ R; s- c% C# {" e% I$ v' ~ Z【STM8-SO8-DISCO】+ EXIT中断中做按键去点灯帖子后 继续玩EEPROM. q7 k" F( ^4 {5 Q) G
EEPROM是地址0X4000开始的128字节; b" {2 P6 C8 q+ e% h: D
1,工程以上面的。
* J& y# |: `7 {. x2,EEPROM 写程序- void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)1 z. x7 b) ^/ {5 t
- {
1 A- j. @- h7 g" Z9 i - uint8_t i;
. v. s) A/ ? O2 a% e - /* Define FLASH programming time */ Z3 `) I! y* s" z7 X" Q
- FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); }" ]: M& M" X9 |
- /* Unlock Data memory */
+ L$ V3 u! {$ R/ p% r* {0 h - FLASH_Unlock(FLASH_MEMTYPE_DATA);
$ e9 H( s: R: y1 p - for(i=0;i<num;i++)
9 N) W$ A5 `* G0 D( f& i4 C0 S8 s) l# j - FLASH_ProgramByte(addr++, pDat[i]);
9 {; H: a1 \- q5 ?% r5 S g j# A - FLASH_Lock(FLASH_MEMTYPE_DATA);
5 h- x6 s0 j# S q) @/ I - }
复制代码
7 K& m: s4 z' l- Q3,EEPROM 读程序
, f7 B4 t# x4 h& q- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num)- k+ s" V9 u, I$ v1 a
- {+ P( G x4 p* z; ]. G0 G. ~) \
- uint8_t i;
5 T9 n0 s5 h6 R2 {2 w - //eeprom_unlock();
3 G/ B6 r7 t& _. X" f9 h - for(i=0;i<num;i++)
* k. J) u4 v5 \' c - pDat[i] = FLASH_ReadByte(addr++);# p1 h! {1 w7 w5 r" P$ v
- }
复制代码 & P5 _5 }9 b3 ?' k4 ]$ i; n
4,把TIM4关掉(不知道为啥要这样)
4 i/ X4 H- G! _8 m, n D X7 y0 |5,主程序调用
1 U/ D0 |) e( v. }/ I- #include "stm8s.h", @3 e0 E0 ~! |5 Q7 @' {- `% K' l
- #define LED_GPIO_PORT (GPIOA)
8 e+ e3 r+ E) w! ], h7 p - #define LED_GPIO_PINS (GPIO_PIN_3)
' U- m3 c1 m8 U8 N+ r - #define USER_BUTTON_GPIO_PORT (GPIOC)" F. D6 [7 X* U% m
- #define USER_BUTTON_GPIO_PINS (GPIO_PIN_3) //这里可以设置为PC3,PC4,PC5中任何一个。
1 k! K' P" T0 M" v& P; g - #define TIM4_PERIOD 124( y9 O2 o5 B. }
- #define EEPROM_BEGIN 0x4000
" x7 k. ?7 z/ C( R/ p - void Delay(uint16_t nCount);" f7 _* k8 ~) O: U( V0 v; r: W4 p
- static void TIM4_Config(void);
' C6 w( I( R3 _( @0 d, I# i - void LED1_Toggle(void);+ L+ F! k- _2 J( k
- void Exit_Init();
! k- i5 I2 M0 Z6 S; ~: T/ u$ @ - void eeprom_unlock(void);
# T- W E- n4 F! e* d - void write_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);, n, T. L; Q# t* H x: Y9 T( B
- void read_eeprom(uint32_t addr,uint8_t *pDat,uint8_t num);" q) ^8 y7 p, @
- uint32_t addr= EEPROM_BEGIN;
% c8 o$ T% t7 g - uint8_t test1[8],test2[8];
4 O& _! G9 ]0 q9 e - void main(void)$ b# w7 x$ V6 r0 U+ Y9 g8 F' S# }8 j
- { : i% s" L9 R J* m/ E
- /* Initialize I/Os in Output Mode */4 [, S% `2 i3 @+ L6 B
- GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);- Z( v( N- v8 q7 N6 E* |2 n
- /* Initialize I/O in Input Mode with Interrupt */3 q" ^$ z6 R& O. v3 X# z6 G2 X
- Exit_Init();. r& F: k& P, D4 W* C% @
- /* TIM4 configuration -----------------------------------------*/
' [5 u; g. x4 A- T. n+ e - //TIM4_Config();
. ?) M2 j) R7 b! n - while (1), ?& H% i9 R) l! T
- {
, Z! s1 ?7 r5 U& z8 {/ a6 P) M. \ - uint8_t j;' r2 D; i- s7 \$ P5 d/ f7 L$ }
- for(j=0;j<8;j++)/ Z7 z N4 y- @; _ q) L6 O
- test1[j] =10+j;
2 R/ ?) X' j* d5 e' l - write_eeprom(EEPROM_BEGIN,&test1[0],8);
6 F/ H: Q: d. ^) o/ x& r/ j* F - Delay(10);
! X* J1 y1 k; \& p) O% e - read_eeprom(EEPROM_BEGIN,&test2[0],8);
2 U0 [6 {! G. s) V, _ Q - Delay(10); - v: ]$ Y* |$ D- v- z3 N" s3 {8 |
- }
复制代码 + j f2 ^8 p) L9 J* C, q0 Z
6,结果:
- N( ~9 o1 s. \2 z3 q
+ ~. m' j6 i' T6 Z0 `6 U7,代码:
eeprom_uart_test.zip
(874.57 KB, 下载次数: 14)
|