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

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

[复制链接]
七哥 发布时间:2019-3-12 01:06
【STM8-SO8-DISCO】——10、串口打印EEPROM数据
: k$ v. r6 B" p  t1 v1 L$ @

! ?. `: y: i. Z+ H# V2 j; ^  本贴在前贴的基础上,添加了串口打印EEPROM数据。. M$ B! K" L3 V+ O9 d" i
前贴链接:
! l. `8 U# ~  [9 f* a4 V1 `【STM8-SO8-DISCO】——9、字节方式读写EEPROM" f* `0 W" _# w7 e) y
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619717&fromuid=307297
5 t( E6 q, P% i' [& v7 C, F) S0 ?串口打印功能请参考:5 r# N1 \4 V; l) I
【STM8-SO8-DISCO】——8、测试 UART1_Printf) `6 b$ I) e& E; F* e' \8 S* r
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619620&fromuid=307297
) _) A; a- H: N3 I) \( `% b2 b6 G9 F. H8 {" ^9 E# B2 y( Z
  主函数main()实现。
" Q( C) y; \% z5 g0 K4 J
  1. void main(void)
    $ h3 k7 |# T' C
  2. {
    5 |6 J9 w( ?  O0 \6 `# a# C& `
  3.   uint8_t i = 0;    ' H% X. S! T& N6 H3 s$ U/ U( Y6 H
  4.   uint8_t dir = 0;: n! H7 O6 w; r' l. z6 L

  5. / m/ l- F2 h( o9 z, F. \4 d5 ?
  6.   STARTUP_SWIM_DELAY_5S;
      C) X, U. M) K+ y) `
  7. , \, t0 U) K- k5 `8 h5 o0 g5 c
  8.   /* Clock configuration -----------------------------------------*/
      {' q( c& C- Q# C$ }$ N# G4 t3 d
  9.   CLK_Config();8 q( R/ E* b* @# c% a

  10. $ v: ]3 _" Q9 f! s4 R
  11.   /* GPIO Configuration ------------------------------------------*/9 n% K1 l% G: o; m5 t7 K( W9 F
  12.   GPIO_Config();  
    0 i. n; w$ ?) v3 @# c& |" L) G; E( D
  13. ) o% f! q8 i2 E* y  F
  14.   /* FLASH Configuration ------------------------------------------*/
    ; M4 M6 y0 M! J/ c- W1 A# m
  15.   FLASH_Config();, v$ b) _% n! L/ m
  16.   
    ( I. d# v% v4 H8 x/ C8 L
  17.   UART1_DeInit();
    , G( |4 n* [+ w& y+ I. r& S1 I
  18.   /* UART1 configuration ------------------------------------------------------*/
    4 ]( O9 ?+ j' s
  19.   /* UART1 configured as follow:! k4 L9 w, o" j3 P* d7 m
  20.         - BaudRate = 115200 baud  , M; {3 t: x9 y5 H" p) h& T+ k$ n1 n
  21.         - Word Length = 8 Bits
      _1 K( U; U' ~: x" J
  22.         - One Stop Bit
    # g, T8 ~) u% J/ r
  23.         - No parity
    $ z- b+ _+ Z1 H0 Q& ^; C% m# m  b
  24.         - Receive and transmit enabled  i; K$ Y4 l8 ]( H7 g+ g
  25.         - UART1 Clock disabled
    ) y, g9 p- c0 t5 D
  26.   */: r  X1 e  I) n: D0 m) t( R
  27.   UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
    # p) r) p# i: e4 y
  28.               UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);) T! n- N% Q# a% V+ U+ h
  29. 6 b' r. a( u  n+ E+ ?) X/ G
  30.   /* Output a message on Hyperterminal using printf function */
    5 ^8 @+ B" @- b4 ?. K3 u
  31.   printf("\n\rUART1 Example :retarget the C library printf()/getchar() functions to the UART\n\r");3 p2 _( T4 w, o; l
  32.   printf("EEPROM Test!\n\r");
    8 P- L& G0 y6 r5 {: w
  33.   + Q' O3 Q7 M' p3 M% C+ o
  34.   /* ********************************************************************* */
    8 b9 L  l+ _2 s# Z, W' q1 Q+ U; `
  35.   printf("Read from EEPROM Start:\n\r");  
    1 Z& K; c& T$ G2 z8 k) D  g3 X: c6 p
  36.   /* Fill the buffer with EEPROM Data */
    7 [& C: K+ M' u2 r- G3 G# W
  37.   for (i=0;i<128;i++)- H* a9 ~5 n' ?, [) [6 l  l) U, k
  38.   {1 t: v$ D2 x8 s- D5 e) X
  39.     /* Read byte at a specified address i */
    ) v% q* K' d6 u0 |" H2 g) K/ B
  40.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);
    8 Z/ @. K+ ^( I# F2 ^( N( p
  41.   }
    8 Z% D+ ^. q4 G! B
  42.   
    4 G8 Z: ~/ m+ l6 q9 r1 W
  43.   if (GBuffer[0] == 0x00)
    * v2 \. ?; S+ c. a: o' k) P
  44.     dir = 1;
    " L8 {/ [- B$ F* C+ T+ }' S) L9 V
  45.   else
    8 Z! O" u% g1 a, V
  46.     dir = 0;" j( t7 j5 A1 Q% Q- e: N& S  t4 [
  47.   5 G* c5 [- A  s5 D$ q
  48.   for (i = 0; i < 128; i++)
    ( J9 ?- Z7 R# V; X* H
  49.   {, u4 G4 ^" X6 p4 M) ?" _( P, i
  50.     printf("0x%02x,", GBuffer[i] );* Z. e6 P+ n% H* ^8 d# H$ o6 }
  51.     if ((i+1)%16 == 0)  M6 S% A1 E# V5 B4 f
  52.       printf("\n\r");, r; U9 t& o, R+ Z- ?6 Z
  53.   }
    9 Q) k' A! a4 [
  54.   printf("Reading End!\n\r");3 B* p$ e+ C% P1 s
  55.   9 X5 \$ q( G9 z8 }5 p
  56.   /* ********************************************************************* */
    7 h. J, z, U7 G5 F9 Q
  57.   printf("Write EEPROM Start:\n\r");  2 a! R' {+ Q/ m: D. T
  58.   for (i=0;i<128;i++)* Y  m( T/ `# I( v: o$ o
  59.   {
    " J: }0 U' F( x8 Q1 [
  60.     if (dir == 0)7 ~0 K( s- V* r
  61.       /* Write byte at a specified address i */* z$ W) V9 F0 g0 H
  62.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i);4 r. B; \3 f  V+ j
  63.     else6 L0 C' ~1 x3 w( [* Z
  64.       /* Write byte at a specified address i */
    , ]/ U6 F( S3 k- w; D2 s- }
  65.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i+128);    7 j: L0 o/ i% f% M) e$ s1 y
  66.   }
    : b) u2 @* Q" p0 d7 k, R( R
  67.   & v% b0 K# W8 B0 n
  68.   /* Fill the buffer with EEPROM Data */
    & D* W$ r$ C/ k+ R+ r2 Y
  69.   for (i=0;i<128;i++)
    ' {( y+ q2 i. ^; @# e- a% `9 y
  70.   {! s/ F" S& A0 Z2 A" }8 I4 J
  71.     /* Read byte at a specified address i */
    0 B9 f" I8 x; p' i: L
  72.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);5 Q, S( w% p" {
  73.   }
    , D6 V' N* R" q, [
  74.   
    , D6 o7 H# c  E9 ]
  75.   for (i = 0; i < 128; i++)* }; Z8 T" E/ O" [8 G
  76.   {2 f  [9 y! R4 g5 s" g5 k- M
  77.     printf("0x%02x,", GBuffer[i] );# f' `2 F2 p' Y2 P) x! j
  78.     if ((i+1)%16 == 0)6 v7 k: ^1 r0 A9 s5 C
  79.       printf("\n\r");( s' }) K' `2 ~6 c+ b& M1 I: k
  80.   }  
    3 P% n+ j& N$ v  p9 T' _
  81.   printf("Writting End!\n\r");
    5 R0 z5 }) h9 r
  82.   2 C2 c& ]- N$ Y6 H
  83.   /* ********************************************************************* */
    6 }# S8 ]9 o4 i: e
  84.   - V( A7 J* ~+ X& k
  85.   while (1)
    ! Y" T2 g  D8 p0 h( W7 }
  86.   {    8 q) E5 D# n* j7 U+ m2 F9 j; c
  87.     GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);5 o7 p8 k2 H$ ?
  88.     Delay(0xFFFF);
    - c* J( E- A, {. @/ Y
  89.   }
    7 b' ~& F/ W, ]/ \6 Y3 d
  90. }
复制代码

6 ?: w. r; T7 r; ^4 B- @  程序功能与前贴相似,只不过原来由打断点观察内存及变量,改为了从上位机串口助手观察。& p" Q6 K3 a, s' `, W$ n. R2 `2 L
% s% U4 L- l5 Z, X: u' B1 b  L
  实验连线如下图
8 B+ f( H( I+ v5 D" [ 01.jpg
5 c  B- v2 M2 z/ j% T4 _- ~3 ?
  Y  y5 c7 Q4 r8 i: h) K9 ]  第一次上电,串口打印内容。
$ U1 F$ C6 l' [/ U9 m/ d9 `% u, S 11.jpg
* c  M% x+ E9 `" g9 Z& A
: ]' N; G. j+ w) o& ^# y0 ]% _6 s  第二次上电,串口打印内容。9 |0 J( N1 d' _9 f  w
12.jpg
' v2 W, A" q4 W1 x+ Q5 h8 v- W8 m# }' G" n3 Q7 ]/ T
  首先读取全部128字节EEPROM中的数据,打印到串口;然后修改EEPROM内容,再次从EEPROM读取全部数据,并打印。
$ N9 m% a' {3 e' c2 m$ X# z  程序中判断EEPROM中第一个字节是否等于0x00,如果等于0x00,则往EEPROM中写入内容0x80到0xFF;如果不等于0x00,则往EEPROM写入0x00到0x7F。每次上电,EEPROM中内容都会修改一次。
4 z. Q, k4 E. ]9 m6 ~) [3 ~( j. O& W9 R
  至此,通过串口打印EEPROM内容实验完成。( C# ^7 s; L$ J3 |! V! u! e
  本贴测试工程附上:
% `$ t3 A! ]1 {! T/ x   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 手机版