你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM8-SO8-DISCO】——10、串口打印EEPROM数据

[复制链接]
七哥 发布时间:2019-3-12 01:06
【STM8-SO8-DISCO】——10、串口打印EEPROM数据
' Z: f6 O* e( R" B# M% n; n) ?; N5 m

" C4 ^7 s- e* Q- ~3 E  本贴在前贴的基础上,添加了串口打印EEPROM数据。) }0 d( c9 a. L/ ?5 A
前贴链接:3 I9 q4 K" {2 |& M0 W8 s
【STM8-SO8-DISCO】——9、字节方式读写EEPROM
* H% b8 A1 o5 ?$ ~( J, `0 \. h5 \https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619717&fromuid=3072977 ^8 f) n2 D5 G) Q
串口打印功能请参考:
2 h, w1 _2 t, O, [5 U【STM8-SO8-DISCO】——8、测试 UART1_Printf& N8 A7 ~$ q6 X& J3 l, i
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619620&fromuid=307297
& h* }( S" M5 k4 ?- ~- |9 }; c2 g, b/ }7 Z" [# `
  主函数main()实现。
4 ]6 H% U# m2 j1 X5 s# K
  1. void main(void)
    8 r# t) h8 g& ]. d0 e
  2. {
    7 t. Z8 [# _. q, G" h, p
  3.   uint8_t i = 0;    # J6 B% \; [- G; y
  4.   uint8_t dir = 0;+ M7 l) d2 q  d/ k7 {) v

  5. : d) ]3 j/ k, k  H
  6.   STARTUP_SWIM_DELAY_5S;
    $ {3 n. N$ h$ d8 L. o
  7. 1 S. u0 A, Q/ o# X3 _1 T: p% k
  8.   /* Clock configuration -----------------------------------------*/
    5 T  j" F2 l/ Q) j% @4 ]; ?
  9.   CLK_Config();0 B0 Z. m' }" W4 r9 x: h

  10. ; V! t2 Q: Z' t
  11.   /* GPIO Configuration ------------------------------------------*/
    8 ^" t+ R0 m3 e6 m
  12.   GPIO_Config();  
    ' Q  Y# X! x# H8 x3 @

  13. 4 s$ O$ f) R. C' x9 Q' |
  14.   /* FLASH Configuration ------------------------------------------*/& k( G# w  H2 L# x8 p3 |3 i
  15.   FLASH_Config();
    5 V& y' y$ F% _* v! \
  16.   ! E5 p$ |$ f, e, V2 i  a3 s5 i
  17.   UART1_DeInit();
    * y8 l4 R8 Y# X4 e9 k
  18.   /* UART1 configuration ------------------------------------------------------*/
    ) ^/ Q$ M% c$ S( k& I! P# l9 h* h
  19.   /* UART1 configured as follow:; v- ?! ~- Z  e. W- G
  20.         - BaudRate = 115200 baud  
    % m) P) E) Z% N" @
  21.         - Word Length = 8 Bits
    / ?) {6 M8 w' Z/ w* b
  22.         - One Stop Bit
    4 m' y4 I7 H6 r6 ~" z* x+ @
  23.         - No parity( N6 k" X3 F) U* n) E* b* b
  24.         - Receive and transmit enabled
    ' I" `: a: p% N  @( G
  25.         - UART1 Clock disabled
    3 L  w& m3 x9 V4 q5 ]. r7 C
  26.   */
    ! [$ X' {+ J0 w+ |* y$ ~. T
  27.   UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
    - F* w: y: H/ }) T
  28.               UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
    ) F2 p0 Y3 [7 ^8 v% u; W
  29. 6 s  _( e4 }3 k( n: [
  30.   /* Output a message on Hyperterminal using printf function */, `! H# A3 J: S9 f* x2 \8 G
  31.   printf("\n\rUART1 Example :retarget the C library printf()/getchar() functions to the UART\n\r");
    * E" c7 S/ P: {4 o# C5 w
  32.   printf("EEPROM Test!\n\r");
    : q0 S6 D5 _& \- r
  33.   
    * \- N8 A9 ]% v' c7 ]" f
  34.   /* ********************************************************************* */) d9 T" S: O' N9 V
  35.   printf("Read from EEPROM Start:\n\r");  
    ! L9 e8 ^& ?7 q; p" x4 L6 D
  36.   /* Fill the buffer with EEPROM Data */
    8 h" f4 X7 Q* [; Z  J& _% Z+ [
  37.   for (i=0;i<128;i++)
    $ `5 ]- i4 _! g5 I- `0 u$ W
  38.   {
    - @% c& S: F( T' z3 s$ b
  39.     /* Read byte at a specified address i */0 }4 ~3 U# ?) D0 o2 A
  40.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);3 q2 x* ]4 Y+ [& y  l
  41.   }$ |. ]9 X. T& s" \, [) h6 X6 s6 \" D
  42.   
    + M0 R2 y; ~4 N/ x0 m4 K
  43.   if (GBuffer[0] == 0x00)5 l/ @9 t& n( h% {! e2 _5 W
  44.     dir = 1;
    3 P2 U1 r9 L( h" w& L& L
  45.   else
    & `+ b5 Z0 [7 X4 ~4 N
  46.     dir = 0;
    1 X/ w' k0 g/ H, t8 z
  47.   ! T1 m- |" w" w7 Z0 x
  48.   for (i = 0; i < 128; i++)9 K- b1 v. H7 u, u5 h
  49.   {
    4 ~0 e% M) ?/ i/ Y( M! n! y3 \
  50.     printf("0x%02x,", GBuffer[i] );0 E. {& u4 E. z! z
  51.     if ((i+1)%16 == 0)
    . |9 w+ ^$ |  M, ?
  52.       printf("\n\r");; y$ h6 _3 Q! W& p' c
  53.   }0 A) J* w% N/ I$ f+ C. y
  54.   printf("Reading End!\n\r");2 n, D* r4 X% p2 a, g  `* H" Q
  55.   
    , L& M% ?" G- J; i; |
  56.   /* ********************************************************************* */
    / N& Y! t) D2 p
  57.   printf("Write EEPROM Start:\n\r");  7 R) ~1 ^' Q4 m4 b$ d. a) O; ^
  58.   for (i=0;i<128;i++)/ O+ k" r5 A1 z* e- {
  59.   {9 E1 G- }. O3 d! Z; r
  60.     if (dir == 0); w& `) F) Q. V
  61.       /* Write byte at a specified address i */
    9 x/ t1 U+ x# v, X
  62.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i);
    0 ]+ Q& x( U4 B. s  x& J
  63.     else
    " u4 K5 d  h- D4 h
  64.       /* Write byte at a specified address i */
    2 t/ I6 K" V+ j
  65.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i+128);    ) o/ Y# K; q& I, r* U, X' j
  66.   }4 [1 C% ~: y& z9 o; ^" E
  67.   + ]' |0 x2 u6 }
  68.   /* Fill the buffer with EEPROM Data */
    # g5 q( b( L* z; d" C
  69.   for (i=0;i<128;i++)6 F' P8 A" P% |" f" s+ Z
  70.   {1 e/ l$ r  x. b
  71.     /* Read byte at a specified address i */
    ; R9 |2 }& o0 [2 z. E" y1 N  I
  72.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);
    " W+ Y+ c6 G  g; g! W: I0 a
  73.   }  o& I: T. n5 T9 G4 F. V
  74.   
    & P5 m. i* Q' ]3 g6 f
  75.   for (i = 0; i < 128; i++)  [! m- V! j3 p; I  x
  76.   {% ?! d  a& W0 v
  77.     printf("0x%02x,", GBuffer[i] );- n: S9 D" a( d
  78.     if ((i+1)%16 == 0)
    9 o+ S) @$ l- l
  79.       printf("\n\r");/ K" ~' Z8 E! m+ Y
  80.   }  
    ; N3 J2 [( X2 e# t1 @
  81.   printf("Writting End!\n\r");
    - m9 d+ t3 ^" F8 F) p4 J, V
  82.   
    * s. l1 {; Z' w+ P3 w
  83.   /* ********************************************************************* */
    + c3 ]( c: x4 ^
  84.   
    2 H; i: p" }1 l+ ?6 N5 V
  85.   while (1)7 ]& D. v+ p" u
  86.   {    7 F+ b1 C2 S( N
  87.     GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);9 K# _) e6 p5 C1 `' e, s3 O4 t+ O  j" S+ i
  88.     Delay(0xFFFF);2 c* N2 j+ U* M7 I0 f
  89.   }  ]( z8 S' {: `
  90. }
复制代码

" p# l. c  X; _7 V0 F1 c  程序功能与前贴相似,只不过原来由打断点观察内存及变量,改为了从上位机串口助手观察。# I) p/ Z& N& Z( D. f( w7 [

* i8 u3 l, @5 a3 T0 w1 n$ b  实验连线如下图
- L! n5 ], D9 A  g" ^0 ^  P 01.jpg 8 r* {6 e5 R$ r6 G# t/ t! n$ `) k
( v* H$ F& Y2 V# ?/ g6 x' }
  第一次上电,串口打印内容。
  G2 ?& z0 n' m/ }& n9 l 11.jpg
2 R$ F) x+ x9 H. l- l& e' `" ]) X, e7 x1 F# N6 q
  第二次上电,串口打印内容。
) m: M0 N5 o& f" I1 I, _% Y 12.jpg
) V5 g  T9 M/ |; t0 k% m. W1 b7 P1 M" }5 W
  首先读取全部128字节EEPROM中的数据,打印到串口;然后修改EEPROM内容,再次从EEPROM读取全部数据,并打印。: u8 n$ w% A" x( G/ S* y4 c
  程序中判断EEPROM中第一个字节是否等于0x00,如果等于0x00,则往EEPROM中写入内容0x80到0xFF;如果不等于0x00,则往EEPROM写入0x00到0x7F。每次上电,EEPROM中内容都会修改一次。
  R8 p2 M4 K" b( F/ x6 q; F% a" y: o: E  \
  至此,通过串口打印EEPROM内容实验完成。
: }" c4 }  K- C4 R' [; I" }  本贴测试工程附上:  j7 e& l4 B& ]5 o2 N" q
   STM8S_StdPeriph_Flash_EEPROM_Printf.rar (268.3 KB, 下载次数: 26)
收藏 1 评论6 发布时间:2019-3-12 01:06

举报

6个回答
qytcs 回答时间:2019-6-10 10:58:12
学习学习
唐英tcy 回答时间:2019-6-13 19:06:19
谢谢分享
qytcs 回答时间:2019-6-17 16:14:34
学习学习
TEACHER33 回答时间:2019-6-21 21:29:24
谢谢分享
engerHi 回答时间:2019-7-8 00:22:32
这些日子正在搞8S的芯片,有点启发性的都下下来看一下,谢谢楼主!
yf14789652 回答时间:2020-1-7 08:24:36
学习一下串口打印 数字要怎么调配。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版