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

【STM32G4 NUCLEO G431RB】+ OLED显示

[复制链接]
阿青_STM32 发布时间:2019-10-6 17:42
      国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4  NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
& _! U' @" O  D$ n4 l      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
( ?( |( Q% x0 ]+ v# _8 |' D       原理图.png ) _0 m5 q, }) Q5 J
    部分代码如下:
1 q6 z" O/ d6 q
, e# ]0 j( k: {( Q4 d
  1. void IIC_Start(); v8 }' u. `" O9 |# C% E
  2. {: d. a5 K, r3 c( \1 H" F, g
  3. & Q- O$ H) D3 U' k# p/ z& ^
  4.         OLED_SCLK_Set() ;
    ' P% e8 B% k+ ^# _+ l3 c. ]! z
  5.         OLED_SDIN_Set();
    . D. ]  E2 y0 n9 e8 a1 c8 ]
  6.         OLED_SDIN_Clr();6 V1 K! K+ `0 w0 o
  7.         OLED_SCLK_Clr();
    3 v/ A. b9 f$ C3 g* V% h; O
  8. }
    - g1 X/ w- Z$ @* I( N
  9. void IIC_Stop()- M3 m0 F' w" \$ N& O) |
  10. {* c& E( M9 z" k# O
  11.         OLED_SCLK_Set() ;& q! S# _1 w8 m
  12.         OLED_SDIN_Clr();
    ; F8 O' G& M8 E$ X/ ?, w2 E7 m- r; T
  13.         OLED_SDIN_Set();, o# s: k$ C- F) O/ }8 W: R
  14. }
    ; J+ Y- s/ o% \% z. B$ }
  15. void IIC_Wait_Ack()
    + i' e$ M2 d1 k  Q# N) Z
  16. {9 q) @; m5 `5 O9 q0 W. g
  17.             OLED_SCLK_Set() ;- Q! }  A9 g! D
  18.         OLED_SCLK_Clr();
    / q" E! q5 Z8 X+ A" B' o4 p$ I( a4 ~* W  Q
  19. }; a7 g. R4 d* A. y* t
  20. void Write_IIC_Byte(unsigned char IIC_Byte)4 C( `3 I' B% [  O; D8 ~' ?
  21. {
    * q% o% u7 b$ h: T) W2 d
  22.         unsigned char i;" p( R9 H+ c1 q: S- i: X9 ~1 J5 H, o
  23.         unsigned char m,da;
    0 K& e# K# m6 [. W7 N/ c
  24.         da=IIC_Byte;
    + u. g! s: [4 C
  25.         OLED_SCLK_Clr();
    ' e: n& \0 N) P
  26.         for(i=0;i<8;i++)               
    + X) a+ Q  P$ S4 ^- ~
  27.         {
    6 E/ [% j. M* d* j
  28.                         m=da;5 w! O$ h+ G9 a5 Q2 G5 N
  29.                 m=m&0x80;' D/ H8 V9 @  A  r0 W( W1 w
  30.                 if(m==0x80)
    7 z( l9 n3 J* Y8 t9 D. R' x) m
  31.                 {OLED_SDIN_Set();}3 I- {+ b& J+ A7 E# V
  32.                 else OLED_SDIN_Clr();' b1 Z/ r( B4 A# O
  33.                         da=da<<1;1 @* ?. F% N- s4 N2 ^4 s' C
  34.                 OLED_SCLK_Set();
    & }4 ^$ h9 R9 O3 K/ t8 N: z3 }3 Y
  35.                 OLED_SCLK_Clr();5 z% D9 v7 i$ }, e
  36.                 }& g: c8 j& V% `* k
  37. }; c: z$ @( H3 K# r' x& c" r
  38. void Write_IIC_Command(unsigned char IIC_Command)" Q, i, @* O: ~& ]4 }4 {$ Q  I
  39. {
    / ~; j3 q/ W/ e- L( K# {! C
  40.    IIC_Start();9 x; D. n1 q6 g5 g8 n
  41.    Write_IIC_Byte(0x78);
    8 K$ f9 a' H8 G1 Q: X' d( i3 o: W
  42.         IIC_Wait_Ack();       
    % t$ |6 K6 j1 u! a0 z" e2 B6 U/ m- J
  43.    Write_IIC_Byte(0x00);       
    & t- l" {2 _, b" o* Q* v
  44.         IIC_Wait_Ack();       
    8 o, k& R& q2 x4 [
  45.    Write_IIC_Byte(IIC_Command);
    % o  X( y: h% y/ ^
  46.         IIC_Wait_Ack();       
    . |  c5 ~0 t2 i* ~  h: D
  47.         IIC_Stop();
    4 K% J0 Y7 B0 f2 [
  48. }0 ^* V  x9 t5 w2 V
  49. void Write_IIC_Data(unsigned char IIC_Data)8 u# V' X- ~( |
  50. {
    6 a# L( m' R; V2 B3 t4 g
  51.    IIC_Start();
    8 x% q4 u+ }! r& B9 G) ]
  52.    Write_IIC_Byte(0x78);
    # J, [$ P9 U) H- Z
  53.         IIC_Wait_Ack();        ; t  I0 D, G+ R6 Q  W% p+ L
  54.         Write_IIC_Byte(0x40);6 g2 a: Y3 ?/ R8 a& \
  55.         IIC_Wait_Ack();        " ^" t! A, Z& s2 b
  56.         Write_IIC_Byte(IIC_Data);
    # `! q( t6 t9 i6 Z
  57.         IIC_Wait_Ack();       
    9 T9 B) P* m+ ?( ]$ |. v
  58.         IIC_Stop();. O: I* d( Q( {$ @6 s* x
  59. }9 b9 h# U, K/ _0 M. f
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    9 x6 K* W7 V1 F5 ?8 j
  61. {
    , s. g4 B5 b1 }$ h8 D
  62.   if(cmd)
    ( x8 t7 A2 F9 R# _# l; J6 w- x
  63.   {
    . P1 c& n, E) o! k
  64.        Write_IIC_Data(dat);' w! ]/ o. ^3 e& I3 `6 v
  65.    }
    $ `' ^* J( c( |
  66.    else% u6 p% z; i9 ]0 {# t
  67.    {
    ' n9 A6 o/ P6 C5 Z. u+ d. ~
  68.         Write_IIC_Command(dat);        7 y' O" `6 G) ~1 I9 I4 V# U- O
  69.     }7 E8 q/ h: r, u# }6 O( `
  70. }, r# H: C5 f+ K( n1 z
  71. void OLED_Display_On(void)
    : K1 G0 H+ l% w" X/ X( D: [
  72. {5 W7 D4 F" I$ X* i2 j; ]3 N0 \
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC: P0 F4 u$ W& A. W3 \7 }
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
    ' B6 c3 z, D7 V$ B
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    5 c' L2 f/ I% `( d- B
  76. }   
    . U, g4 M& A& _1 ?2 g3 t5 t
  77. void OLED_Display_Off(void)' J: W! M, e2 X
  78. {5 `% k+ L0 ~$ k- a% @6 A) F+ W$ d
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC, r6 d+ F! U3 O4 S2 y8 x- t% h
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
      Z3 [* R' w: @6 Y
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF0 [# J5 l/ [8 s! I' w, k2 A
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    ) r/ J  k; A9 J) Q: D
  2. {  
    & r: j* P- o- r
  3.         u8 i,n;                    
    . z: z0 g! W: M5 K, i# p
  4.         for(i=0;i<8;i++)  $ V9 Y+ a; P4 O( Z& G
  5.         {  - u  S# A1 U: e; f3 `9 T
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);8 C) x& V1 U7 F) k" M9 W; u
  7.                 OLED_WR_Byte (0x00,OLED_CMD);0 J) N7 x) y& `0 t
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); + I" \. f( B1 k
  9.         } 7 B" O8 w) \1 M2 I% k6 u# x, {
  10. }# K1 D0 H0 J4 B+ b4 z2 l' |3 |! |
  11. void OLED_On(void)  
    * M  ~( Y2 F' p7 X+ k  v
  12. {  
    3 \1 |) o3 [/ h- u1 r8 |
  13.         u8 i,n;                    : a3 H1 K, [3 F$ ~/ L% Z' u
  14.         for(i=0;i<8;i++)  0 O' k! h+ n* }: q; b/ t7 k" v
  15.         {  5 G/ k, d( \( t2 W
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    % i$ j6 I7 W9 p! t2 w
  17.                 OLED_WR_Byte (0x00,OLED_CMD); ) X5 i9 A. A  J
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    4 w: j3 y5 |! g& w3 O
  19.         } / }! r7 G5 N" q4 O7 j. H$ i8 Y
  20. }
    7 X$ F: Z$ a. H7 g# B
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)3 p- b* K1 i) G3 J5 d( T$ b$ s6 |
  22. {              , Q6 I, b9 C" j3 T
  23.         unsigned char c=0,i=0;        . d" K% Y# Z6 ~. J
  24.                 c=chr-' ';6 u! g+ W6 j: ^' d# _
  25.                 if(x>Max_Column-1){x=0;y=y+2;}
    / _! S1 w: N" x  e8 O6 ^
  26.                 if(Char_Size ==16)0 n+ [& T6 b. T
  27.                         {
    + `0 t9 r) L. a5 j/ y+ f( w6 q7 o
  28.                         OLED_Set_Pos(x,y);          L0 _6 Q2 F0 @& V
  29.                         for(i=0;i<8;i++)7 x8 |( ^' r2 C% C
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    4 m3 |) G$ R+ r% G
  31.                         OLED_Set_Pos(x,y+1);, x, g+ S1 d3 v, ?. _* Z, x
  32.                         for(i=0;i<8;i++)4 a8 ?. C% D5 C. G3 O/ r5 L4 y
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    + j3 U3 G" w% o5 r: {7 X( p7 n% [6 w) J
  34.                         }6 q' ?" R4 {& {3 Q  K* B# G* A7 p3 u
  35.                         else {        4 C/ c6 a& {+ e- p% s) K  M" P
  36.                                 OLED_Set_Pos(x,y);( j* ]6 Y$ c3 S' f& Q
  37.                                 for(i=0;i<6;i++)
    % @; j! _) B3 g; C" A: S% s
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    / m$ j+ S& x4 ^! [
  39.                 }
    ( l0 i) [+ K4 r5 s( f! X/ ~5 y$ X' c
  40. }
    4 V- `6 W( B/ |. u& i
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)& e& q- V* w/ e7 y) C- O
  42. {                 , W# j& [5 ~9 }
  43.         u8 t,temp;
    # v& ?% ~' m( s5 I/ z; J2 {' h1 y
  44.         u8 enshow=0;                                                  
    . a+ M6 }/ [! }4 a' ^2 O! U0 K5 }
  45.         for(t=0;t<len;t++)
    $ S- |7 j3 A) @, S* q8 V
  46.         {, a: S4 w0 {/ Y- x6 h% d
  47.                 temp=(num/oled_pow(10,len-t-1))%10;
    6 u8 J0 x& ]) R! O- F
  48.                 if(enshow==0&&t<(len-1))  _: Q1 @- ~, ]& G
  49.                 {
    9 d- ]/ a/ z* n& m6 ^; M
  50.                         if(temp==0)
    ( ]! B4 Y) \; b( I/ i* t
  51.                         {
    / P3 d1 S% o6 k1 Y
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);' U5 O+ O# c6 M/ Q/ I
  53.                                 continue;, O  H: p3 Z- D$ i! V+ E
  54.                         }else enshow=1; ) ^- Y; h& Z" T" S. c
  55.                           5 F6 |+ A5 U. v/ m; c
  56.                 }" I$ p* O8 T, h" ~4 P2 a
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 8 _" J$ c% M) s7 T8 \. N
  58.         }
    & g1 V5 s1 ?5 X( q9 t3 ^2 f
  59. }   J) z4 i( \  ?6 C0 ^! z* d) ^4 F
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size), l) a  Y# ?3 \$ o5 \0 L3 e
  61. {
    * I; x( q& ?- w/ u6 ^; [
  62.         unsigned char j=0;: T2 j' v9 S& U; M8 E" \' c# B0 G
  63.         while (chr[j]!='\0')
    0 ]2 V. j7 K+ K6 n* r+ v' @8 c
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    7 Q$ s* [, V5 C' S# X
  65.                         x+=8;$ F5 l" b! z# {9 r& `
  66.                 if(x>120){x=0;y+=2;}# ]5 W/ f6 b1 D" t' w: j
  67.                         j++;5 X! V- z. S- O; U" ?/ Z' A8 i
  68.         }
    8 {6 Z: D6 i6 n2 @: B# K& \3 e
  69. }
    : F) a: ]% j$ g
  70. - |4 h  k* i- m
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)0 H: R* _+ D" o/ `! |
  72. {                                  : v% M0 l$ \3 \& a
  73.         u8 t,adder=0;
    % {% o+ s4 T, i0 `2 W
  74.         OLED_Set_Pos(x,y);        7 I9 x& m: C9 U/ R7 }: }
  75.     for(t=0;t<16;t++)
    4 C7 ^  ~+ @0 v- j1 S
  76.                 {; E0 W# h0 k& V; f0 ^: b6 A0 _0 V
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
    " g& ^; p% u1 d$ A$ T2 H: T6 r6 C. V
  78.                                 adder+=1;
    3 _% F7 _( @, T
  79.      }        ( i( N: _# x1 ~4 v
  80.                 OLED_Set_Pos(x,y+1);       
    " e. v+ a" @+ p0 k$ ]5 X- R
  81.     for(t=0;t<16;t++)
    * y' i) D- N9 p  n$ E6 s
  82.                         {       
    # Q7 X0 A1 o6 O* A0 C6 B
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    1 g% u9 \+ [7 j
  84.                                 adder+=1;, O- \  J$ N( Z$ Y: l/ f: q: p
  85.       }                                       
    # V  o* d' F$ M& z* ?
  86. }
    ( T' \7 j  J0 J+ n
  87. ( b6 `) a" D! t
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    ' S7 E; k2 {1 Q. }" ^* m6 U
  89. {        
    ! g" P; C/ n# L3 `* e
  90. unsigned int j=0;
    . c, |+ H7 ?8 X0 j, \6 c
  91. unsigned char x,y;
    - [: }1 G+ A# d: v& q/ K
  92.   ' E4 {4 J6 ]; ], K( Q
  93.   if(y1%8==0) y=y1/8;      9 @- Q. z1 y: o" x, h
  94.   else y=y1/8+1;- I, y0 I, P" E4 f9 \1 P; x5 X
  95.         for(y=y0;y<y1;y++)
    6 i3 E4 J$ }1 a  Y  H' P+ T8 J
  96.         {
    9 _3 C# `6 U5 `
  97.                 OLED_Set_Pos(x0,y);
    3 S- [0 |% }/ H: Z3 Q7 y) a* r+ E
  98.     for(x=x0;x<x1;x++)% ~' x" @) |+ H
  99.             {      
    . D0 c2 m" D* E8 |1 Q9 A; y+ g
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                   
    $ l: u7 H% Z+ L! r$ S; ~# d1 W' a# z
  101.             }/ N# o) ?: l1 V8 x
  102.         }9 C  P$ g2 }& \! y: Y
  103. }
    4 d1 Q6 B- B% s
  104. ( z2 ]4 h0 Q  I' x6 b* M2 l! B
  105. void OLED_Init(void)
    , R6 E( k, u2 T  B' o. c
  106. {        
      p4 S( |0 Y' y2 a' h; b  f
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    / h& |- Q# v- C! ]) `; C
  108.        
    5 H( c8 R- }4 ~
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 . y' a9 Z/ V% D5 x4 p" h! q. ?
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         3 h  }: K& V2 a2 G1 [9 |
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
      s/ O- G: E2 m5 Q' I3 ^7 i
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;8 n2 O( ]8 S. _7 N- u: Z
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         - G) x9 }' @- S9 a& t
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    9 H- o; g7 ]( {1 k
  115. HAL_Delay(200);
    3 w" B: h8 s! h1 X- A5 `5 d9 W
  116. OLED_WR_Byte(0xAE,OLED_CMD);# Y- R  ~% O+ A4 N8 U; Z2 h5 t! [
  117. //display off
    8 ~  `1 I7 @0 d9 W5 L  L. S# i
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address/ _# X6 h5 S3 H  C3 s0 b) J
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address5 w. D! v  T+ D/ p3 A  B0 G" m! |
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    : c: c' V% Z# r3 J1 n. N+ [& T
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address* T# }# e, A4 U4 P/ J4 m! q
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control9 Y9 @9 @* c- s6 p. c* o
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    - g( W8 g: p) k7 Y# _% F/ b
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap / e1 b- v. e- p# w/ r  f( T- A! G0 ~
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    " K- J0 D1 `  Z2 ^0 d9 ?
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    6 r" e3 I4 j. ]' b9 Z8 ?$ L
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty9 T5 Z4 B7 ?. Q  z
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction! T& x; b* R/ n' R. x2 L
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset8 \5 V; y* |8 X5 l( j' }' Q
  130.         OLED_WR_Byte(0x00,OLED_CMD);//  w4 z2 z7 }6 W. k8 |! {* R9 p
  131.        
    ! n( v' _  ~# |" |, U
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    - c7 Y* M8 j8 |* B7 l
  133.         OLED_WR_Byte(0x80,OLED_CMD);//. x" o) S; w5 ^% g; ?+ J
  134.         4 ]% b5 f6 w6 Y- A: f! \/ g
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    ) W: z! y. G1 R5 h
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    % G8 s' O2 ?$ K/ ?. X' k( j" Q4 G. }
  137.         9 @3 _6 {0 }5 |; |2 a; l. }9 w: J, O
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    * E" w- u8 D0 `+ E
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    8 H8 J4 U! @) k0 j% H
  140.        
    / z# f5 t! I' n* x
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion: b: Z- y# m0 @
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    / @+ v& P! E+ V7 _4 P
  143.        
    3 L5 |! ~5 u* n; H/ F% R5 C
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh% n8 O8 @" l( g
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    2 E: ]  R5 \" y" C* _# N8 f0 A
  146.        
    $ n6 R3 `" s* i3 V) p5 S
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    / ?" e# C3 ^# X& r5 F; H6 r
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    1 W- ?" W" E. O8 M& [
  149.         " X. O8 e  e5 l: j. m2 Z* q: ?# t! {& b
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    6 M5 @/ |$ w# o3 E- W$ @
  151. }  
复制代码
  1. #ifndef __OLED_H+ Q- d0 M. q' J6 ^- ]
  2. #define __OLED_H                                   2 W$ ?* j9 I* ?- {* b4 v: k
  3. #include "stdlib.h"
    0 o5 V  H% R1 h1 {: B6 j
  4. #include "stm32g4xx_nucleo.h"6 O7 y: q; q0 W" R
  5. #define OLED_MODE 0
    - v4 U/ ]/ L; m' a( Z2 x
  6. #define SIZE 8# E! D4 E1 @$ ?0 L9 z+ \( j6 G3 Q
  7. #define XLevelL                0x00
    % N! q5 d! S" A; r; K( I8 Z
  8. #define XLevelH                0x10
    2 r4 T+ [3 Q8 F
  9. #define Max_Column        128
    4 ^1 j. [- k8 m! j
  10. #define Max_Row                64- v& ?$ ^7 @8 K* [1 J, k( x/ _. N5 k
  11. #define        Brightness        0xFF 7 n: B- j% L5 T/ y  N0 `
  12. #define X_WIDTH         128
    / ?' Y) `" a) a5 u- ]( L; Q. O
  13. #define Y_WIDTH         64                                                              ) n. Z5 E/ Y% U: Y9 R& o
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
    2 |7 t8 N2 X* {6 D, C/ R
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
    ) H% e6 x- p2 g, b, \2 b% j# A% o
  16. 9 V, ]3 T5 O: F- j
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN& l, z1 q! y# O9 G
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
    + V' l. J+ C3 a
  19. 0 [: p6 q+ t* |5 ~1 d
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES
    - R  z  e9 Z4 W: F) [" ^
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
    7 {: ?3 K% M5 R6 c1 _3 e
  22.                      ! C* M( |" r* \4 O; j& B) U
  23. #define OLED_CMD  0
    3 q. v5 [8 O0 }
  24. #define OLED_DATA 1! j* Z' L' |: Z9 Y! G$ o+ B' Z2 P: L
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  
    7 _: x$ l! m: I4 f- F# G5 _) N
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE(); A" M: B& e, p  V6 j$ F$ q- I

  27. / l4 z( |; S7 X* \4 M
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
    & f5 N5 K) f( J/ d% z& W4 \9 W
  29. void OLED_Display_On(void);6 F; L# y* j* M6 p
  30. void OLED_Display_Off(void);                                                                                          
    6 q0 \% h$ \7 r) e9 L: P# r
  31. void OLED_Init(void);
    0 }; l2 [5 Z9 U7 r3 d7 f
  32. void OLED_Clear(void);
    2 p" F7 C, k' Q0 ?7 i
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);% Z# y) b9 Y, V- O
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    * z0 ~, \$ f* j9 s
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);1 R$ s. p3 ~. ~1 E
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    0 P! J; j& |2 g0 j( j$ c8 X
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);   u" {+ j% g. v' v' g) i7 |# v
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);# R" |# c% i1 L+ a; v
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    6 b$ w6 w8 j8 ?+ R2 q; L
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);1 q0 g1 s  `8 T6 ^- z% W* Q
  41. void Delay_50ms(unsigned int Del_50ms);
    % c% p  L! e; h. ]  w6 M
  42. void Delay_1ms(unsigned int Del_1ms);
    ( b5 b' \# ^, U& J+ L
  43. void fill_picture(unsigned char fill_Data);
    ! b) ^/ Y; S* X: o4 r0 n7 s
  44. void Picture(void);6 B- Q' G+ g$ O* b' ~0 e; {, W
  45. void IIC_Start(void);+ }3 ^' N+ T( S% R1 R
  46. void IIC_Stop(void);; W+ r6 @4 b2 u& u; h
  47. void Write_IIC_Command(unsigned char IIC_Command);
    ) R0 }  p, B3 ~4 \8 D7 T
  48. void Write_IIC_Data(unsigned char IIC_Data);
    ' Y- j0 S# j0 p. d( I/ o+ h& I8 q2 ^
  49. void Write_IIC_Byte(unsigned char IIC_Byte);
    " g1 _: U+ q9 x; U8 P* R
  50. void Display_Battery_Level(void);) j) H- y' j" `4 }2 ^  [
  51. void IIC_Wait_Ack(void);
    # T9 L6 d8 U% H9 M: }, _
  52. #endif  
复制代码
  1. int main(void)( F3 Z+ R0 K" s1 j
  2. {# [2 T0 k1 A" R3 s6 f6 k. z: ?
  3.         HAL_Init();
    1 `* ?1 W5 t' @! H5 Q2 ]

  4. ! _, {: X0 W% H8 t. `
  5.         OLED_Init();$ N7 q. K  g9 p7 P8 I: A
  6.         OLED_Clear();  
    # E. h5 W8 y, U4 t! t& |  z0 v
  7.         SystemClock_Config();; _$ s4 Q) I1 [( r8 P' I4 l

  8. / j' J! N. A. U/ j( B
  9.         BSP_LED_Init(LED2);% k. K9 I# e& ^
  10.         EXTI15_10_IRQHandler_Config();
    * r2 H& h) Z) o- @( \0 b
  11. ! {$ N9 l+ X1 d* ~, @
  12.                while(1)
    . u4 N9 S1 i- b  o
  13.         {: R; z4 j- ]$ h; X; M% ?9 @+ B! Y
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);8 D) a+ {+ j) i7 t5 T
  15.                         OLED_ShowCHinese(45,0,2);//" P. a# i( p1 @1 e
  16.                         OLED_ShowCHinese(63,0,3);//' y" I% B3 S9 m9 j+ ?
  17.                         OLED_ShowCHinese(81,0,4);//
    - F  N1 L( k5 t" \5 q9 M7 J
  18.                         OLED_ShowCHinese(99,0,5);//
    & z" B. e  ]0 |  |
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); 5 [1 Z, N- z0 S; ?; O# L
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    7 G- f) j. O( E4 `1 X& B0 i( m1 J
  21.         }          
    0 ~. _/ ~1 y' O) j" j0 n
  22. }
    & G& i$ D5 o: N9 V1 y8 K$ W( \
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg
1 l% w! D- g+ @: J
  n; H% r6 r4 }% ?9 b) Q
6 T- ^' L7 {3 s. C- h4 O# A
收藏 评论1 发布时间:2019-10-6 17:42

举报

1个回答
kongxiangtong28 回答时间:2019-11-16 12:04:22
您好,能给发一下G4的pack吗?我在官网下载老是说有错误,而且速度很慢。。。谢谢

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版