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

【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模块,今天拿出来来调试调试这个模块。
* m3 v3 k* N  p6 {      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB93 o! K0 j3 t2 f+ h; h8 E
       原理图.png / L* w5 t7 Q$ p" I
    部分代码如下:/ t/ h  K$ T) p
4 J% L* r( n4 a( ~- y5 \: y
  1. void IIC_Start()( ?! c+ S/ {% v/ _, k2 a$ W+ Q
  2. {
    ( t% M: _- z7 i' D0 t6 S0 J- Z
  3. " L) @4 c, w9 j0 h8 U! i
  4.         OLED_SCLK_Set() ;
    3 N9 V4 `! O: A- d5 ]- k/ P8 M& u# `
  5.         OLED_SDIN_Set();
    ) K6 W' B2 M; s7 ^1 W4 l- ^6 j, L9 ~
  6.         OLED_SDIN_Clr();1 i; Q% k5 c" \; _
  7.         OLED_SCLK_Clr();
    8 ~7 r4 z% r9 t$ D: Y+ k
  8. }
    ' L/ K* c; o/ f+ w$ b* P
  9. void IIC_Stop()
    / h5 x, c. x8 \+ U8 ]
  10. {
    2 T/ w+ S1 j) D7 A% n
  11.         OLED_SCLK_Set() ;
    ' V" k$ i8 \8 e
  12.         OLED_SDIN_Clr();
    5 n" ~2 t# ^" P5 X4 s/ z
  13.         OLED_SDIN_Set();
    0 X: c7 ]6 I4 E+ r4 }
  14. }. q+ D( l8 d+ D' @, n2 d* p- {/ z
  15. void IIC_Wait_Ack()% E/ ?& l# ~& Q8 A0 G
  16. {
    . o1 x' O: m0 K( \0 p! p4 j' k0 L  M5 M, y
  17.             OLED_SCLK_Set() ;9 t- v  p; d% }- u' Q
  18.         OLED_SCLK_Clr();
    " f: K2 C, p% B) s8 E6 \( ^
  19. }
    * p) ~% i6 `9 d3 F5 H  P
  20. void Write_IIC_Byte(unsigned char IIC_Byte)1 ]0 d6 q. w' J/ v# I
  21. {) k! f  m2 w' b1 U) b
  22.         unsigned char i;2 L  N8 m3 A7 T1 u2 g
  23.         unsigned char m,da;. g: i, B% }$ U+ e5 y
  24.         da=IIC_Byte;5 \. Z! A$ g: L0 |1 h; l( e7 e
  25.         OLED_SCLK_Clr();
    ; E" {( a, u2 p4 x8 T) ~7 J
  26.         for(i=0;i<8;i++)                7 N5 r5 q. P+ m  Q% [
  27.         {
    ( R# l! N. |8 ^4 j- h
  28.                         m=da;* T- A6 n' m4 O+ w
  29.                 m=m&0x80;
    1 ~" }: Y! I4 g- u4 r; y
  30.                 if(m==0x80)" j' Y# R& V/ ^. o
  31.                 {OLED_SDIN_Set();}
    ! e% w( R. ^$ a- o
  32.                 else OLED_SDIN_Clr();$ M8 Y; n1 p5 F' }9 J( O/ `7 b% S
  33.                         da=da<<1;
    * s0 a. l) i1 ]2 z1 g
  34.                 OLED_SCLK_Set();
      d* ^# W) M: q5 k# t- E3 D
  35.                 OLED_SCLK_Clr();6 Z4 f5 R8 w3 C+ D9 u4 a
  36.                 }
    + B8 ]7 E3 F* O5 p
  37. }
    $ @) p" A7 T. Y, ^
  38. void Write_IIC_Command(unsigned char IIC_Command)
    / r0 G2 W6 G( O$ m( g- T
  39. {
    ' J$ @; a2 Z& j/ H9 h6 ^) A
  40.    IIC_Start();/ h9 A( d" B$ v
  41.    Write_IIC_Byte(0x78); ; }/ w$ K$ `! q: a
  42.         IIC_Wait_Ack();        % [( ]% w  i1 y
  43.    Write_IIC_Byte(0x00);       
    & z0 w9 n$ b9 x0 ^0 L. T" d* s$ n
  44.         IIC_Wait_Ack();        ( h" v8 S1 _5 N. E! q0 z
  45.    Write_IIC_Byte(IIC_Command); - K* y2 E: [4 b  N8 L0 l
  46.         IIC_Wait_Ack();        + H+ a2 `3 C3 x& ]6 L# D/ i# y
  47.         IIC_Stop();$ M, x6 S9 g! H3 N9 c. h
  48. }; g- j; X# N% Q6 b; T  h6 h( Q6 q/ A
  49. void Write_IIC_Data(unsigned char IIC_Data)) c  Y6 _- y6 k3 I8 p
  50. {
    6 A: W/ [) u( W
  51.    IIC_Start();
    6 `9 p0 y( ], b3 i7 U0 h
  52.    Write_IIC_Byte(0x78);% O* W& A3 K. ^$ V& K; O. U
  53.         IIC_Wait_Ack();       
    8 k, R- G9 W  U  I) y6 E# w
  54.         Write_IIC_Byte(0x40);! e$ z; _1 G$ a; J
  55.         IIC_Wait_Ack();        ! P3 i: P" u# p, }0 Z$ |, e6 d$ W
  56.         Write_IIC_Byte(IIC_Data);
    . w5 ]  m1 s. S6 v' i: j/ V
  57.         IIC_Wait_Ack();        ! Q+ ^" W$ B, w% k* {0 K
  58.         IIC_Stop();7 A( u2 I0 q* A( w
  59. }  t/ w  `8 K0 u1 T6 N! Q
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    ! z4 A7 V+ F0 A2 y
  61. {) |2 d  k, Z  B: n; U( W/ Q3 T
  62.   if(cmd)
    * K  z/ e* f8 E
  63.   {- i5 g! K, {: x) N5 k
  64.        Write_IIC_Data(dat);+ r1 P0 E; O' u
  65.    }
    " h# x7 b9 y! U; H
  66.    else7 m' x2 K9 E; T& [! }7 K+ B
  67.    {
    1 _$ w+ C& M7 d: \
  68.         Write_IIC_Command(dat);       
    # O4 D( N% V: m- `
  69.     }3 `  j8 G: ~9 L- ]7 a. X+ t
  70. }$ q  O1 \2 i! O! t- N& i
  71. void OLED_Display_On(void)
    . e  M' G, Z$ W+ f7 {# x- Q
  72. {
    ' w0 o9 b/ {3 t# a
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    ! I) z4 R$ f! [3 |- }
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON, f3 C+ Y* r% o3 @& Q4 `" j
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON: Z# c+ F' [7 H/ m9 M
  76. }   4 X% x3 e" o: q% Y4 c
  77. void OLED_Display_Off(void)
    / u4 J  q8 z" s+ Q& @3 l
  78. {
    " u0 n/ |, @& j+ n7 J! ]3 f
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    - \7 d7 J- V$ _
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
    9 C. I& Z* ]- }5 {& n
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    , e! j7 c0 A8 R, j( Y; \' R0 s" u2 n
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    5 M) |6 b( c- F" j' P! l$ k
  2. {  
    / a7 M3 i- V! u# ?0 D
  3.         u8 i,n;                    4 b& ^3 W7 S, \8 V" U
  4.         for(i=0;i<8;i++)  2 Y( b& D$ a- p2 R3 a! ^
  5.         {  6 K& Z& l, S- u7 |6 Y2 K2 i% ]
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    9 Q4 r7 z1 `! k. r) Z5 n
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
    6 O' T  B: C) r1 C9 [3 B' W* [  n
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
    - C! L1 d, S' [5 J2 i/ |2 {: N% C
  9.         } 4 d3 i1 k2 f6 A
  10. }
    ( J+ D8 n7 {4 ]% U% v
  11. void OLED_On(void)  
    2 u3 m" M, i) }: }1 d
  12. {    {9 P- a. ~* y, {( J7 q
  13.         u8 i,n;                    
    . r% R6 D0 T, R* \! @6 l
  14.         for(i=0;i<8;i++)  
    8 _7 c( ~% t! y# I* t
  15.         {  $ W. D1 W- R9 G' u' }4 L
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);/ S6 d  n: q6 z2 f
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
    % A% G- G3 s' c5 M, F: q
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 7 G! n, N$ J( V+ @7 @8 U  n
  19.         }
    / a: ~* b! j! n5 w8 U
  20. }  K. a' x9 \- G4 O
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)0 X( s* L% H& \  `3 P$ S: s- v
  22. {              : p( }$ V% I5 X' x
  23.         unsigned char c=0,i=0;       
    ' z3 z% ]& L$ z9 \* f
  24.                 c=chr-' ';/ r$ i  J- X! e+ T1 G5 U# t' d
  25.                 if(x>Max_Column-1){x=0;y=y+2;}. C. f0 q. [4 ~+ [
  26.                 if(Char_Size ==16)
    . T' y3 H: {( L* `3 ~
  27.                         {' H1 h. ~; |1 Z3 V! W
  28.                         OLED_Set_Pos(x,y);       
    ' y1 p; B( ^/ D) h4 d! w1 U$ a
  29.                         for(i=0;i<8;i++)2 N7 C: A" z* _( p/ }/ z; Z# X
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    + a& c- S8 G" g1 Y! M" U
  31.                         OLED_Set_Pos(x,y+1);
    % I" O  o$ ]4 i4 y" h+ I
  32.                         for(i=0;i<8;i++)
    8 ^% @, }# `; R  ]3 Z2 x6 \
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);0 F! C# W8 ]# |. ?
  34.                         }
    1 Z. O4 a$ t. J( H
  35.                         else {       
    2 V1 p2 R7 D  V
  36.                                 OLED_Set_Pos(x,y);: H, |9 {0 v- G) R4 f' }
  37.                                 for(i=0;i<6;i++)
    # H' X6 _1 ?& U0 C% N
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);                * k$ f* M! [5 P+ A& D( Y
  39.                 }
    # B* i5 y; z' b: z0 K( H# z
  40. }) Q6 _# }4 {8 Z3 S' Y. a
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
    1 o  O. M* z; |' I6 x- G
  42. {                 ! W. c4 Y& n4 T/ `
  43.         u8 t,temp;
    ; J' n3 E% T9 Q% ?+ g
  44.         u8 enshow=0;                                                  
    2 W5 Z' h& q) l) d9 Z/ S7 H% F
  45.         for(t=0;t<len;t++)5 e3 T3 U  Z7 ^& d+ C  \/ L
  46.         {
    ( `2 a4 g' W' D+ f2 s# S
  47.                 temp=(num/oled_pow(10,len-t-1))%10;
    " f9 {) u" r. M, e$ _) X
  48.                 if(enshow==0&&t<(len-1))* b* H) d8 }( R. f0 D
  49.                 {/ V, O) q& |5 Z7 x! o6 Z7 Y# [- J7 |
  50.                         if(temp==0)8 H3 n" t- j/ n  ~+ b  M" O+ y
  51.                         {# N5 u# u0 k; u2 y. A0 W6 Q# d
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);! j3 r5 h  x2 r  }
  53.                                 continue;
    2 E7 ^) B( U7 T: q# s  i
  54.                         }else enshow=1;
    + p$ |5 f1 W- k7 S; Z
  55.                           * |( D- F  N2 ~2 x2 S4 F$ j
  56.                 }
    9 O$ Q. @. t) \0 @2 }( b
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    ; t# P; z5 h, h8 i6 E
  58.         }  I3 B- ^0 B2 Y4 ^+ g. k
  59. }
    6 z! Z$ b7 S3 Q. {0 v" J
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    ; H% Y7 f( m2 M# _$ l4 v& n: J# ^
  61. {
    # H. B3 r& F( a! h
  62.         unsigned char j=0;! u2 Q* {9 |9 d3 I5 j2 p
  63.         while (chr[j]!='\0')
    9 H# l$ {. T9 ^6 ]
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);3 `9 I5 d2 `  e3 T' r6 E( `
  65.                         x+=8;
    ) q' W, S1 f7 ^- T& E+ k, `
  66.                 if(x>120){x=0;y+=2;}
    ! D! v+ {! T' q, L
  67.                         j++;" W) u' S, t1 t9 ^  T
  68.         }2 ^5 d* v9 E! Z/ f4 l$ H6 ^
  69. }
    $ S% p8 d7 M3 r; V$ Z  I

  70. ) E2 Z: n2 \+ Z
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)
    3 g/ B4 n- ~" S3 @/ d7 f; p' Q6 R
  72. {                                  0 ?' O5 y! J1 x0 `6 u* o! ?. I
  73.         u8 t,adder=0;
    2 K7 \0 q2 p$ T
  74.         OLED_Set_Pos(x,y);       
    # I6 v2 F0 q: f
  75.     for(t=0;t<16;t++)# u2 L6 ^  E5 `& K: q0 r
  76.                 {$ N; @+ P6 A( A- T& @6 o* P$ y
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);6 r& N6 T  v  Y( W# }8 B2 K# U
  78.                                 adder+=1;
    9 @8 c! A2 {) T8 z
  79.      }       
    - o$ I: c& Z8 z( V
  80.                 OLED_Set_Pos(x,y+1);        + O9 Z: j; {2 l- J& ?- W$ h$ o
  81.     for(t=0;t<16;t++)  X- g; e1 ?( T
  82.                         {        ( V$ _2 q; T1 i
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    4 q1 Z- J9 s( U( I. Z2 f$ B# z0 @$ J
  84.                                 adder+=1;
    4 V6 }  Z. y6 j6 u" \
  85.       }                                        # j, G9 h* n4 F' \2 E0 N
  86. }
    ' M% E+ X! G( k- U. `
  87. 3 g0 ]* w; m( M5 _1 x* |- S
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    ' ]& w! H: N' F2 w
  89. {         4 @- V1 o) s: j" a/ e
  90. unsigned int j=0;
    3 Y  d  ^1 D4 ~; L. i0 B
  91. unsigned char x,y;
    % F' F  p' C4 v, u* v4 X) |4 d
  92.   2 z9 G2 p( w) `, J/ L/ B
  93.   if(y1%8==0) y=y1/8;      ( `6 y! v- A0 k; [- X2 m
  94.   else y=y1/8+1;
    ( X# r3 F. G+ M# A# c
  95.         for(y=y0;y<y1;y++)
    3 l+ L- q- `& n2 |! ^6 P
  96.         {9 d- z8 N7 S$ }; \9 G- l4 q- v6 s
  97.                 OLED_Set_Pos(x0,y);6 h. n7 s  ^  W! W; E/ X) |) o* Y
  98.     for(x=x0;x<x1;x++)
    ) G' L/ x1 {3 k4 j% G
  99.             {        b9 l6 R' q" u- t8 C; L& K8 L
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    , B! T: ?! [& d8 J- g, c8 m
  101.             }
    ) i; W/ Z2 D- P& ^; T1 j2 P
  102.         }
    6 z7 t; t( i& \: S
  103. } ! x( O8 w- O$ D4 P# T. D3 i. c

  104.   b2 b6 _1 X& Y2 }6 l- @1 N( l
  105. void OLED_Init(void), `# d4 i( n& ]: Q* W8 ]
  106. {        
    / k  g4 V0 w. G# ^% h* a; V" D
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    2 q( x. U$ r9 C# V% Z( R- p, m
  108.         5 M8 x" P6 s/ E9 h
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 8 {- I; v' g0 k% F
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    5 c8 f4 _3 x2 I7 i6 L; d, X' v& ~
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;9 w+ I( I) q3 @; C
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;& }$ A* b$ e& |5 p+ h
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         
    8 Y7 D+ |5 O3 N$ Z1 C
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    ; R9 w/ I$ f  J) o$ t; W- l4 D! O
  115. HAL_Delay(200);: O( D9 t9 u% R/ @( E- r" O) ~
  116. OLED_WR_Byte(0xAE,OLED_CMD);9 g8 M' E' |( }+ k
  117. //display off
    ' u( R4 H4 D. Q# ]; \5 ]
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    ' J$ p) [) s+ ]6 j5 A% K. N
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address& u( Z  B! z! N* W6 z* l5 b# t9 N7 h
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  ; n, N6 U. q( z: n  m
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    1 C/ H0 e  n4 E; r" X
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
    ( {' H: b2 u# k& e" F0 X
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   8 B* Y: C* B5 \+ k2 g
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    # U1 c" \, N7 U. E2 X  Q0 f( U
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse5 E! [) i) T' }; L7 y( ~( Q! r
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)) H- Q. B( v4 r9 o% v
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty5 Q# W6 ]+ {% Y: F# T
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    1 a9 Z6 q; l* K9 \
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset, t" z1 Z! B' f3 ?* ]$ j! o
  130.         OLED_WR_Byte(0x00,OLED_CMD);//4 l; O/ v; `" A
  131.        
    : D2 ^  @: c/ C9 g
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    : l, p! H' _4 B7 i# a- V3 |) v' Y
  133.         OLED_WR_Byte(0x80,OLED_CMD);//4 e4 h; q; b2 L5 W
  134.        
    : W7 ]: K+ G7 |
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    . ^+ A, H- L4 p
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    9 Y# s1 y/ h7 ~& N. s! s! T
  137.         0 i4 g" r+ r' u! ]' o( {, v
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period/ c! P8 [' ^* u4 d* X
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    1 x2 f6 G" r6 L
  140.        
    - o" d) J4 S* @( J0 C0 V/ @
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion9 e1 X$ w! i, R; ?4 n* o
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    / y% z0 t' d" `/ d- K" e
  143.         $ n2 n; U: q0 B5 a8 e# P' c0 N
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    # g: [! v. \! b$ O4 G4 m& u
  145.         OLED_WR_Byte(0x30,OLED_CMD);//! p, A! F" b/ W! z- @# S% O
  146.        
    6 r, e4 q6 |3 o, x; w
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable" x" j& D- }+ Z# V! s3 p
  148.         OLED_WR_Byte(0x14,OLED_CMD);//6 ~# [- Q! P  s7 C( Q
  149.         ! f% l* a7 E9 L6 j; b
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    : N6 A! ?8 }/ x0 F3 E
  151. }  
复制代码
  1. #ifndef __OLED_H3 j3 k( `7 W0 V/ c
  2. #define __OLED_H                                   6 l$ X; F3 }) }4 v7 v
  3. #include "stdlib.h"
    7 z, T+ y; f8 c
  4. #include "stm32g4xx_nucleo.h"
    0 B+ n( `2 O' z- u  o
  5. #define OLED_MODE 0. L$ o* F' v2 K+ [9 c( x! F
  6. #define SIZE 8
    ! b1 ~5 `" Q. V% A# q. m2 k
  7. #define XLevelL                0x00, F+ L7 j$ I( k: ?0 n4 b
  8. #define XLevelH                0x10
    $ x/ `9 l/ I' R. A$ N& ~- K  V
  9. #define Max_Column        128) t) z9 B  B% q5 q& c+ ^7 s
  10. #define Max_Row                649 n% C+ N, y; o* |9 @
  11. #define        Brightness        0xFF
    8 V2 l  v9 ^9 c, n% m
  12. #define X_WIDTH         128
      v& x$ z% t5 r0 ]& I/ g( {
  13. #define Y_WIDTH         64                                                              * v0 R4 F: t! o2 R+ O1 Q7 V1 v/ ^; O
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
    ; T$ F; q( T& U2 R9 V
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)+ f; D( A* E1 X- B- U
  16.   Z$ b  S9 k# Y: t& F
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
    / E  e9 K1 t8 l( f; c: e$ R+ C+ C2 z
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET): X: d/ [0 L0 u
  19.   R) y0 O$ s& o
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES5 ]. H3 u; M1 I# [
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
    1 L, V' n, d8 t6 W
  22.                      
    9 z. z5 O4 \, m9 N; Z) Z% W3 A
  23. #define OLED_CMD  0
    0 j5 Y6 `0 \% g$ _4 |& K  ^" H
  24. #define OLED_DATA 1" c5 F5 F% Q2 E  J
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  % X) Z$ G; O2 @) w
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE(): A: n) O0 F$ `8 n5 I, l' g

  27. . {. ^* t, f; {0 U
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  4 v: Q3 K- W& Y9 e9 k
  29. void OLED_Display_On(void);* a# U' f! P- V/ C; f- ?' q; j$ ]; |
  30. void OLED_Display_Off(void);                                                                                          
    . w! S9 Q3 H! [3 ~) q$ ^9 k/ I
  31. void OLED_Init(void);
    ( v6 i- N6 u* N, b. r
  32. void OLED_Clear(void);
    : e6 i% R" [! ]  l9 b% L2 w  S
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);. L  q: k9 |  x
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);) B! n) f& z- l& j# h9 w$ H
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);" \  L9 s& |3 Q$ S& b6 E. ]: g
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    2 y; t/ J4 O  v  H8 F
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    ( }* z/ U. n1 j& z
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    ' U3 O2 R  x8 i, i/ }
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);# c2 w. `- }; L9 t3 E
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
    1 w! V+ V) w. V
  41. void Delay_50ms(unsigned int Del_50ms);" A1 n: m+ r! w5 x5 D
  42. void Delay_1ms(unsigned int Del_1ms);) h/ l4 V3 ^. R" Q/ F0 C) ^
  43. void fill_picture(unsigned char fill_Data);
    + Y( `' w- D3 t& f4 V
  44. void Picture(void);0 I& q. @' {- G$ G- H! [
  45. void IIC_Start(void);
    " {7 {# x" Z2 p5 T, h: b( S
  46. void IIC_Stop(void);. J+ E; s  l: b; m' f- q9 G
  47. void Write_IIC_Command(unsigned char IIC_Command);
    8 y& Y( J: f0 @, o& A4 }
  48. void Write_IIC_Data(unsigned char IIC_Data);7 T2 S2 R1 k' V9 H- ]
  49. void Write_IIC_Byte(unsigned char IIC_Byte);5 A/ U+ d. D% {) ^  `1 z3 [$ l
  50. void Display_Battery_Level(void);& j" v% ]6 u3 h! ]. k
  51. void IIC_Wait_Ack(void);/ l0 M3 E+ [4 h: s0 _
  52. #endif  
复制代码
  1. int main(void)  ?# i) ~) I6 o
  2. {. D% G0 K; v. h% {; m9 u
  3.         HAL_Init();8 {1 q" l2 I, j0 P4 H
  4. ; S( F* l, Q) _5 V3 ^% `2 L$ P
  5.         OLED_Init();8 z2 L8 ?+ m$ o' b1 N6 I4 I2 C
  6.         OLED_Clear();  * z3 k! O" b6 K- M5 }8 q9 G1 @# I
  7.         SystemClock_Config();: w5 q6 D' f5 Y9 q1 F3 p& A, h
  8. 8 i# K4 O$ S: |
  9.         BSP_LED_Init(LED2);
    * U; \3 d/ N5 r& e( K
  10.         EXTI15_10_IRQHandler_Config();7 l. j/ R4 z  _2 |# `  k5 n: c
  11. 3 T& }& G0 |! K* W+ n$ B% n
  12.                while(1)
    , r. V: \8 {) z1 g: X
  13.         {, o8 E* `4 _7 y5 u
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    + K) {( i  P4 F9 g
  15.                         OLED_ShowCHinese(45,0,2);//
      i% }# f) n; x/ N' s
  16.                         OLED_ShowCHinese(63,0,3);//* M8 K8 W) B, K! v; K- A" k
  17.                         OLED_ShowCHinese(81,0,4);//& @& c2 l8 Y6 z/ n3 ?: [
  18.                         OLED_ShowCHinese(99,0,5);//
    ; Y* C4 p8 P$ Q+ u$ Z
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); . X; ~$ [/ n. q1 {! G! G
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);" ?4 a' X! O/ w2 Z" k4 v  U8 v
  21.         }          
    6 J; a8 e: G5 z9 v1 {$ Q6 B3 h/ g
  22. }
    : `9 |1 q( N( V
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg
/ h" Y4 F. I" j5 ?
+ I" ]; K. v* E" C/ ]
2 }4 {# S, G6 H& P0 j1 [$ A" Q
收藏 评论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 手机版