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

【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模块,今天拿出来来调试调试这个模块。
& ~1 s4 k4 h3 o$ m9 {5 L0 }  v      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9! Y, Z! W% ~6 S. a( j5 G% Z& m8 E  g$ K
       原理图.png
7 ?( [0 n3 X/ S. ^/ K" V    部分代码如下:
( b& |! ]9 i, s6 b
: L7 t% G) }9 p, P+ p
  1. void IIC_Start()
    " X  {  J4 L, Z; [8 B% m% _/ F2 }
  2. {, s6 |/ s/ ]8 o: H6 k

  3. ) x) e, w$ ~6 q
  4.         OLED_SCLK_Set() ;
    + j4 ]0 H8 f# s" H
  5.         OLED_SDIN_Set();. P# b, w4 S+ }& e
  6.         OLED_SDIN_Clr();
    : y% ?& h0 R. ]
  7.         OLED_SCLK_Clr();6 ~9 R1 k/ H5 R& L7 O0 ?. o6 `
  8. }
    7 @9 {! p6 u# D
  9. void IIC_Stop()
    ; R& J1 |" o' w' m
  10. {
    8 B5 E* r& m9 w8 V5 i* s
  11.         OLED_SCLK_Set() ;
    . r9 x3 a" i1 \$ d5 p
  12.         OLED_SDIN_Clr();( N4 k$ I! t' A$ G1 p
  13.         OLED_SDIN_Set();7 Q3 A% }' \% @" K
  14. }
    & d" i# |# Z( }. E
  15. void IIC_Wait_Ack()
    , k7 c* j2 F- Z2 J$ q8 `4 }: V$ |
  16. {
    ' {7 Z! v/ f' }* h" r9 \% I* v; N( ]
  17.             OLED_SCLK_Set() ;
    % p3 K. O2 L4 L% t8 E
  18.         OLED_SCLK_Clr();+ K4 R- B* x. Y1 {
  19. }
    9 e+ D* V5 x2 }# i; \0 L
  20. void Write_IIC_Byte(unsigned char IIC_Byte)5 J/ r8 u1 V7 f& W# J& Q. V
  21. {7 W+ x0 }, F5 c4 k1 r9 ]
  22.         unsigned char i;
    : P5 c# @: r+ x  ~0 C; _
  23.         unsigned char m,da;
    ( ^1 n& F1 Z: O) [5 I& p) _
  24.         da=IIC_Byte;% j; E! S' N: @0 l+ W
  25.         OLED_SCLK_Clr();2 L+ F0 J. Y6 b  }6 S
  26.         for(i=0;i<8;i++)                ' u( W8 @/ O' _$ S0 t8 ^
  27.         {
    ; M' p1 e% \/ H
  28.                         m=da;
    : V( x5 c* j7 ]5 J6 S
  29.                 m=m&0x80;' I& B; ?7 K; v# r0 ^
  30.                 if(m==0x80)
      K+ t6 ]! H/ X7 B
  31.                 {OLED_SDIN_Set();}$ D$ G) d1 O4 h) h
  32.                 else OLED_SDIN_Clr();6 `1 p" Z2 K7 `# ^# X  d. [
  33.                         da=da<<1;' M! B' W5 V3 g6 O5 ^5 `; q
  34.                 OLED_SCLK_Set();/ u0 @# B3 _. I' D4 b
  35.                 OLED_SCLK_Clr();# T2 E1 t1 h) M; }
  36.                 }
    2 ?" k+ m* X4 T( T: B; ~* d! h( J
  37. }
    # b  q5 p4 A5 v! D5 P; Z9 X& k; r
  38. void Write_IIC_Command(unsigned char IIC_Command)* A6 u9 `5 a* W4 X& U1 c" V" c
  39. {
    % e* Q  I. z" S7 s
  40.    IIC_Start();
    & `4 \& q, D8 o" I3 ~* t0 M3 g2 o
  41.    Write_IIC_Byte(0x78);
    2 W. g& K  L) Y# D* A- m6 z
  42.         IIC_Wait_Ack();       
    * a8 s# k- v! @& P8 ^3 l
  43.    Write_IIC_Byte(0x00);        " N5 m+ t9 N, Y. L8 V4 R/ \, w4 ^
  44.         IIC_Wait_Ack();       
    : d  |* K3 m7 E5 `
  45.    Write_IIC_Byte(IIC_Command); ( U. z3 }- t# u# R# i: K
  46.         IIC_Wait_Ack();        8 G( N& r6 C0 W% i
  47.         IIC_Stop();
    1 i  j, \: k! X1 J7 z) ]5 p1 m
  48. }
    % c, U3 ?/ Q) @
  49. void Write_IIC_Data(unsigned char IIC_Data)
    % K& n+ N6 p% B9 C* o" L3 D8 b
  50. {* M/ Q/ b' x( H& Q' }8 }) |( }
  51.    IIC_Start();
    6 ?$ g, d1 O" {$ c
  52.    Write_IIC_Byte(0x78);
    7 \0 _/ ^! P: {* f; v$ e
  53.         IIC_Wait_Ack();       
    9 h5 y' E! b4 W9 W  Y% x% I/ P8 E* X1 Z
  54.         Write_IIC_Byte(0x40);' F" F3 k" i1 D  N. H+ l4 X! O/ w# i
  55.         IIC_Wait_Ack();        * s0 r  A, G! G7 l; C
  56.         Write_IIC_Byte(IIC_Data);
    ! F  Z% I: @$ b+ |' E6 q
  57.         IIC_Wait_Ack();       
    0 F9 S  i" e9 F; x: \
  58.         IIC_Stop();8 h( D* Z, w. P( a- a1 l
  59. }
    1 @0 X5 b9 h# V/ l  p5 P% k
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    8 g( W& h  S( W
  61. {
    - r) ^- {) t* U2 L
  62.   if(cmd). R+ q, V* L" Y7 k0 U
  63.   {' q( G2 ]! T: ?1 ?9 p5 e  L( K- K
  64.        Write_IIC_Data(dat);
    ! f* _( Y& |. F) ~' \% z
  65.    }/ q' K" W' s: J1 b8 s2 L& r( {, e
  66.    else& p& Z% S: H3 |% O7 m3 b% I: X
  67.    {6 o% }$ u) s1 [# U! w4 Z
  68.         Write_IIC_Command(dat);        # `: _2 x& ~4 i
  69.     }6 U  k1 F" t4 e% t/ M
  70. }# Q" V, @- E( h- @9 J
  71. void OLED_Display_On(void); o6 _! u& G( F& g
  72. {( K" A! u; i! u5 M
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    + y& `  L5 X  w) y" n
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON; G2 p, y% M% S% f
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON& _4 [0 h8 ?5 {2 F6 D( `
  76. }   
    : N* Y6 `/ P: l
  77. void OLED_Display_Off(void)0 V# j1 @% s7 ]
  78. {
    ) u8 t( A$ T# C9 J
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    - |: A$ s3 V6 u! V6 N% o) W
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
    5 |8 C& H0 Q* h3 A
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF" B7 [6 x# p8 [9 B/ a% u
  82. }                                            
复制代码
  1. void OLED_Clear(void)  . z/ S2 S+ y2 o+ |: N7 M. j0 g) U
  2. {    I0 B: B0 H; B( W
  3.         u8 i,n;                      M0 _4 E7 }* A0 U4 l) G7 V4 Y
  4.         for(i=0;i<8;i++)  
    - d# F; O5 p4 r$ Z
  5.         {  
      w2 F, H. m0 H; Z! U
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    ; U: `, c) d0 e& B9 S% A' F
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
    6 @) d2 Y! d( \* U  [- G
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
    2 w; [/ ]# g. F! \1 W( R
  9.         }
    $ p$ o: Z3 _& N7 |& C( _+ l$ R
  10. }  b: X/ |9 v6 x' q2 V5 p; C8 J
  11. void OLED_On(void)  7 W9 }. d6 e" |; Q1 s! a  r$ G3 H
  12. {  
      c( h6 E/ @& P! Q2 s
  13.         u8 i,n;                    9 R5 \1 `9 z0 G8 s7 K- h$ B
  14.         for(i=0;i<8;i++)  
    8 C, C. a  ^7 w/ ?0 D/ F
  15.         {  
    4 l/ }5 X, C# A. l) _2 L
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    2 B  M+ l' K/ E% m: L
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
    . z" D# T  g" P* V7 e$ w5 k$ o
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); ) L" w, [1 g/ g; X& }- P; k" o0 T$ g
  19.         }
    # y9 }4 |( S% j/ P) @
  20. }
    7 m/ I# B! z; ~/ o  m
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)6 x& M- @" h0 `
  22. {             
    ( o/ A' D! e/ P/ C/ h) h* T( l
  23.         unsigned char c=0,i=0;       
    " Z  D' K" t8 m# A' A
  24.                 c=chr-' ';
    * R$ w4 z* e5 g' t/ _; g- g8 ]
  25.                 if(x>Max_Column-1){x=0;y=y+2;}. o- ~" B0 V9 B4 g
  26.                 if(Char_Size ==16)
    / W' h& r( v7 L
  27.                         {
    ; {& I1 o/ Z! {8 {9 R( e
  28.                         OLED_Set_Pos(x,y);        3 [& F5 P: t# \& o2 x% w
  29.                         for(i=0;i<8;i++)
    ; n! i6 v" @+ w7 o& L3 o
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    ) v2 W  ~! D: z% P: W' N
  31.                         OLED_Set_Pos(x,y+1);
    ; [4 z* {2 i' f
  32.                         for(i=0;i<8;i++)
    0 v5 W4 ~& M0 U* [- f3 n# x! L
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);  W! T, g3 {' }# t; `* A0 X( D
  34.                         }/ o, k/ K$ G5 w! @) F
  35.                         else {        4 c0 N8 O6 u! Z
  36.                                 OLED_Set_Pos(x,y);. M; N' l" O2 @7 T# {! k
  37.                                 for(i=0;i<6;i++)$ R. O/ c$ b) X9 C+ _$ E: M
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);                % z  `' f8 V2 n0 c6 Y
  39.                 }
    / `4 G' G& }. J7 x) C
  40. }( }0 m) ]( S/ o/ {
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2): t2 T' X- H  O. j; v9 N
  42. {                 1 l6 S2 Q7 f" c' R+ p* W2 O* [
  43.         u8 t,temp;
    + }! u( z* F' z
  44.         u8 enshow=0;                                                  
    ) `. d% O" J3 m' ?& |
  45.         for(t=0;t<len;t++)8 Z2 |9 s6 R7 B* T: _
  46.         {
    1 x& X2 L1 q3 }" J; J/ V5 {3 ]0 y
  47.                 temp=(num/oled_pow(10,len-t-1))%10;
    $ B7 F# \7 b2 M9 `) {+ A3 D
  48.                 if(enshow==0&&t<(len-1))
    6 m$ f0 B* E4 m- a% r/ M% [2 p( g
  49.                 {
    , v- k( u7 f* f5 [
  50.                         if(temp==0)
    ( v! n1 e& `- L8 ?
  51.                         {
    9 h+ R% w& [* Y: ?
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    ( f5 K/ w: B8 A+ U
  53.                                 continue;
    1 A3 @. h' ^' `' c# X: }' Y, ]( f
  54.                         }else enshow=1;
    7 ]( T' k/ t: O4 n( b! q9 F7 t
  55.                           & s, e8 ~- U$ R1 f9 J5 g8 z8 F
  56.                 }# B0 H  Z8 u) m! V/ m2 W
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    - U' b+ z- v  n; v! \6 U6 _# m, r
  58.         }! ~8 ~5 \8 F: H! N4 ?8 i% d
  59. }
    - n. Y1 x( m% K7 n, T0 r8 [8 Z
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)7 E' h% B" w+ Y, D2 X2 {9 w
  61. {9 Z. j( y( ], \
  62.         unsigned char j=0;' H, k. W; B9 ]/ Z: [, d9 p7 U
  63.         while (chr[j]!='\0')/ v: B( t9 E! s! s2 Q7 l
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    $ e/ Y5 n$ }  y' y* V9 R0 B9 h6 t
  65.                         x+=8;- a) X1 W8 f( `* I4 L/ y
  66.                 if(x>120){x=0;y+=2;}
    9 U: l) @! P* O1 G. v  r, m
  67.                         j++;
    ( j# P. x, C' u7 B2 E) R# E4 u
  68.         }
    6 t  X- o2 _' Q7 x4 X8 K
  69. }
    - u+ _- t- N: r9 X
  70. + ]! f' L% _! x. q: k
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)! e5 ^% r. x# L! @6 f
  72. {                                  
    % B/ V7 s8 \$ r; A6 w
  73.         u8 t,adder=0;
    $ e3 r# M, t( |- |$ v3 ^
  74.         OLED_Set_Pos(x,y);        " b/ Q% y% ]7 w5 J; R
  75.     for(t=0;t<16;t++)/ a7 t9 X! w/ ^: E# o
  76.                 {
    , ~; J. W" b  b
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);& ?+ M3 A6 S9 Q* [9 m
  78.                                 adder+=1;: d6 |2 M2 l, x& T. ]/ ]
  79.      }        + c" R/ E8 W) d5 h9 _6 R
  80.                 OLED_Set_Pos(x,y+1);        2 H1 V! Z5 C6 T/ Y, s8 X' i
  81.     for(t=0;t<16;t++)
    3 R5 ?* v. P; n- F( P
  82.                         {       
    ! M1 D6 h" t, @; W+ N
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);/ a# w4 ]8 M2 Y0 ?1 O, E3 }- n
  84.                                 adder+=1;, s9 p* F  ]0 N% V  `9 }# }( T
  85.       }                                        . |8 k# p. z1 g0 N/ o  Y, Y$ e
  86. }' Q+ H) }8 y' D4 Y- P; z! g

  87. 2 P, d2 B( e  R- ^4 v) p% \& p
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    3 b1 g, ]0 w$ V5 Z8 q
  89. {        
    , |9 L; Y) ~. k0 R- j1 E
  90. unsigned int j=0;: K4 E4 K  X. ~5 Y! F
  91. unsigned char x,y;
    4 e1 N0 y$ j1 i9 D* p& a
  92.   ( }4 H" p0 w( G# C: s
  93.   if(y1%8==0) y=y1/8;      
    , R7 g, q4 Q$ u3 B
  94.   else y=y1/8+1;
    5 n* E- v5 S+ e1 _2 v
  95.         for(y=y0;y<y1;y++)
    ; V0 y: `% U* ?1 C% z0 ]
  96.         {
    7 B" e9 v# L; B) B5 z3 U
  97.                 OLED_Set_Pos(x0,y);
    " s! t3 R9 I# ~, m1 K0 |# Y
  98.     for(x=x0;x<x1;x++)0 w5 B9 g. N4 w  p  ^: S  e$ [
  99.             {      
    & J' t. c+ f5 g# X5 a( I, J: d
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                   
    . N. i1 I& t0 }
  101.             }
    7 \: G$ q, K. d1 p
  102.         }6 H# O- G% o5 g) q6 K" g: k* L7 w. O
  103. }
    & F8 X* A4 [  `8 m+ C5 ?! [( n' C

  104. 9 g- g5 x" ^1 H3 Q
  105. void OLED_Init(void)& C, V6 T1 i- d; N5 F2 r2 P
  106. {         5 s( K9 s" O: F& i5 M* D3 A
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    " ^, W% {9 I- [5 o; k/ d
  108.         $ |$ ~- ]4 B6 l* Z3 S+ C$ L7 W
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                
    ( ]. G+ ?1 h" ?  {3 }$ t' Q
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    . w8 Q& W( R" i& x- U% l
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;# N- v% {7 D; i. N9 k2 y
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    ( s8 q. [: @3 A- ]4 Y( H
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         9 ]2 ]: z# z2 {6 k& A
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);: n2 u* D$ K% B: |
  115. HAL_Delay(200);
    7 ~5 }) \" X! [1 e1 }/ ?
  116. OLED_WR_Byte(0xAE,OLED_CMD);; A- ^1 {' e, n3 S9 x! K$ s( w: n; U
  117. //display off% P- D/ A" P/ v' U
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    1 I: N: J$ D% w9 ~$ n3 ?
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    / A6 b2 D: r8 G
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    & H1 Y- C1 `4 y/ i3 x
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address# S, Z3 u; `2 y+ `" h$ W- @
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control; n) H9 ?) e  ~* }" n
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    - y3 h: z# F% e, d( L- {
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 0 a- B& V: i7 \9 a& y% I* T
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse5 r5 u3 e1 r0 A' G
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)+ [1 T' q; \% N' N# i" I5 f9 S
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    6 G* M- K: Z# M% y
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    / h% A) u2 i$ S2 r2 W
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    . h; r' M4 v  o! _: H" A2 t! p
  130.         OLED_WR_Byte(0x00,OLED_CMD);//  {, j  ]. o( S0 w4 ?6 ^4 d
  131.         " [& G# H5 h! ~, u( V' C4 b
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    2 ?  t# T; p- \& a
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    : e. \4 e* E4 j0 Z$ z
  134.        
    / T1 C  V4 y( n/ c0 J' F, ]
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    ) T5 H# F' i; Q6 \& z0 a
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    2 i$ t3 S3 p  P! g
  137.        
    ' O" R4 A9 @! S- `8 N, `7 |: |
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    6 A6 g( @7 j- T9 W0 q3 M
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    # D' ^: @/ V. i! Y  z
  140.         8 c1 |# p' y5 |2 p- X, [4 l
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    - P, s/ d/ e, @2 H
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    + Y! x$ d3 X, v7 K* D" c* }; K
  143.        
    4 e( z+ ?6 V% x7 ~! S% \- T
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh' i( R1 _1 j5 ]. l  _, D7 A
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    ' C8 i0 t! L- A; ^* e1 l0 D
  146.        
    ! C) r. {5 p3 R3 M# c
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    4 ~1 l, j# g) ?  _! J/ }7 X" V! i/ y
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    2 P3 Z" y0 [: o
  149.         6 v" U" j/ R2 N$ D/ A3 z
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    : ^4 `, l& |  I0 u8 v, Q/ t
  151. }  
复制代码
  1. #ifndef __OLED_H
    6 i( z+ d" a5 F4 e+ l
  2. #define __OLED_H                                   6 p4 b" B, c0 i8 s3 e
  3. #include "stdlib.h"* j3 _* f# {" I9 M9 B. @4 b
  4. #include "stm32g4xx_nucleo.h"6 \* F5 t5 o/ M6 p  X% G, x/ \% h
  5. #define OLED_MODE 00 ?) f1 [7 w4 Q. [; r: t( `+ c
  6. #define SIZE 8
    : K4 d- {6 X7 \
  7. #define XLevelL                0x00
    8 O; y) u! v. B& d+ w
  8. #define XLevelH                0x10
    . V8 }9 ~; V* d9 b
  9. #define Max_Column        128
    ' c' {1 P; u6 ?0 d2 ?9 v
  10. #define Max_Row                64
    ; Y$ F6 K+ C* {4 Z7 T" J% X
  11. #define        Brightness        0xFF
    7 f5 V8 J3 w2 x, t* I5 t
  12. #define X_WIDTH         128. ]! k+ \1 Z+ m4 ]  Q7 |' M6 W; S
  13. #define Y_WIDTH         64                                                              
    * X; J7 v! ?6 E
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK" q) w! n. [6 Z4 J* w0 H
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
    $ `, |, X" v5 \

  16. , m, x; Z# @) u4 F
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
    8 x- O8 L! Q9 h% i
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
    . L5 v. v9 r6 G" s) p4 c* C% R. j

  19. . p( V6 `' n4 D8 s* ~; c# ^, `  Z
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES% N4 |, d. a9 a3 o
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)( @2 w/ i' D2 w$ c
  22.                      9 y. m2 L8 w1 {; a+ w& c
  23. #define OLED_CMD  0
    / i: k8 x1 m2 S' X3 t3 J
  24. #define OLED_DATA 1; m2 P6 M; J- @$ N' {
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  ! x+ A# w" X6 @) n3 Z
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
    ' W( \7 ^% b& Z9 m/ P) f  m

  27. $ _; z6 Q& O( O, R0 K4 [! O* \
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  5 B# L  P, J7 X% R9 Z, l" u* f
  29. void OLED_Display_On(void);
    * N7 _/ d* e5 N2 y; i6 z# b
  30. void OLED_Display_Off(void);                                                                                          
    4 y$ p; a8 j  o" h7 _
  31. void OLED_Init(void);
    & Y! {, L6 a( r/ W' M
  32. void OLED_Clear(void);
    ; n/ V3 j0 \. ]% M0 h$ S
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
    & m$ P* i" O5 r4 ]0 T$ y
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);! G: i+ v! O: f8 I
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    8 V/ f# R' ^2 L+ A% `; g/ X
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    ) X/ i: ~9 H' h. o2 w: O
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    ' g( O. @% P0 e9 `. R, t
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    ) P. P1 A8 e3 b. _: M+ p4 R, K
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    " A! }, a# A# y1 J
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);0 r& |: o! P; g- I
  41. void Delay_50ms(unsigned int Del_50ms);" X# J2 E1 j3 \0 _0 d
  42. void Delay_1ms(unsigned int Del_1ms);3 I% K) U. ]3 a' ^
  43. void fill_picture(unsigned char fill_Data);; r7 v$ Y" y1 g/ t
  44. void Picture(void);) K5 A8 A5 [, y$ J
  45. void IIC_Start(void);/ V; C# ^- m9 _+ ~9 s& p
  46. void IIC_Stop(void);1 S. X5 n# Y9 P+ p1 o8 A+ x$ O, t
  47. void Write_IIC_Command(unsigned char IIC_Command);
    " z9 o1 C# u0 g) ?
  48. void Write_IIC_Data(unsigned char IIC_Data);/ m8 `9 j4 T( g
  49. void Write_IIC_Byte(unsigned char IIC_Byte);1 b* N, k* L, v0 d5 s& e5 _  w: D! I
  50. void Display_Battery_Level(void);
    ( V: d! D$ K3 E" z$ f$ m
  51. void IIC_Wait_Ack(void);
    . R3 U, S. D" o# J# x6 o
  52. #endif  
复制代码
  1. int main(void). r# U& ]. f0 v& L0 i+ {
  2. {9 M9 K# o& o9 f, M
  3.         HAL_Init();; a2 ]* k! j, g6 a
  4. # |1 N- @9 S0 m8 p
  5.         OLED_Init();& @: O6 S* Z" V& B6 o( w
  6.         OLED_Clear();  
    / Z; F$ J' l" [4 O* ]. o
  7.         SystemClock_Config();
    9 z# U  M: D+ D' i: g5 V

  8. * c% k. g+ b- H! i" Y
  9.         BSP_LED_Init(LED2);( g- C4 v4 m& A7 P
  10.         EXTI15_10_IRQHandler_Config();
    " R4 x6 a! X* w$ Z+ a' ]; [
  11. : R' \- a; y  K" A. I4 ^
  12.                while(1) + B' Q! Q' [) d' x4 t* \
  13.         {
    ) G/ v- K9 X# F
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    8 ]* j+ y/ g; D$ w9 S8 F0 S
  15.                         OLED_ShowCHinese(45,0,2);//
    - o$ l) ?9 @. N7 T: D: j: T9 z# G
  16.                         OLED_ShowCHinese(63,0,3);//
    4 c0 w7 E2 c9 `1 u% k3 v, E5 h
  17.                         OLED_ShowCHinese(81,0,4);//
    1 [+ L8 i9 w8 J% z! }
  18.                         OLED_ShowCHinese(99,0,5);//
    ' m% ]1 {1 N0 V5 ?6 v8 I* m% P. P
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
    ! \. r, X6 g6 n; j
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    7 Z, U7 U( \9 K$ D
  21.         }          9 _' ~: t0 b/ F2 Z
  22. }
    / o3 F: s" P0 m+ _7 @
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg
6 ^% B  W3 n/ ^' j0 K9 p8 X, O9 q" h1 |& y3 _2 n% ^

1 _1 k! q. k" R( h! g0 X5 R! o
收藏 评论1 发布时间:2019-10-6 17:42

举报

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

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版