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

【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模块,今天拿出来来调试调试这个模块。
0 p; |4 a! d: N  v, q      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB93 e: p% c; K: a
       原理图.png
1 I  W) @9 c- l/ d4 a    部分代码如下:& }/ L9 C/ b# Z* G- Y4 g( z* M
0 q' @, o! o4 a
  1. void IIC_Start()
    6 P( S6 x! w' u: {
  2. {; o; D2 M7 w7 S( k

  3. 4 g; e9 z3 c: c9 s
  4.         OLED_SCLK_Set() ;
    4 U$ {2 r7 N5 C7 n! M: r
  5.         OLED_SDIN_Set();
    1 a& b+ G) z1 _: M8 Z# d; l
  6.         OLED_SDIN_Clr();/ Q; x7 s5 p9 \; T  H/ k
  7.         OLED_SCLK_Clr();
    1 b' u3 ?( ]& b' V
  8. }! T5 r& k. b3 |% d/ Q
  9. void IIC_Stop()
    ) \9 p& h5 R6 J
  10. {( I. F6 z1 a/ l/ R" r
  11.         OLED_SCLK_Set() ;
    7 h6 V( v3 g# w
  12.         OLED_SDIN_Clr();" X; P0 `: o8 ^9 X! C! J% U* S
  13.         OLED_SDIN_Set();
    6 e4 Y! `5 Z* U" l/ p  i! b* y
  14. }
    0 f1 v2 |8 ~% G, \( y
  15. void IIC_Wait_Ack()
    , A5 h" a# g: A  N8 L
  16. {
    4 x* C4 u/ N/ C+ E4 B( y& ]
  17.             OLED_SCLK_Set() ;2 D/ x3 x) h3 M8 @: A
  18.         OLED_SCLK_Clr();7 I% ?+ ?5 k' Q9 o3 f: [5 M: }
  19. }
    9 E  d; x. L$ \0 [
  20. void Write_IIC_Byte(unsigned char IIC_Byte)
    7 a$ N& p8 \8 P7 }
  21. {6 G2 L8 ~* F) |5 d; h4 I
  22.         unsigned char i;
    * J. P# S* H' H4 ~
  23.         unsigned char m,da;
    ) N- g! g) `, T' p3 V/ n: F
  24.         da=IIC_Byte;7 ^  p4 d% {. G. Z9 H& T2 B) m
  25.         OLED_SCLK_Clr();
    5 [3 Y8 q. }& L# {1 w( ^
  26.         for(i=0;i<8;i++)               
    2 ~- z) T5 f/ r
  27.         {
    6 s# c% S, j; H# R; ?
  28.                         m=da;( l; l( d6 Y' o0 e7 o0 k. y
  29.                 m=m&0x80;
    , C7 H; Q1 O& X" X3 ?8 w  P
  30.                 if(m==0x80)4 R# p- W6 g  J+ B5 b) @
  31.                 {OLED_SDIN_Set();}! G8 @0 Z; b& b7 `
  32.                 else OLED_SDIN_Clr();- L. E5 O' }5 b( Z
  33.                         da=da<<1;1 c- B- n' ~6 ?, j+ X3 Z* E3 K
  34.                 OLED_SCLK_Set();* C9 {0 {2 N* q8 n: y- h
  35.                 OLED_SCLK_Clr();
    ; W  b  D1 T, M/ G2 c
  36.                 }
    ! P: Y7 F4 B# s2 W
  37. }
    , R9 A$ |& H9 t* H
  38. void Write_IIC_Command(unsigned char IIC_Command)
    2 ^" t& }% C# `% Y( a( i' T$ ?( h- e
  39. {8 J* W0 C9 V. L6 J; c* N
  40.    IIC_Start();! r' ?) H& ~  U# w8 }
  41.    Write_IIC_Byte(0x78); : }* n* y8 o. z3 M
  42.         IIC_Wait_Ack();        , x* A5 j6 N+ M( q  t1 M
  43.    Write_IIC_Byte(0x00);        # E! X9 K: H7 h# }! R+ Z' A
  44.         IIC_Wait_Ack();       
    1 B6 K5 ^. _! G0 M
  45.    Write_IIC_Byte(IIC_Command); " y' q2 p" ?2 l/ j0 l; D: I
  46.         IIC_Wait_Ack();       
    ' w7 o0 V' S1 `  [( J: U7 `
  47.         IIC_Stop();
    $ a9 N- A6 s7 [8 B3 [0 N
  48. }. n- x2 I. c/ t  e$ O
  49. void Write_IIC_Data(unsigned char IIC_Data)
    # M% x, m$ S0 @  h, @% c
  50. {
    5 Z4 S2 l8 U+ G6 P0 z* q8 ~. k
  51.    IIC_Start();: j4 z& t; R9 k* s
  52.    Write_IIC_Byte(0x78);# d% o* V" C5 k3 m7 C, l
  53.         IIC_Wait_Ack();       
    ; X, ~) n9 W; J
  54.         Write_IIC_Byte(0x40);
    & G4 t1 r8 e. p1 r+ T5 K) U
  55.         IIC_Wait_Ack();        0 H- U( U  d+ `  I" E4 e
  56.         Write_IIC_Byte(IIC_Data);/ @4 }8 W  ?# L, C
  57.         IIC_Wait_Ack();        : z! ]* K% S- E' @* T
  58.         IIC_Stop();
    4 X9 }! [- q. ^% K- c
  59. }6 _/ ^8 b7 K( ]4 }: Z$ V$ S
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    2 ^! R/ B. b: S/ c9 `3 U
  61. {
    - i; w4 K+ T& B* {
  62.   if(cmd)
    : H4 u$ n4 S& ^: _9 h- l# S
  63.   {& {. |+ M0 N' |/ A6 L9 k
  64.        Write_IIC_Data(dat);! N5 @8 N& S/ w, `- J
  65.    }
      y; f0 I! G% |
  66.    else8 t7 O! n% z3 @: V2 M' \8 c
  67.    {4 H" B7 K/ V6 {6 i6 L
  68.         Write_IIC_Command(dat);        9 f2 Y: R+ @$ H8 E3 _$ ^- `
  69.     }. z, q6 C2 f* {( T7 R% A
  70. }, B0 t8 T8 M" N6 ?$ P* W0 G
  71. void OLED_Display_On(void)3 k" K/ z  E. M7 Q/ d" R
  72. {
    8 N4 i# u- o$ q# b
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC7 ]1 Y3 N; |$ j1 o# U
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON; G2 h4 i5 i/ M6 r1 y" Y
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON9 m) Q3 r6 ^/ M: g$ [
  76. }   
    ( n9 f# R. O- x* U5 V, l/ M2 C
  77. void OLED_Display_Off(void)7 c1 S/ \5 V, I+ a  g3 K8 v) U
  78. {
    ) r" L! H7 A* _" |8 y+ f- P, v9 P
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC8 j1 l' |0 m8 W  g4 v0 Q& b' V2 ]
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF- F" H8 e  v0 t" O! |
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF8 {2 q+ I4 p0 _8 V- e% B
  82. }                                            
复制代码
  1. void OLED_Clear(void)  5 y/ j# T% G8 Z  O: l$ V" M. L/ G
  2. {  
    4 K3 {2 N6 d$ L4 L& e2 v/ ?
  3.         u8 i,n;                    * G7 `* s2 {; R  j3 F
  4.         for(i=0;i<8;i++)  2 g* |) B# y' O2 k6 t
  5.         {  ' i* w2 W3 F: g( z8 G- W
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);+ |7 l/ d& T; {/ e4 f- r1 }) G$ O
  7.                 OLED_WR_Byte (0x00,OLED_CMD);: _$ W  J# v. i/ N
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 3 K5 a7 t; v# [, U7 ]$ f9 t
  9.         }
    # L* d! n% V8 c1 U
  10. }
    % |) X9 h3 c$ S; s' G' C8 m. u
  11. void OLED_On(void)  7 V& S; w$ A0 B! h& f% z
  12. {  4 T6 B1 F' A) R2 P% x  _" y0 J
  13.         u8 i,n;                      f% {& G! s: a  I5 m4 Y# ~( Y
  14.         for(i=0;i<8;i++)  : U/ T8 e$ ?+ O" l5 J4 k7 [5 }, }
  15.         {  ' B$ X6 e+ l- @  e" C2 ?* x
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    + K% k( S* S* ^
  17.                 OLED_WR_Byte (0x00,OLED_CMD); - Z& a8 q% O+ m9 Z! l
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 0 ?$ V/ x3 _& h- V# I& H
  19.         }
    * o! r, `8 H) w( ^+ d7 s
  20. }
    0 j& ^" [' _3 B, S2 X
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)( J4 U( c, E1 H+ f
  22. {             
    * ~+ N- T/ P2 a: B
  23.         unsigned char c=0,i=0;       
    ( i  S3 `! C* O) W0 l. u; C
  24.                 c=chr-' ';' l' w2 h) W' ^1 E0 y$ x" X  E
  25.                 if(x>Max_Column-1){x=0;y=y+2;}- t; Y. h3 K7 l" g& D# ^7 Y* r9 L' w
  26.                 if(Char_Size ==16); m/ O8 X. ?4 m
  27.                         {# I$ e% p- d, Z' p; G; m
  28.                         OLED_Set_Pos(x,y);        + b& ]% q3 Z0 n4 F$ R
  29.                         for(i=0;i<8;i++)8 ]8 h: p6 Z5 E# \# l6 n. G9 ]
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);: I  E# K& b$ b  P9 {/ }
  31.                         OLED_Set_Pos(x,y+1);; n* h' a  X9 H
  32.                         for(i=0;i<8;i++)
    % [5 |4 v- Q) Q) B7 n
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    : ?# {, ?4 ]" W' [# n5 Z
  34.                         }0 d; z& u7 Z) }7 i" V1 @4 S; q3 r
  35.                         else {       
    " B: S2 _2 Y: c; A  [
  36.                                 OLED_Set_Pos(x,y);+ ?. B/ W- w2 B  n/ M# [
  37.                                 for(i=0;i<6;i++)
    ) x: n9 _4 S  l7 y# I7 J$ ]
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    ! Y9 Z. B2 k9 `% e5 ]- P" U/ u' {
  39.                 }/ I$ g% {5 j4 @  N$ h; T
  40. }
    7 ]- F% q% m( O) r8 B1 r
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)2 s/ f" S# f( x2 E
  42. {                
    1 r2 l$ U4 w, f/ ~! }6 }8 K: C
  43.         u8 t,temp;: ^6 |7 @' a& D4 F# V& m! S" z
  44.         u8 enshow=0;                                                   # r& c4 T* [1 D. G3 S) X9 J
  45.         for(t=0;t<len;t++)8 b- I/ z$ X# S1 y# X; h/ i, B
  46.         {
    6 B! D$ x1 X4 m7 V
  47.                 temp=(num/oled_pow(10,len-t-1))%10;3 u* W# x1 e6 Y# o0 U" F
  48.                 if(enshow==0&&t<(len-1)); r" ]8 ?1 Q& u+ j
  49.                 {
    ( {( B: I% J" b: b
  50.                         if(temp==0)5 a  w& N$ e* X4 n- p  U
  51.                         {
    * `7 R2 c! q  j4 d
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);2 l) a3 Y6 `/ ~& ?
  53.                                 continue;; ]" Y5 `! y; n( ~
  54.                         }else enshow=1;   V7 x1 F% ~3 B3 Y
  55.                           ' G) K" f" K" f- f& H7 ^1 }/ ?
  56.                 }
    * [; L& R  [/ ?6 M8 ?6 f# }1 {
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 5 I6 _+ T" E* h6 l
  58.         }
    ( X: `! ]- K5 r( z) e
  59. }
    / {% }: I# g" I# T/ I6 W+ [& F+ [
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    % n9 Q5 j& q2 L+ h. U7 j& i( H6 V
  61. {2 z/ i' `( F; n  \
  62.         unsigned char j=0;
    7 D; k/ y+ }6 i, m( I
  63.         while (chr[j]!='\0')
    0 j, E1 a# [# m7 J" R
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);7 f4 S' ~7 C4 `1 u
  65.                         x+=8;4 W1 h" p( g$ g7 D! i! l
  66.                 if(x>120){x=0;y+=2;}
    9 N1 w6 J* R% ^+ o) y& d0 ^
  67.                         j++;
    0 v1 ^8 W2 o& Z0 b# u  N
  68.         }
      ]) @2 T# \% E4 h, U, a
  69. }
    4 K8 [8 Z4 S: u: S, i0 ^1 w

  70. ( X+ B" `  }9 u, k; R( `: F
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)$ U% y& }" p3 c: {. L
  72. {                                  8 t1 w5 C5 U. D6 ?- V' A# e
  73.         u8 t,adder=0;" i% k8 ~3 ]* f
  74.         OLED_Set_Pos(x,y);        1 E- ?' K" b9 ~
  75.     for(t=0;t<16;t++)$ b/ r; h: Q) ?: S/ O' d
  76.                 {- P% \; }! r1 A0 J! i
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
    5 O: f" |0 K' w
  78.                                 adder+=1;( d) R, j4 R- u7 G+ B" X) c! z
  79.      }        2 F; ~- s' T3 @; g  R
  80.                 OLED_Set_Pos(x,y+1);        2 u; y# _4 w8 P  v. j: U+ o
  81.     for(t=0;t<16;t++)! p3 A& C% U: r1 ^( b8 b
  82.                         {        + f* k6 Y1 S0 W  s1 A
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);7 p- ?& M, t' d1 W
  84.                                 adder+=1;
    0 s  U% H+ \" @2 R1 M1 D3 n
  85.       }                                       
    1 @8 D) Q8 G7 {& g! G& t$ D
  86. }
    / g8 A  _3 y9 q; _

  87. % B2 s/ J3 O4 L1 a: _2 z
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    + X  o. S' Y) Q0 E3 s3 _
  89. {         ; |6 K" B: p0 z# y
  90. unsigned int j=0;
    ! y6 [6 j4 J, t* B8 i) `0 K: s
  91. unsigned char x,y;2 q* n0 w8 A" H; I3 Z: m
  92.   
    ; K. x5 B5 f' }% m& v
  93.   if(y1%8==0) y=y1/8;      
    0 n9 {/ V/ i, l3 J/ V
  94.   else y=y1/8+1;
    7 p1 a+ k" c0 O2 O& R5 D+ ?
  95.         for(y=y0;y<y1;y++)
    9 j+ ?4 U8 o- b4 n
  96.         {- i4 L, N/ M0 V/ l0 F
  97.                 OLED_Set_Pos(x0,y);
    2 o8 i% i6 y& e
  98.     for(x=x0;x<x1;x++)
    " N1 R4 Z) u1 e: s- A5 v
  99.             {      ) S0 A. e) A1 q! z& p6 g. P* h  D0 k1 i: ?
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    $ S9 Q. Z# U. O, T, B: X  c7 {
  101.             }
    " F1 A( D+ g" {+ j: K( w
  102.         }
    6 Y% r  _; ~- \( U
  103. } & v6 I5 N; |& Q, \9 \  D# j4 \
  104.   s6 o8 w  n5 R
  105. void OLED_Init(void)
    $ Y4 S  E2 J7 [& M+ \
  106. {        
      q. s- @+ q$ j* z
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    % |2 _3 n2 ^+ m8 m
  108.         - M+ L: t( w  _# P  ^3 P  z) f) a4 P
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 6 |3 h" J5 S0 P1 O5 C- _  N+ z
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    8 Z" Z  Y# W* ^1 [5 A# }+ k6 q' m
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    - a8 D* C8 \: o. i
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    $ c/ i: o9 N$ m! U3 C
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         * y+ n5 k  l" J+ q
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    8 K" K( `+ J: e& r
  115. HAL_Delay(200);( q" E/ `" Z0 s% ]
  116. OLED_WR_Byte(0xAE,OLED_CMD);; H/ B8 h6 W4 D0 P, ^
  117. //display off5 [+ T2 k! s# [" Q1 c: v0 B3 y& g9 v
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    ' z7 C' Y  ~! V5 B. _
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address; i2 i: d  _7 A
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  ( M3 `. l# y" P  E! W2 u
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address6 h& x4 e3 _/ Z$ L6 W
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
    8 b0 t9 W* f9 \# c3 @# i9 b- a
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   ( Y1 e, Q$ V4 W- @6 W$ P* N
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    / Z; W2 x5 `$ J7 E5 k; c
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    / Q4 x' g  w" a
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)* a( M" Q5 I5 |7 @' y
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    5 Z  U, j6 d. t' J4 ?+ W' X/ C
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction! _# X7 m  l$ P1 f* J
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    4 n% c2 d: v6 n" l* [
  130.         OLED_WR_Byte(0x00,OLED_CMD);//, P1 z- D1 u6 R
  131.         ! `0 h5 u% R: i5 B9 @8 N
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division3 k# i) o! c. g. @6 x* }, _3 t6 Y
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    $ l' c9 v) d3 y4 _+ Z# m' S) M' p
  134.         ! _; u# ~) A9 F
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    ( ]9 x! w- F$ y8 v
  136.         OLED_WR_Byte(0x05,OLED_CMD);//; c2 G0 _0 ?( C5 B9 G% T
  137.        
    / j. A( r# U" J0 h
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    - T% m/ z1 N  m( ?3 q
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//6 D5 u  E/ E) a
  140.         8 m. M/ l& j- s1 j' E: h
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion& q1 ^' [& u# e, ]$ s* u1 n* n9 Q* [
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    5 b: @5 L0 R4 j& s
  143.        
    + q' W' e) g8 k2 P
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    ) {) V+ ^1 u+ N. a% W: h
  145.         OLED_WR_Byte(0x30,OLED_CMD);//2 V  f! u' _* N/ W" ?6 I
  146.         ! }8 M2 S8 \% z9 c. _6 o- e* [
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable  D1 N* Z+ z" y! l
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    ! Y) H4 _# r' w. D. t  j4 b
  149.         7 f; J" K( r- r$ h4 q$ |4 `3 U
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    ' V; b/ i. U& {( {- b# R0 `) g
  151. }  
复制代码
  1. #ifndef __OLED_H
    1 ~& f# o+ E( \/ _9 J4 p0 ~" J
  2. #define __OLED_H                                   . c7 D' Y! h! d6 z
  3. #include "stdlib.h"0 f5 d: Y: M0 V( b9 o! Y% I
  4. #include "stm32g4xx_nucleo.h"
    5 P2 l+ F) Y3 i: M0 Y5 C. y  S
  5. #define OLED_MODE 06 G% w! U/ q4 X3 _
  6. #define SIZE 8: F  C( @3 |5 j
  7. #define XLevelL                0x00. Q) F+ r) {, K
  8. #define XLevelH                0x10
    / ]& l2 x* b6 [: S
  9. #define Max_Column        128- q2 r/ W( Y$ R- ~
  10. #define Max_Row                643 R- J& y" J0 v! b/ z
  11. #define        Brightness        0xFF 4 j) U" q. j4 _
  12. #define X_WIDTH         128
    ( p+ g$ S2 n8 U, t, C
  13. #define Y_WIDTH         64                                                              7 x+ a, ^4 e! H- D
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
    ; \1 o& G; x% z; l4 [) s) K9 I9 h9 ?
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
    : w) M1 X2 E9 L! F7 t" }1 I7 q- E

  16. 2 ]+ G0 S8 J2 H4 X9 a; x' Y
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN% s$ {/ G6 r2 G/ Q# y# ?
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)/ _7 ^& W$ v, x2 R) V1 F" h

  19. 3 z0 s5 s- e1 |, r' }
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES) W2 A" T" ]. A5 t3 ^1 j+ S
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11), ~) A: p8 H1 B/ D! n8 K8 g( t6 n# g
  22.                      1 c) b6 j. k: @
  23. #define OLED_CMD  0. N9 U9 F& e! B' m4 [4 b) u; q
  24. #define OLED_DATA 1
    ) R& ]7 n2 G# N5 _: H( ?7 C
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  
    $ f7 J% O6 ~7 Y! p6 o! P9 n  Z
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE(); m2 H4 Z  q; L
  27. 0 I* _5 k9 H2 h- ?3 h
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
    ; f3 Q, V7 P" \# Z% ^
  29. void OLED_Display_On(void);
    3 j" [; k" |4 A+ p8 x' ]4 g; c
  30. void OLED_Display_Off(void);                                                                                          
    7 d7 a  ^- `: Q' W/ a
  31. void OLED_Init(void);
    7 y6 ~, V% m. K* Z4 D
  32. void OLED_Clear(void);
    ! q2 c* L( y+ Z' i$ S6 Y
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);+ r2 f0 u) r' q% L  Z7 a! w! y6 M
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    7 l7 j: S+ {; ]# t+ R+ J3 U2 v
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    9 ]) x5 ~4 p' d$ Q
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    . Z* p, O8 L! i: t  ^
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); # Q) ]! y# s' C
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);" q: t; p+ f1 k
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);, P" `( G& ~1 ]3 |$ e; t, j, {
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
    ) ~/ t2 I2 R9 B6 W- N
  41. void Delay_50ms(unsigned int Del_50ms);
    , A' d0 e' s. z( x) \, F- T0 j
  42. void Delay_1ms(unsigned int Del_1ms);1 U/ @* \  l' P, n
  43. void fill_picture(unsigned char fill_Data);
    * g- Q0 ?' @* p4 r9 P) q1 ]
  44. void Picture(void);
    * x6 a* o! `+ B
  45. void IIC_Start(void);5 ?8 K" j  n! x; n( u) [0 t1 S
  46. void IIC_Stop(void);
    / y0 f% h( W/ k9 r3 O: |- S
  47. void Write_IIC_Command(unsigned char IIC_Command);
    3 C6 x+ m* s' g. O# y. }2 t3 t) }
  48. void Write_IIC_Data(unsigned char IIC_Data);5 t6 d9 T/ X: c
  49. void Write_IIC_Byte(unsigned char IIC_Byte);% l% e) f2 U" \% a2 @/ l
  50. void Display_Battery_Level(void);
    , _3 b5 P7 `6 N9 H0 u! N7 x; ^
  51. void IIC_Wait_Ack(void);. [+ O4 |: c" E( ^3 i
  52. #endif  
复制代码
  1. int main(void), y5 _6 ~; O7 c' K" X4 m& @  }
  2. {% Q- O$ x# X9 Q3 r3 H; E
  3.         HAL_Init();
    : w7 B& k7 i6 u! _" O0 D0 M) m
  4. # ?8 ?2 N, m0 [6 }/ s
  5.         OLED_Init();
    2 @1 i0 w9 U1 `
  6.         OLED_Clear();  
    ! t& z# w+ R$ g( s2 E, G, U
  7.         SystemClock_Config();" V& p' |  T0 C$ o( L7 ]

  8. 0 q$ }* A/ u5 ~3 Q- a) O; J  w
  9.         BSP_LED_Init(LED2);+ B0 {# l0 G! [% ^; U# @6 P) c! Q  m
  10.         EXTI15_10_IRQHandler_Config();
    " I* [; a3 Z* W5 W7 H2 m5 |

  11. 5 \& I- j# I9 |, T
  12.                while(1)   b' H! a; ]; }
  13.         {
      Q  X& B, [4 U, w2 C* N! g
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    " d9 |( V: Z9 Y, S" W( Z0 K
  15.                         OLED_ShowCHinese(45,0,2);//
    2 D' \1 K& _3 ]
  16.                         OLED_ShowCHinese(63,0,3);//
    " E& c8 r: L! s: g9 C
  17.                         OLED_ShowCHinese(81,0,4);//9 a- @: O" L6 J# J! [% |5 d
  18.                         OLED_ShowCHinese(99,0,5);//2 u0 U& u* k8 A5 Q, i  _  X4 j3 M5 k6 `
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
      B% `6 j% b9 l9 L( v4 H
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    ' n& [: Y  j7 ~+ s
  21.         }          & l2 G* Q  h- K! ]0 U
  22. }4 K7 d$ r1 M. m
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg $ ^4 @9 E6 m3 ?( }( q+ C/ u1 h

  S0 B5 o2 V$ m% h, i5 G7 Q- y3 y+ ^, a3 y5 W& i
收藏 评论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 手机版