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

【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模块,今天拿出来来调试调试这个模块。
( l1 J6 L1 K; U1 k) m4 v      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB96 z& B3 V! o. @
       原理图.png
% y, q* L: v2 U, _    部分代码如下:
6 O6 y1 ~/ ?; |
: e! y/ v) A8 ?/ g; A, y  e+ q
  1. void IIC_Start()7 X4 M5 k8 x6 K1 x- W
  2. {
    2 H+ ^0 S/ v; S8 }! h3 A# L! z! Y: F; F
  3. / t3 X; Z0 ~$ R! K2 W
  4.         OLED_SCLK_Set() ;
    . @) r: ^+ @$ Y0 \
  5.         OLED_SDIN_Set();
    ' H) u# N- X& m4 l
  6.         OLED_SDIN_Clr();
    & |- e3 W" W7 J& y: \
  7.         OLED_SCLK_Clr();7 _0 \; q* r( ]1 E- a
  8. }( t. n) q% V" M" d
  9. void IIC_Stop()
    * e9 ~+ h& ]* w
  10. {( _8 Q2 @1 c. l0 f' S3 u1 j5 n
  11.         OLED_SCLK_Set() ;* x. H6 \+ d" |% C
  12.         OLED_SDIN_Clr();
    1 ?* t' X$ N( |) e# U; M" N1 [
  13.         OLED_SDIN_Set();- |; Y5 }* ?5 D
  14. }
    " t; z* J' @% l7 X1 s
  15. void IIC_Wait_Ack()1 ~: u2 v; u) c( t4 m; Q
  16. {
    9 U7 J/ c1 Z: H% J) e( L
  17.             OLED_SCLK_Set() ;
    , H6 W, H2 [9 e. P  g1 I
  18.         OLED_SCLK_Clr();
    . [# @/ q$ t; M9 o3 Y/ i" f2 i( f
  19. }
    - N6 H9 d: l8 X
  20. void Write_IIC_Byte(unsigned char IIC_Byte)
    ) I7 P. f$ H& L. s
  21. {
    + q1 i4 i7 C0 H( }
  22.         unsigned char i;
    ! Z* b' m8 |. b' ~' Y% {
  23.         unsigned char m,da;2 I: c) e4 Y2 [0 `* d: z
  24.         da=IIC_Byte;1 Y  `! F; H) X, v5 m, ]
  25.         OLED_SCLK_Clr();
    * N5 B& p9 x, c4 s( y
  26.         for(i=0;i<8;i++)               
    # E0 t7 ~. L, X1 ?
  27.         {) n8 t0 }9 H* Q5 Y
  28.                         m=da;3 k) p3 ~1 a- c7 W
  29.                 m=m&0x80;
    1 B* y  r2 s0 D# M3 [& N& M8 Q
  30.                 if(m==0x80)
    8 W2 ?# C8 w# q/ `
  31.                 {OLED_SDIN_Set();}4 P( I3 c& ?  Y! e% I
  32.                 else OLED_SDIN_Clr();& B* [+ S: J9 d! R* d
  33.                         da=da<<1;
    " @) k* y* P, X% G
  34.                 OLED_SCLK_Set();
    ) A" A9 s  b- z& f( [
  35.                 OLED_SCLK_Clr();
    % S2 L& W, W+ Z
  36.                 }2 Q/ w9 T6 s/ _3 B( [- i$ Z8 f( I
  37. }8 Q5 ]7 I0 S, {- M
  38. void Write_IIC_Command(unsigned char IIC_Command)
    : C8 _/ `5 f3 e# d( z& A( @/ V! M
  39. {
    0 s/ k3 W( f0 Z/ Z
  40.    IIC_Start();9 Z: m* |; z0 x4 }* ]$ Z5 Q7 A
  41.    Write_IIC_Byte(0x78);
    0 }  k  q% B% e- @3 t
  42.         IIC_Wait_Ack();       
    9 z6 z6 ]2 k$ H% C
  43.    Write_IIC_Byte(0x00);       
    0 U' T' f2 I4 V/ Q9 E0 W0 i
  44.         IIC_Wait_Ack();        2 l  I5 n; h' l$ i8 @7 i5 J  m$ j4 W
  45.    Write_IIC_Byte(IIC_Command); % |0 o9 k; G7 f9 l$ S
  46.         IIC_Wait_Ack();       
    ) C3 F# p. ^- q+ P8 y2 @. L
  47.         IIC_Stop();6 z. G) Y9 \+ {9 W
  48. }/ `% l- s( X4 G' O- c+ x8 A
  49. void Write_IIC_Data(unsigned char IIC_Data)( }4 k& f: C2 n7 g( t
  50. {
    + Z7 \6 L% O( Q2 g) S
  51.    IIC_Start();' _0 A! g- H/ Y5 W' N" _  b7 M
  52.    Write_IIC_Byte(0x78);7 j( s* Q5 m. _& l, [. u) }
  53.         IIC_Wait_Ack();       
    4 R% ?, K: w6 @! y  \" Z
  54.         Write_IIC_Byte(0x40);
    8 y0 T5 q; A" L* Q( M! _
  55.         IIC_Wait_Ack();       
    & q7 ]) r1 Z2 h6 U
  56.         Write_IIC_Byte(IIC_Data);
    / j0 A9 r  n3 o* F- r
  57.         IIC_Wait_Ack();        2 N# I0 x. [+ z& Q7 @4 I
  58.         IIC_Stop();
    ' H: k0 _9 L5 Z* ?
  59. }! ]% K7 N, L4 f# r2 ~# m* C+ c
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    . p; W) \. O, a! F; p/ v
  61. {
    / O! R; Z3 C* m* }8 D+ G9 c
  62.   if(cmd)3 V: ]" n; M/ J. U$ k
  63.   {+ O9 M6 {3 L* W, I& T
  64.        Write_IIC_Data(dat);% I, b% G9 B# T
  65.    }
    . v( Y# I8 _! ^& s8 L
  66.    else  A8 {, e; {& S4 b& l
  67.    {
    + k0 L. k1 R. ^* h9 I9 Q
  68.         Write_IIC_Command(dat);        # c7 ?8 X# z3 o. @$ O) V
  69.     }3 s" K4 H5 z2 G# [- D  B# Q
  70. }
    ! m6 H2 e- c4 }  ]+ J
  71. void OLED_Display_On(void)
    5 a7 k2 J& O% ?  j$ r2 v5 V( b' y
  72. {; Y4 o0 c- O0 m4 @! G
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC9 H) r: e$ C  q
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON6 V. J4 {/ E4 z  f# L
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    " ]( l6 D9 {8 {
  76. }   4 M% B* q4 g+ Z  {. U2 F
  77. void OLED_Display_Off(void)
    - J; L. |% X1 n' I% x+ N
  78. {
    ( M8 k% A: l  Q1 o* E& G* W6 J/ t
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    / `1 W' N& w4 D: w" R$ O
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF/ ]: `; G8 O, o, t& g5 j
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    , X% h( h6 q& U7 n7 j$ T2 t
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    3 `  x9 d4 N4 m" X. \+ x; a
  2. {  
    5 ^4 p% r( k3 V; }- k9 o" t9 h. _
  3.         u8 i,n;                    
    # q1 i  ^% H) n7 w0 V; d2 E4 i
  4.         for(i=0;i<8;i++)  
    : D6 c6 y$ V5 y2 ^6 @) [) `  h
  5.         {  ! l& Y' x# _( C2 f4 [
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    / U* c! a, u# {4 ~3 }' l5 D; I' B  J0 \
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
    ) p" M  @/ ?& h1 R/ `9 F$ d. `3 S; z% \3 v
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); ; x3 {8 {+ V" W/ i6 I) u
  9.         } 7 y. j0 s( _/ m# @! i4 j  T
  10. }
    + x. O5 M  H/ t# I% @! D
  11. void OLED_On(void)  8 K  `8 `) G2 I0 K9 i
  12. {  
    ) F+ J6 A+ C; b
  13.         u8 i,n;                    
    ) V, x/ B! h" Y$ F- `; D
  14.         for(i=0;i<8;i++)  ; p- f/ N) r1 l7 _
  15.         {  6 k/ I- @* ~% A
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    6 U- B9 X& x; F- s) t0 ^4 e
  17.                 OLED_WR_Byte (0x00,OLED_CMD); , `: r% e$ e2 r& J
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    6 q& n9 a% Z# \+ p' I+ ^
  19.         } # l. U, C0 Y6 }. h' y: }$ ~. r2 s
  20. }
      z" Q' L* L; D, L: u6 h3 f
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
    : [+ c4 e6 e) i* @
  22. {              1 o! z' c( q. ^
  23.         unsigned char c=0,i=0;       
    ! H; i8 Q! S; b0 t0 N3 f/ J
  24.                 c=chr-' ';
    + m9 x4 |  ]1 @. L) e
  25.                 if(x>Max_Column-1){x=0;y=y+2;}
    " O7 B7 ^5 O( q9 {" n5 a
  26.                 if(Char_Size ==16)
    $ a3 N9 l4 t+ l- k, U# O: F% |- i' F
  27.                         {2 C( @7 \  l" p$ S" E
  28.                         OLED_Set_Pos(x,y);        7 M. W3 x' m- t4 Q- A! t# r
  29.                         for(i=0;i<8;i++)
    # d9 K3 S8 k% S- V4 T
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    9 m, O& r: w8 |# b+ k/ U
  31.                         OLED_Set_Pos(x,y+1);
    % u6 {' Y& W4 ^/ ^3 k3 S
  32.                         for(i=0;i<8;i++)4 |, F! u2 c4 G8 }+ B3 C3 p6 i2 \
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);3 h3 P1 a+ ?8 f% d
  34.                         }% h5 D2 L) z. w  k4 D
  35.                         else {       
    ; H8 R4 a5 b4 S: \  O( e2 V. x
  36.                                 OLED_Set_Pos(x,y);
    ' n2 J' @8 S& N8 x' @
  37.                                 for(i=0;i<6;i++)3 i" p2 K3 E! X0 Z, w
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);                ) G6 @0 d2 m0 M" H+ T; q
  39.                 }
    3 Z" |7 c! Z6 Q' x7 L* ?  t
  40. }" t7 _; H( D) ]
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
    3 J8 k) y& r4 ^' p7 Y
  42. {                
      S6 `# {* A/ `  R- U
  43.         u8 t,temp;) M. T3 b. C) ~, [  x5 b
  44.         u8 enshow=0;                                                  
    * q8 \% A, h: ^; I7 \" I
  45.         for(t=0;t<len;t++)* e3 t  U. S) A
  46.         {
    * o0 h) g% r7 ~; s# I2 b, w! J
  47.                 temp=(num/oled_pow(10,len-t-1))%10;; [$ c" P2 Y6 W8 F
  48.                 if(enshow==0&&t<(len-1))
    4 Q, R8 o% d' h# W
  49.                 {; ~! R+ x3 ]" M  C1 }) P; {
  50.                         if(temp==0)6 F" b' `9 j$ X
  51.                         {$ o" r# H) u) A: r4 _% @8 ]- D. F5 o8 Y
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);, c" [2 {& r% Q3 \- ^
  53.                                 continue;6 w- O4 A1 T% o& n  F3 f$ k" s5 g* N8 ?
  54.                         }else enshow=1;
    ( b/ x; t% W& @7 p/ G- ?0 o$ j- I
  55.                           3 U+ s3 d4 O" `+ [
  56.                 }; X  q; r8 J! ]
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    ) P  h5 F0 F$ W( {" h% D; ]
  58.         }. ~$ Q+ X& Z2 R5 T& |0 P
  59. }
    2 m8 _" y2 d7 {) A5 z7 t( n
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    0 J, Z( o4 ^- j# _! I4 k$ ^
  61. {
    ; m- @2 ]4 c5 }' o) X$ t9 ^
  62.         unsigned char j=0;
    ( h( O% p# H! j+ _! o
  63.         while (chr[j]!='\0')
    ! s& h5 e  t# W! w+ ~6 l0 D
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    6 [7 d, r7 [0 B2 c$ v$ w
  65.                         x+=8;  ^  e* I* z) C( L2 T+ q' A) a* `3 ^* m+ ^
  66.                 if(x>120){x=0;y+=2;}6 r$ n+ K. |. Y
  67.                         j++;- G8 H9 d7 F4 H0 ]9 |# c
  68.         }
    0 Q, s3 v, M. [" {) V
  69. }
    + E# [# z' `5 j2 A) U
  70. , K* D$ e' l+ Z0 c' @+ ^2 ^+ b
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
    6 E. r1 P1 y- s$ M
  72. {                                  
    " t/ |+ t2 r! Y9 I: u
  73.         u8 t,adder=0;; h1 A8 j. {4 Z7 r- v
  74.         OLED_Set_Pos(x,y);        2 U! E  C! _2 L, t  y' Z
  75.     for(t=0;t<16;t++)+ V7 s) r$ N6 I  F) e* g; ?
  76.                 {
      @4 S! p: Q8 O- @
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);. H0 s& z5 l# R9 }
  78.                                 adder+=1;
    4 {0 `$ x: |3 c' a* D5 B
  79.      }        " ]- C. l4 B9 B# n
  80.                 OLED_Set_Pos(x,y+1);       
    ( R7 R8 `# \/ z# F( O: v& U
  81.     for(t=0;t<16;t++)
    ' K% [- x1 H; f0 y% H
  82.                         {       
    5 r2 W0 U; D2 O
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    : @2 O  Z% X* k- u% e0 W+ t
  84.                                 adder+=1;0 x9 F) Q% a2 x0 i- w  V5 r
  85.       }                                       
    # z1 V; C* S' E( L9 C1 R; K
  86. }% Y7 f# ?* x2 ~- ]1 C1 z0 p% j
  87. 6 e( @" w  R& O3 B) O% ^9 v
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])7 g, ^' C; P- ~4 S* k' _0 }
  89. {         & M$ P- e4 \0 j1 c+ Q
  90. unsigned int j=0;
    ' ~/ U" e4 X1 W
  91. unsigned char x,y;- s. l- x# P3 \, J# a) b
  92.   * f) k7 z. C0 E
  93.   if(y1%8==0) y=y1/8;      * K; s, [9 }& Y/ X; `
  94.   else y=y1/8+1;
    6 e- i+ v! x1 N
  95.         for(y=y0;y<y1;y++)4 q) k! g" i- l/ z( E6 h
  96.         {* v6 U6 F" k( |8 v* o0 e- _5 U
  97.                 OLED_Set_Pos(x0,y);
    8 y6 P- s; R! d7 l
  98.     for(x=x0;x<x1;x++). A7 l5 z6 i9 k; P6 ?: d
  99.             {      
    , a7 u( v5 L: `+ h7 [) G
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    5 D: Z  T& S7 K! F9 A0 H
  101.             }6 l. L* `9 O( z- ?
  102.         }, d* A* |) K# E. F
  103. } # S  c) {- f, ~
  104. ' [& H9 q; ?1 A1 ?& o: ?6 {' c2 t
  105. void OLED_Init(void); l1 U' z. v% O, X" X
  106. {        
    , r: a% |+ {# b, O
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    " O1 K: p7 j2 Q! K  D6 p) x
  108.        
    / |8 U! C$ e% a2 c2 [; n; J
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 ; O; ?$ w- p  W! U$ e
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    5 F( Y: q0 d/ j% E0 G
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    6 v( q+ e; D3 F( b7 M% U
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    4 D+ J9 t8 v5 w4 E. J
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         1 M. L( }9 U, N9 X! Z
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);4 j: K1 f0 X  M; M- R; h% t
  115. HAL_Delay(200);
    2 R* L5 A6 g, Q6 l: e
  116. OLED_WR_Byte(0xAE,OLED_CMD);5 R) ]- b: f$ f
  117. //display off$ Z) B% u. b- I# g( |! B) d/ D* C5 ?
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    " u3 A# S9 c3 ~$ q8 ?, g" F
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address: ^- |6 A. H' o( Y
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    7 \$ Y4 ]' h& \: u9 V2 Q
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    ' {( o1 y' O. c8 m2 p" |/ ^6 }' L
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
    ' m: X) s% a1 ]- Y4 E
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   - o, O+ n) I' a  Q8 A
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap . j! d, C$ c3 J( d
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse( P9 L+ @. ?# O
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)5 d" y% S/ m! ^2 \' e$ {9 x$ s; R
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty; ]7 _+ W$ v' L! B% @
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    4 ^+ p, k  x2 ]+ T
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    " N, s3 t0 [( y( ~. s
  130.         OLED_WR_Byte(0x00,OLED_CMD);//
    9 p6 ^2 e/ y% B- l3 ~
  131.        
    . l* _; ^$ Q% \: Y) T
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    5 Y- e0 i% x5 U; |  S
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    3 a. C  I' F: {, ]; s1 \( M+ k
  134.        
    ) g5 O5 {0 y2 r$ W4 _9 v- @- r
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    # z" u5 i3 @1 {' Q- m, }: O
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    : H) ^$ ~2 r: O& p% L" y
  137.         5 Y) \( {4 I  I, R
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    9 v/ I/ l3 l- B+ f8 s
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    8 j5 b! H) w3 @# @* I- o4 E
  140.         ! A2 {0 M/ m) X
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    9 N4 {' M/ C. u% h5 g) \* [. Y
  142.         OLED_WR_Byte(0x12,OLED_CMD);//; k3 h# M8 P4 |6 A4 P
  143.        
    ' A3 n. X0 Q% Z) R# v0 E% g0 V6 h
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh/ M5 K+ k' W8 Q' c
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    0 b# E$ N& z, m
  146.        
    1 V) A% U$ w- A( b
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    0 y, }; ?& {* a+ T5 [' N/ l
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    0 n& K; X; j: E
  149.         / x* e6 B# L5 F' L. W: h
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel8 U, z# Y6 R+ j% S/ O
  151. }  
复制代码
  1. #ifndef __OLED_H
    4 b9 O$ }$ U- V# H8 p
  2. #define __OLED_H                                   
    * D& @& w. Y2 r/ c) v/ v8 f
  3. #include "stdlib.h"" p8 B7 q3 @9 d$ G! d6 J: R
  4. #include "stm32g4xx_nucleo.h"
    5 V0 b) k- U4 v
  5. #define OLED_MODE 0: E/ V9 a" T; H' S7 ]( @( H
  6. #define SIZE 8
    $ H  ~: c- `- }) U1 t9 M
  7. #define XLevelL                0x00
    . D% }" v( t- b: a9 j
  8. #define XLevelH                0x10% J: M! C0 j! Q& {3 d5 e4 S
  9. #define Max_Column        128) y" ]2 V7 q8 E/ N
  10. #define Max_Row                64! d4 B9 ~$ @' c, b4 E2 O; i$ t
  11. #define        Brightness        0xFF 7 n: K( D+ h+ W3 D# o! d' v
  12. #define X_WIDTH         128
    " ?1 V6 c# b$ q$ A
  13. #define Y_WIDTH         64                                                              
      m5 J" L2 t9 M: p  _5 y
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK. ?& Z, b) {: L4 H" @: M
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)8 K. G! r& @0 r9 W3 Y
  16. 8 C5 ^0 x& ^6 X' M4 `( R2 u
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN; q& g% h2 A/ W; s$ H, z
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
    ! o# T: E' X  E. c/ g' ^8 Z' g- X

  19. % _* |1 C, `* p! i3 w, K# l
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES( p- D+ v3 s# o
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)2 b8 h% Z, I7 t5 C" y
  22.                      
      ]) P: |5 f: d7 Q2 d$ ]
  23. #define OLED_CMD  02 M" k  l. l% g( y7 ~
  24. #define OLED_DATA 1* A5 y$ V% F! I& z
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  8 e5 S' k5 D  x1 S7 m, B3 }  K9 a
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE(): C# i4 @4 O3 i, Q
  27. ' c8 ?( n8 A. ^/ `  y# H
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  / Z6 r' ^- m/ }* t
  29. void OLED_Display_On(void);$ G- `. @( B3 N2 l/ C
  30. void OLED_Display_Off(void);                                                                                          
    + Z8 A# i" L4 G5 P2 e' R! S
  31. void OLED_Init(void);
    1 m7 W0 b% W. ~, G$ C- A1 I
  32. void OLED_Clear(void);; i1 h; Z' y, T/ ~4 l  _
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
      @! U  \& n( B0 W" O, j% _
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    8 h3 @2 m8 I8 n
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);' K# J& M4 P4 g0 f1 Y6 L
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); % e$ b9 {4 L; ?6 Y% B
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); - U0 O2 _# z5 @4 [" A0 R# }4 w
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    6 J- ]8 B$ j, J3 X$ n, f1 B
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    ; ]5 W1 W- s& u. q  e6 z1 @
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);& a5 e0 v/ I1 q3 X+ K. k
  41. void Delay_50ms(unsigned int Del_50ms);
    ) |0 ?! ]) P5 w9 t4 b/ s5 g! K
  42. void Delay_1ms(unsigned int Del_1ms);7 s9 @0 A/ o3 f- n5 h
  43. void fill_picture(unsigned char fill_Data);
    ) q+ \5 K0 y5 m
  44. void Picture(void);
    & a0 U) `1 t6 h$ q$ F& z" ]
  45. void IIC_Start(void);) L6 P4 V5 ~% o2 Y4 X+ e' e% l
  46. void IIC_Stop(void);
    5 h6 y+ `; i- U* N* \/ _" ?
  47. void Write_IIC_Command(unsigned char IIC_Command);
    5 r& o, M# t/ I2 h8 u
  48. void Write_IIC_Data(unsigned char IIC_Data);
    6 O9 w# s! Z( s/ \
  49. void Write_IIC_Byte(unsigned char IIC_Byte);
      {8 J6 f* V$ }. a, V
  50. void Display_Battery_Level(void);
    3 i( u% ^7 s" D" p6 m5 |& i/ y
  51. void IIC_Wait_Ack(void);2 O# i  p2 Z6 N# N; {
  52. #endif  
复制代码
  1. int main(void)" C) C: ]: G1 L
  2. {6 e  `( l, X1 y5 G# ^) @0 D
  3.         HAL_Init();* V0 Q+ i# f0 ?+ [

  4. 6 K+ y1 v. C" G1 k8 _7 O
  5.         OLED_Init();
    6 J8 m5 j0 [' q+ a
  6.         OLED_Clear();  $ M. B+ t8 `# y* W) B/ m! J
  7.         SystemClock_Config();7 ^: A9 R* C2 X* b6 t

  8. % ]: U# x/ N7 G! x: |) z
  9.         BSP_LED_Init(LED2);7 u: v/ B0 {4 a, x
  10.         EXTI15_10_IRQHandler_Config();
    ( w) z* U( u! ?
  11. 8 A2 s+ Y5 s" L: {
  12.                while(1) $ [" n+ E, T: u, @  k) ?1 I
  13.         {
    4 u+ r+ P* P: ~$ r' z
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    : @, b& m  f. j  R
  15.                         OLED_ShowCHinese(45,0,2);//3 x7 t: q7 L1 O& f' I  h7 N
  16.                         OLED_ShowCHinese(63,0,3);//" i1 S! k! B" D1 M! O1 ]. i
  17.                         OLED_ShowCHinese(81,0,4);//
    . P- M  m2 B" r( C, H+ r* a& L* ~
  18.                         OLED_ShowCHinese(99,0,5);//
    6 V$ W# x* E; l. I4 h
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); 8 d( v. c4 d# Y3 \: K+ ]' ]
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    # A' P& V7 i: n) B
  21.         }          
    ' h! J4 P/ A  @" v/ V8 A
  22. }
    , ^0 q) E9 N  S% t( W
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg . n8 X1 c+ {9 \4 S- S
8 m0 O+ E+ f0 q- f# ^

: w/ u. k, |: Y7 p8 A3 M
赞 收藏 评论1 发布时间:2019-10-6 17:42

举报

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

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版