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

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

[复制链接]
七哥 发布时间:2019-3-12 01:06
【STM8-SO8-DISCO】——10、串口打印EEPROM数据
5 I# Y* d/ u. o3 G" q' p

) }. W+ s$ X, q& C7 l' g  本贴在前贴的基础上,添加了串口打印EEPROM数据。
+ b) D. G$ B, M( e; F, X前贴链接:
! g2 t2 k4 a5 }: Y6 [+ K& B【STM8-SO8-DISCO】——9、字节方式读写EEPROM' {8 f( x) i9 U- M% J! W" E
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619717&fromuid=307297( D! X  I3 _: M3 D8 ?8 s: S
串口打印功能请参考:0 i+ X3 \) [1 q6 s9 O- ]' Y
【STM8-SO8-DISCO】——8、测试 UART1_Printf. Q- s. `! g4 a7 {* n: ?7 p6 h
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=619620&fromuid=307297
: a# O4 T- S$ e+ K. g7 k1 v- ?' j
  主函数main()实现。
! r0 }: v5 V% i
  1. void main(void)/ K. p$ t2 D6 q/ ~% Q; T
  2. {
    1 F0 k1 W5 [/ B! {% B$ l
  3.   uint8_t i = 0;   
    " i6 V  y7 |4 E" ?
  4.   uint8_t dir = 0;1 g9 m/ r- m7 y9 a

  5. 9 f% u% w+ ?, [" p2 R  B+ i% c
  6.   STARTUP_SWIM_DELAY_5S;
    7 r. l( a3 {! p6 ^& X
  7. ; I! `/ t5 y( u5 [+ o3 d
  8.   /* Clock configuration -----------------------------------------*/5 p* t, A0 R) m5 _6 t) V
  9.   CLK_Config();9 d% d3 ^) s- Y( y2 n

  10. 1 h& e0 z# I7 Y$ L/ E
  11.   /* GPIO Configuration ------------------------------------------*/2 `! h$ ]% G* h4 Q, z/ Q5 t$ B
  12.   GPIO_Config();  # S+ a# v# L8 j# A" x4 @( v; O

  13. * g& l2 o2 W$ u* J) G6 D
  14.   /* FLASH Configuration ------------------------------------------*/1 @6 Z! L5 A9 m3 g
  15.   FLASH_Config();
    # Q2 u! h- h7 r
  16.   % S$ _; k, E- ~+ U2 n5 b2 q" A
  17.   UART1_DeInit();  n$ h5 u! S& Y5 x0 G1 x: p
  18.   /* UART1 configuration ------------------------------------------------------*/
    9 J/ E% m% O2 j
  19.   /* UART1 configured as follow:2 S$ |% H) k& L0 e" I
  20.         - BaudRate = 115200 baud  
    + b$ K% d- Y. L. o  _* ^
  21.         - Word Length = 8 Bits! w% p- }' w9 C3 T7 v
  22.         - One Stop Bit
    5 R* l! X# q8 [% _
  23.         - No parity
      S* Q+ S( A6 c
  24.         - Receive and transmit enabled( l1 H  q3 o. T' t
  25.         - UART1 Clock disabled2 z  ~* H0 h' b' v# c' ^
  26.   */
    7 Y$ e: d) k3 [
  27.   UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
    5 {2 g) }5 h) q+ X. M3 z
  28.               UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);, i- K+ g0 L2 Z3 [
  29. 5 r9 p: O6 u) Y0 R' O, A
  30.   /* Output a message on Hyperterminal using printf function */1 u5 Y* K) V, F
  31.   printf("\n\rUART1 Example :retarget the C library printf()/getchar() functions to the UART\n\r");
    6 R$ ]- Q0 H& q8 z& g' u: W) h
  32.   printf("EEPROM Test!\n\r");. K& {2 j7 ^6 f2 _2 V; Y
  33.   2 G) j" X. K% n* B
  34.   /* ********************************************************************* */0 O& W; C5 x+ E
  35.   printf("Read from EEPROM Start:\n\r");  
    ; B, i4 F! y3 V' s
  36.   /* Fill the buffer with EEPROM Data */
    # b$ E' t0 m( l6 d' y$ O  E5 }
  37.   for (i=0;i<128;i++); B- K' S9 j3 [* g" {
  38.   {- i1 f1 r( ?; _# l, s# \
  39.     /* Read byte at a specified address i */
    - P# Z% `, D! M4 o
  40.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);1 L( c- O/ w4 Z
  41.   }
    9 v" K+ N; I; z2 o1 T: q
  42.   
    4 K4 V, M' y1 ?9 V8 v% o* B
  43.   if (GBuffer[0] == 0x00)2 ^4 D6 ~* f, x. {# U
  44.     dir = 1;: D2 N) @3 ~8 d1 @; n% C# i8 T# n
  45.   else
      D& {! U* _, x
  46.     dir = 0;; R% T8 Y, Y* M, u2 j% [0 ~
  47.   ; S! o# i3 V" n# E& B4 r* I0 l
  48.   for (i = 0; i < 128; i++)) G. P. b2 P: u' e5 Q" |- n' T
  49.   {
    ) X  R1 n; `- l7 J: |
  50.     printf("0x%02x,", GBuffer[i] );' u% S7 o3 F) d* R, f5 I
  51.     if ((i+1)%16 == 0)3 x# P3 J  [) V% g: T9 ]
  52.       printf("\n\r");6 l. G; z5 c: {  \) x) }3 n
  53.   }
    7 c. p: ?) j/ j3 x7 t0 K1 D$ }  {2 Z
  54.   printf("Reading End!\n\r");
    * N, u' S2 r) a
  55.   1 `* b$ j- }& `4 _6 y
  56.   /* ********************************************************************* */$ k% |" q9 P7 U1 Q4 q3 k- s
  57.   printf("Write EEPROM Start:\n\r");  
    ; f3 p4 S  @. A0 `6 E
  58.   for (i=0;i<128;i++)
    # R5 K: U( w# K8 y# Z: A$ z0 d
  59.   {
    / g9 _8 v7 L" a3 W( \; l
  60.     if (dir == 0), P% e9 b  p- }0 k. x; N
  61.       /* Write byte at a specified address i */
    ; j9 p8 ^: @. B% r
  62.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i);2 ?! j$ w! t3 u7 U+ P1 H* I* r% l
  63.     else! T# V0 O, V+ {8 y% K# x; [
  64.       /* Write byte at a specified address i */" l; v. t1 [+ r# @
  65.       FLASH_ProgramByte((EEPROM_BASE_ADDR+i),i+128);   
    " O) E/ J2 \/ }6 g0 s$ J
  66.   }: e/ z2 R/ t) B" B6 p( a
  67.   
    ; p9 m) E. Z4 p" X/ N
  68.   /* Fill the buffer with EEPROM Data */
    / {7 v5 _2 R+ R  `0 e7 q$ g
  69.   for (i=0;i<128;i++)" G7 D" v" f" z8 f) D4 A$ `- j
  70.   {
    4 r# r) _; Z; A; C
  71.     /* Read byte at a specified address i */
    : E9 J) X$ T; a# |: v0 V
  72.     GBuffer[i] = FLASH_ReadByte(EEPROM_BASE_ADDR+i);2 I% }' j2 ^9 I6 i/ ?8 n
  73.   }
    ; p# w0 ^7 Q5 C* f
  74.   
    $ W, C( q# l$ }0 I) v
  75.   for (i = 0; i < 128; i++)
    # T$ {7 v- @9 m5 M" l
  76.   {- u+ S/ M* _# s8 j0 o" \9 y* h9 L8 M
  77.     printf("0x%02x,", GBuffer[i] );$ {5 S* M  E! W' O  R4 j
  78.     if ((i+1)%16 == 0)& n9 s/ m) Y0 d) m
  79.       printf("\n\r");4 S7 M3 `7 g. f5 W$ Q8 `
  80.   }  
    # w1 U0 W' \8 b
  81.   printf("Writting End!\n\r");9 W. y* _, a4 W# J2 _8 e7 n
  82.   
    / S) t! l1 {. }& X/ i, I
  83.   /* ********************************************************************* */
    * J% o2 J; X! T# m
  84.   
    1 J2 _- }0 y4 z3 Y
  85.   while (1)
    / z4 L+ \0 D) v
  86.   {    ' {9 J) q! w' s/ [4 e! ~! u
  87.     GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);( U% H4 A, n6 B; N6 R
  88.     Delay(0xFFFF);
    $ P# l7 x; J4 e( Q( T- P) K
  89.   }( m) o, w8 ?) c
  90. }
复制代码

$ s2 h8 ^) N- j8 q  程序功能与前贴相似,只不过原来由打断点观察内存及变量,改为了从上位机串口助手观察。
6 F2 ~$ |. [8 t9 @3 `( [$ A
- h  B" T. T( |  实验连线如下图
0 |& W' E/ Q' q$ U. P3 a 01.jpg   U% [3 t* D- d) H
: C0 q9 r. ]/ r9 ]% c$ l
  第一次上电,串口打印内容。
9 s& @  e# Z9 S' n# k4 k 11.jpg
$ f/ j& {" d$ Y' w. L! Z6 B5 h. q
) H/ ]  w+ I& S$ O  E  第二次上电,串口打印内容。+ Q- ]1 J. k1 [/ ^5 I
12.jpg + p% {; @. |$ v
4 @8 \7 C8 }* ]% W- V6 L$ ?
  首先读取全部128字节EEPROM中的数据,打印到串口;然后修改EEPROM内容,再次从EEPROM读取全部数据,并打印。
5 o# F1 X5 P) H% L1 j  程序中判断EEPROM中第一个字节是否等于0x00,如果等于0x00,则往EEPROM中写入内容0x80到0xFF;如果不等于0x00,则往EEPROM写入0x00到0x7F。每次上电,EEPROM中内容都会修改一次。
( V( y1 J/ i" M2 \2 m2 e  K& m) \4 a% S$ S3 c1 L0 R
  至此,通过串口打印EEPROM内容实验完成。
2 n' X  n) d5 j1 `; {9 D  本贴测试工程附上:. J5 z* @; r+ U
   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管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版