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

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

[复制链接]
七哥 发布时间:2019-3-12 01:06
【STM8-SO8-DISCO】——10、串口打印EEPROM数据

  r# @) P6 G8 D8 T! L7 O; D
- b" d7 K9 u& T0 R1 M  本贴在前贴的基础上,添加了串口打印EEPROM数据。
. p% T9 i/ u# }) a前贴链接:( u! h1 D# x1 k$ O- _. M
【STM8-SO8-DISCO】——9、字节方式读写EEPROM3 T: I+ s3 v; Y% e5 h0 `
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619717&fromuid=3072977 m' H! T) t+ g2 \# i
串口打印功能请参考:
* U2 K2 ]% Y$ d% z& l  m4 f, K【STM8-SO8-DISCO】——8、测试 UART1_Printf
) M1 i, n- j5 B0 j+ D/ q4 O- Y! \0 [https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619620&fromuid=307297
) G/ s9 q2 a* c$ X$ G- T$ m& H
* k, U; T/ `4 m2 [  主函数main()实现。
, e7 \% F- ?* P' p5 P1 C
  1. void main(void)  |2 }: x1 Z6 D. t7 Y
  2. {
    # Y2 X* b9 I% Z! X. _
  3.   uint8_t i = 0;    , y7 r+ A$ l  B$ A5 R- O8 P
  4.   uint8_t dir = 0;5 z$ f& x1 n& A# o1 e& P

  5. 0 N4 I3 d" f& g# X% P( w/ ~
  6.   STARTUP_SWIM_DELAY_5S;
    8 f5 m) g6 p( u" T; z4 h5 ?
  7. 1 b( j, a% F% `; z) n' p7 n: b
  8.   /* Clock configuration -----------------------------------------*/
    + E+ O( o5 d3 |5 R0 Z  D
  9.   CLK_Config();
    ( p" d8 r8 W8 i$ F) L
  10. 8 u. g0 _/ U0 g
  11.   /* GPIO Configuration ------------------------------------------*/
    & \- P  z' w  M/ V3 a# ^# W" }
  12.   GPIO_Config();  
    ( u+ C& }3 o2 `3 K5 j

  13. . ~5 v- I* g2 _+ r
  14.   /* FLASH Configuration ------------------------------------------*/
    % j; u2 A3 L( l% q- ?0 d$ L% ^
  15.   FLASH_Config();2 ~% J& W/ M4 v' ~6 {" U
  16.   
    0 k3 D3 u. L7 O( `
  17.   UART1_DeInit();
    ! ^4 r( v$ q; k! n6 t/ O0 I
  18.   /* UART1 configuration ------------------------------------------------------*/& Z" T* X; {) r" d, \
  19.   /* UART1 configured as follow:
    3 y. y- w6 p- I& A  P5 e5 b
  20.         - BaudRate = 115200 baud  . _, U" _1 I0 J
  21.         - Word Length = 8 Bits
    " u' l/ S" J* O0 k% `4 j2 I+ K
  22.         - One Stop Bit% x+ D3 }( C' V! L
  23.         - No parity
    9 A( J) U6 p( }$ [6 \# W# q( L& ~7 O
  24.         - Receive and transmit enabled$ t% e; C6 l9 T2 X
  25.         - UART1 Clock disabled( m+ @4 b+ D: E% \/ Q! I& v
  26.   */
    ( u  B2 M+ z2 ?8 Y4 N* ^
  27.   UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
    ) ~& A% a! r7 Y4 o/ O
  28.               UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);) j' V1 \9 M$ X9 K/ o8 u

  29. " l3 {/ w' j3 k, o, @, N7 m( V
  30.   /* Output a message on Hyperterminal using printf function */
    % |5 f% t  d4 \1 z9 E
  31.   printf("\n\rUART1 Example :retarget the C library printf()/getchar() functions to the UART\n\r");
    6 ~8 e% X8 f/ j1 o. I! h2 }* N
  32.   printf("EEPROM Test!\n\r");
    . c4 h& E9 M7 J: R2 R
  33.   
    $ l) D6 n$ A& w* h0 Q, X- l
  34.   /* ********************************************************************* */5 Q% g5 M( j8 e! O! ~# t. d
  35.   printf("Read from EEPROM Start:\n\r");  . H$ p3 A, C! R. n; ]
  36.   /* Fill the buffer with EEPROM Data */4 q! w' g& h, |) f- _
  37.   for (i=0;i<128;i++)
    5 l; `! r5 ~1 F  j8 `
  38.   {
    2 L. k; X8 n+ a  h# w1 p  H: Q
  39.     /* Read byte at a specified address i */
    - Z4 I  p: O2 n) p" o
  40.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);% W6 r2 v3 ]7 |
  41.   }; |- X8 r% O, e  {9 y6 Q; E& I" o
  42.   3 z8 H/ R" M. H: @
  43.   if (GBuffer[0] == 0x00)) \! E5 k2 M: E4 E1 W) Q* @
  44.     dir = 1;* k! a4 F# `7 V
  45.   else2 A' A) L# D7 S& ^
  46.     dir = 0;( T, d$ d& i( |5 B% [4 |$ m
  47.   
    0 R; w0 X' m& c* @) w, y% y' a
  48.   for (i = 0; i < 128; i++)" ?- q" A4 T3 O
  49.   {+ t/ B9 ^6 c' y5 {# P
  50.     printf("0x%02x,", GBuffer[i] );) |) z- n$ S; {8 J% f
  51.     if ((i+1)%16 == 0)1 {3 H' {2 Q8 H$ n
  52.       printf("\n\r");+ W* V& d7 E) V( G
  53.   }2 q! b2 d) g; Z8 M' u6 T
  54.   printf("Reading End!\n\r");, _5 G  C5 p& y% @! H! [. C
  55.   ) G; l+ }, K- s
  56.   /* ********************************************************************* */
    , B/ R3 |* A: k1 t0 T4 I
  57.   printf("Write EEPROM Start:\n\r");  7 x+ e6 s) c+ M& H! D& u. i( b* G
  58.   for (i=0;i<128;i++)
    , u! K% r( y/ ^8 y
  59.   {( r9 l4 Q# ^) R* H7 U- A' t
  60.     if (dir == 0)4 O% e# H( Y( h8 ~; C6 s
  61.       /* Write byte at a specified address i */
    % _- S. ^; K, A6 _
  62.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i);
    - [4 E# H. p. K( X. r
  63.     else
    8 t' B5 ~# E; M
  64.       /* Write byte at a specified address i */
    ' w& I8 d4 i+ a& x
  65.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i+128);    % }+ K8 j9 }; c3 }& x3 r* D+ Q/ L/ }
  66.   }4 f7 j: s- ]5 Q
  67.   # B' Y7 m8 V% T: z
  68.   /* Fill the buffer with EEPROM Data */
      T% G* Z) x2 k+ M% C4 X1 m
  69.   for (i=0;i<128;i++)- n& H, W! v9 b5 p7 i6 M
  70.   {( u0 O7 z/ D- ^6 j$ u
  71.     /* Read byte at a specified address i */
    * Y0 P! s# B$ [7 N# x; r1 |
  72.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);
    7 k+ t/ v2 e$ H: s6 M
  73.   }
    1 Q: B: x/ I$ e( T; z
  74.     K$ }0 c- ?- y  r7 B/ I
  75.   for (i = 0; i < 128; i++)
    . \3 \( W+ q( n. n' E4 {
  76.   {6 Y. x. r- Z0 v6 Q8 U7 Y! R
  77.     printf("0x%02x,", GBuffer[i] );
    7 q& j1 }4 ]$ w0 f9 l& T7 Y
  78.     if ((i+1)%16 == 0)
    8 b. ~( Z. G+ p! ?5 [  R
  79.       printf("\n\r");
    8 }, h7 W/ Z* g& U1 f) I, Z9 e& [
  80.   }  
    3 |4 X+ C5 ]4 B" h2 y1 H! G
  81.   printf("Writting End!\n\r");/ S* ^' f$ @9 x& b, {1 s% }
  82.   * Y) t  Q- c+ y
  83.   /* ********************************************************************* */
    ! q! h& z, m3 Q
  84.   
    0 e, m) X5 r# n# ]# o: L
  85.   while (1)  l2 B* |5 Y0 @0 |' |
  86.   {   
    ' q3 I  \# c1 ]
  87.     GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
    % e$ P) Q8 S% @1 b" k
  88.     Delay(0xFFFF);/ t* l1 [; Y' y9 W, G
  89.   }" Z5 [7 S/ D/ c5 u# R# Q# N
  90. }
复制代码
1 |* |6 @9 c& y3 B) H; L- q; d
  程序功能与前贴相似,只不过原来由打断点观察内存及变量,改为了从上位机串口助手观察。
) r  c3 W+ ^5 c! U9 n
0 @6 V6 l, E( ^' D4 r  实验连线如下图
! p  b/ `8 N4 ?/ e& W 01.jpg
/ b; w. E1 D" t2 F
( N# N& l* W: M6 M# ?2 C) ^9 W! K  第一次上电,串口打印内容。- p# h/ w& Y/ z1 ?4 b9 n; W# [6 G
11.jpg # c* y* ?* q7 ?$ ?/ A4 s+ D  c

: m# _0 e; G) c( j6 `& [; v  第二次上电,串口打印内容。4 t" u+ [! n; J7 }/ [- B
12.jpg
9 v' L  i5 o" @% G) c
, o2 X: l3 g" Z, r, Q, N  首先读取全部128字节EEPROM中的数据,打印到串口;然后修改EEPROM内容,再次从EEPROM读取全部数据,并打印。
/ ~" Y1 r; S# B: f) l  f% S4 }  程序中判断EEPROM中第一个字节是否等于0x00,如果等于0x00,则往EEPROM中写入内容0x80到0xFF;如果不等于0x00,则往EEPROM写入0x00到0x7F。每次上电,EEPROM中内容都会修改一次。
! [' H) u0 z+ \1 _4 L& G/ o3 X3 j% e/ ^3 J3 A
  至此,通过串口打印EEPROM内容实验完成。
. o7 Q9 t! p( {. c  本贴测试工程附上:3 Q% r: s, P4 i7 E- O5 q' W6 \
   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 手机版