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

【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模块,今天拿出来来调试调试这个模块。$ i/ F3 Z2 d' Q# i- [: J
      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
9 \, o5 Y1 V* a9 K" }/ V       原理图.png
/ u# Q; F) j" w+ P# Q+ @# e! z    部分代码如下:* r" g  d  B  d/ g
8 ]# G7 l: h- o. C
  1. void IIC_Start()
    # p. h9 |! v# e4 p4 J3 ^3 X
  2. {& j2 o  _  t- |! d3 ~

  3. : m) P7 F$ f7 O; u3 ^1 \( x
  4.         OLED_SCLK_Set() ;
    - n) X- o5 b8 e" o. i! p
  5.         OLED_SDIN_Set();7 h0 `+ R- Z, H9 m6 J
  6.         OLED_SDIN_Clr();% P- }+ A, o- n
  7.         OLED_SCLK_Clr();8 J. }+ N  u2 E
  8. }
    " c. q# b/ \  f
  9. void IIC_Stop()* W  Y  ]4 c8 b/ W: D
  10. {5 K; N, w/ ~9 a& G$ `  S+ P
  11.         OLED_SCLK_Set() ;
    " _9 K) P; p5 c0 n2 P# [, F
  12.         OLED_SDIN_Clr();0 Q+ [' C2 n% c" @
  13.         OLED_SDIN_Set();. K$ {( E4 W1 B$ d: w
  14. }
    7 G$ a' k# b( o. T8 H
  15. void IIC_Wait_Ack()
    : g' w) x; F0 d) Q1 ]# E. o* k5 R
  16. {
    7 m; C' u4 |- {, P  Y# u: y- L3 z
  17.             OLED_SCLK_Set() ;5 H8 y% Q. r7 f$ y! q) o3 w
  18.         OLED_SCLK_Clr();6 z# e, b- Z* Z: R/ @3 h
  19. }0 V! H/ y, h1 ]1 Y8 P, _+ J+ T" ^
  20. void Write_IIC_Byte(unsigned char IIC_Byte)
    9 e) N% ~3 e6 j# P  ?" k
  21. {& L7 S/ }7 _' R2 f+ s6 K
  22.         unsigned char i;
    4 \. y' i# `0 L! y9 s5 J
  23.         unsigned char m,da;
    + M7 s  w! c2 I5 R0 V7 }% V+ f
  24.         da=IIC_Byte;0 q% Q; a2 N9 p$ H
  25.         OLED_SCLK_Clr();- w. Y! [9 h% n; T- d3 _0 m9 O+ R
  26.         for(i=0;i<8;i++)               
    7 d6 d" S& p( ~6 q# k$ F
  27.         {
    ; x3 o: m6 P$ h9 [, L
  28.                         m=da;
    ) z4 `/ L5 e$ _# W4 J% I# W
  29.                 m=m&0x80;
    $ a! B. E3 r2 f+ s
  30.                 if(m==0x80)
    2 S9 n; P% I+ R
  31.                 {OLED_SDIN_Set();}
    ( h3 N" w/ E' I; h
  32.                 else OLED_SDIN_Clr();
    % C, D% j+ u2 h' [
  33.                         da=da<<1;! M- {5 `% O1 g( R+ |
  34.                 OLED_SCLK_Set();
    9 u( Y2 c' t, M4 S5 z5 i4 x
  35.                 OLED_SCLK_Clr();
    ( F: I* ?8 k) B1 k; @1 P% W8 }3 W
  36.                 }
    9 V9 C4 W3 I1 T0 N- O' Q
  37. }7 \% l6 n( J7 z4 G
  38. void Write_IIC_Command(unsigned char IIC_Command)
    5 O9 O9 Y4 B% @8 a
  39. {
    8 P9 G5 C7 X0 |: [. [( ]# N( `$ `, u* D
  40.    IIC_Start();) O) @% B6 a* I6 `9 |, ]( \( `
  41.    Write_IIC_Byte(0x78);
    ( u" x; r* l4 m
  42.         IIC_Wait_Ack();        ) b1 P! r0 Z; Y! Y7 i: Q! [
  43.    Write_IIC_Byte(0x00);       
      |6 Z/ [/ h0 P0 w
  44.         IIC_Wait_Ack();       
    " q2 ~+ p2 o& N" q9 v
  45.    Write_IIC_Byte(IIC_Command);
    . B- x1 @1 S" A7 A3 y$ R7 N2 g! E0 P
  46.         IIC_Wait_Ack();        " I; O' ~% v% f& F6 P% I( V2 u
  47.         IIC_Stop();; h( D4 ]$ j; t. Z3 r) @$ U; n
  48. }7 C- D7 x, w8 L! f4 A5 w# [
  49. void Write_IIC_Data(unsigned char IIC_Data)
    8 O; B  W6 d  N; ]
  50. {
    - Y6 z* ?' b* E7 v
  51.    IIC_Start();
    1 ]" L( B) Z# G# t$ B8 M, T
  52.    Write_IIC_Byte(0x78);
    8 D$ `3 o) W3 {8 h
  53.         IIC_Wait_Ack();       
    7 q8 D( c$ |% G
  54.         Write_IIC_Byte(0x40);
    $ \! I% S! z) k, K' W
  55.         IIC_Wait_Ack();       
    3 b! m6 S, p) F6 {& C# x, a3 D$ {/ ?
  56.         Write_IIC_Byte(IIC_Data);' m/ t: w; z: D# s! e9 w# l
  57.         IIC_Wait_Ack();       
    " m/ m* w$ x5 L" x& D, g( i
  58.         IIC_Stop();
    4 U) b( l4 |5 t+ O( [( ?8 x
  59. }
    1 A" O9 ~( C' |2 X, V# a# N
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    ( E7 ^8 R2 ]4 R  U$ h
  61. {+ Z5 _, u" O2 a) |5 r
  62.   if(cmd)
    9 l. f9 Z2 Y9 D" P; m4 @& {
  63.   {  `/ B, a- C$ E% Y: q& A
  64.        Write_IIC_Data(dat);
    8 w) E* d2 L, {( s$ y, a: s; g. J
  65.    }9 }$ ]$ c4 Z/ Z4 ]- S# v
  66.    else( p. w- X: R" n, T0 \
  67.    {
    . ]% e- @+ x/ M, U" S
  68.         Write_IIC_Command(dat);        0 F! e* F$ q4 u; F9 B
  69.     }0 L! s4 P6 O! B
  70. }
    ) G1 N% N  c( ]7 k5 f3 h
  71. void OLED_Display_On(void)
    % T5 e5 x# ^/ m. b" u
  72. {: p6 J5 c( b, C" f. P! {  D
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC! l# n: z' E. k5 @( Y
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
    ( m. S$ ], o  C; Q" h
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    & V4 b) ^. R4 w6 u
  76. }   
    3 t& n# Q+ |$ V2 i7 E
  77. void OLED_Display_Off(void)! F2 l' l$ R( y& s( y5 w7 F1 E# F
  78. {; ]  x  O* b) o& M& w2 W  U, j
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC* u/ N6 q$ I, Y9 K! o& _0 N
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF( c9 d+ k# g( J% [* h7 \
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    $ m+ ?8 H. o' @5 G
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    ) z" X2 w+ ]% j9 N4 S/ D
  2. {  ' J" D+ a7 V0 Y4 {
  3.         u8 i,n;                    / X; l( Z+ e1 k: B% ?$ ~0 ^
  4.         for(i=0;i<8;i++)  ! K9 o9 B/ U# \6 B1 c. E
  5.         {  3 \: ^# ]+ }# G: k
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);8 `! Z9 T, J: T5 D" w9 }" O
  7.                 OLED_WR_Byte (0x00,OLED_CMD);' l) z& p" t$ h5 R1 a" |1 r
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
    1 m2 r. R& h; |* {1 }5 z
  9.         } + U! O/ {& i% }8 L2 G
  10. }
    2 [% X9 x) A' F. A9 ~
  11. void OLED_On(void)  - \1 ]$ ]. O* g
  12. {    ^2 s7 E6 y2 G2 F. w2 l
  13.         u8 i,n;                    5 p& k& ?! l- X, c
  14.         for(i=0;i<8;i++)  9 ^  T. v3 `6 x9 [# N8 o' f
  15.         {  
    % X8 X' @1 t0 m3 F  Z$ N7 l, T. R
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    , A- [1 S; h+ A4 n
  17.                 OLED_WR_Byte (0x00,OLED_CMD); : ^; U( K; Z2 P1 ?
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    + D) B7 `2 `- \( e; j
  19.         }
    0 I- r: d. f7 }: M; r
  20. }3 J6 \$ Q. X2 B5 r; a
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)5 J; L) T. i5 S6 T; {9 Q7 S' ^- r
  22. {              - R- {7 B5 M3 _3 R& y" w( I
  23.         unsigned char c=0,i=0;       
    8 E' h9 W3 k6 Z/ g2 b; h
  24.                 c=chr-' ';- x2 }0 t- x7 n5 W+ k3 r6 w
  25.                 if(x>Max_Column-1){x=0;y=y+2;}6 V1 S$ B4 N% z' G- v3 L
  26.                 if(Char_Size ==16)
    5 z8 N: Y$ P/ R
  27.                         {4 i4 w, m# k9 z# M  B5 L
  28.                         OLED_Set_Pos(x,y);        " L& T! H- H1 J
  29.                         for(i=0;i<8;i++)
    % ~  t, ]1 K# a: r
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    ; N* {2 s8 f8 W% V! M2 N( H2 m
  31.                         OLED_Set_Pos(x,y+1);9 W, q* P, z3 ?- q
  32.                         for(i=0;i<8;i++)2 }1 o- ~+ X1 p  |
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);" q5 u% c% i2 f1 q" }7 e
  34.                         }
    * V+ u5 E: o0 `9 |% ~; B3 U0 M& ^
  35.                         else {       
    ' u( S0 A% C! g1 Z6 ]: E9 ]
  36.                                 OLED_Set_Pos(x,y);
    - z1 m( G; X2 B
  37.                                 for(i=0;i<6;i++)$ a" T7 k2 t, L6 l
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    ( l% H& x3 U, o* b0 H' A
  39.                 }
    . {9 P+ c3 }6 u" \, s
  40. }) u9 L' m0 ^" z* H
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)- ~% @/ [+ k- C5 L
  42. {                
      z5 O, C4 G) y* F7 a) K( H0 E
  43.         u8 t,temp;; e& E5 h: V/ v8 G% n
  44.         u8 enshow=0;                                                  
    # r" u# W) O6 ~9 U9 G3 p1 N! W
  45.         for(t=0;t<len;t++)
    3 @/ F4 l! g& Y8 c
  46.         {" v5 f7 q( q9 e6 c( N+ i' r+ T6 r
  47.                 temp=(num/oled_pow(10,len-t-1))%10;' r+ Z3 o; Y* `
  48.                 if(enshow==0&&t<(len-1)): n; @% O8 l9 J! `5 _
  49.                 {
    # R0 o; L0 R& K" |
  50.                         if(temp==0)
    - r: h3 r5 Y# t4 j6 U3 U/ O
  51.                         {
    3 a6 Q9 O9 z" ?# ~. @
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);: a' E+ S, n$ X' H4 r! |1 U
  53.                                 continue;  ~; Q; D5 L; P1 H! z7 O5 p1 l
  54.                         }else enshow=1;
    ; V8 S/ e' J$ m/ P# c" J+ H) O
  55.                           
    3 C$ T: F* n& l7 I' ?7 O$ n) p
  56.                 }
    ' o+ ~; n% }! N! ~' {; O" |
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    + j3 \2 O& i, u( s7 g/ J" C
  58.         }
    . n0 \1 {8 S: `* q
  59. }
    % H: ~$ }1 A# _* q
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    4 o' x1 {$ @2 A. W4 ]
  61. {
    ; V! U: X2 f+ e$ ]1 {
  62.         unsigned char j=0;  p0 S' p4 C: k9 y% P/ ]  p
  63.         while (chr[j]!='\0')# U* ?( O8 p3 b+ k4 l' V
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    8 Z' m* T$ ^5 ]
  65.                         x+=8;% R. c, x8 p+ k% k
  66.                 if(x>120){x=0;y+=2;}7 @+ W' c6 w4 f2 H- c" G: v$ |
  67.                         j++;$ [3 z/ d, w7 S. y
  68.         }
    5 Q) E) S+ w: s! o& B0 M' p' t
  69. }
    7 m/ Z' h) L# k' A1 @6 W0 c

  70. & H% B4 h% E" S  ]+ Y4 X7 N) P
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)5 t8 F$ ]+ M# L5 s/ R
  72. {                                  
    4 M: Q" Q6 o0 z7 d1 p2 y
  73.         u8 t,adder=0;
    + {4 ~/ ~6 {1 e* ^& ~) ^) m% K
  74.         OLED_Set_Pos(x,y);        0 j* z. S* {5 y4 m6 o+ N$ Y4 `* \
  75.     for(t=0;t<16;t++)2 n% m0 D: [& ?/ k1 b1 Q/ R
  76.                 {1 E4 _% N7 S" g' W
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);# j& y" r% u  d
  78.                                 adder+=1;! H$ O/ p, U  \0 I: t* F8 t
  79.      }        / b1 O  ?- u, k7 ~% k
  80.                 OLED_Set_Pos(x,y+1);        . J0 p* l$ T$ s; u0 R. s' ]8 d
  81.     for(t=0;t<16;t++)
    / d8 ]6 M( A, I# J2 x
  82.                         {        + H9 J* d5 }, v
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);' f' ?6 U6 q- @
  84.                                 adder+=1;: e; E8 t# G% y& Y2 V! t. F3 N
  85.       }                                        8 I. J% J9 r9 _9 i/ c6 h
  86. }7 L7 ?  Z1 y3 W0 e

  87. ! c8 M( u: d- ^. E
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]). Y* W- u9 v0 D8 {1 ?) B6 o
  89. {         . i# I0 [2 @# \
  90. unsigned int j=0;
    5 ?1 ~. H7 H! p" V3 p
  91. unsigned char x,y;& {/ |# e% y6 `2 p
  92.   
    " K8 n& {" m% ?" [  K" [8 Q
  93.   if(y1%8==0) y=y1/8;      
    . _2 o* ~- G& @3 u8 J
  94.   else y=y1/8+1;
    ! ]4 U: z" Z# z) p, B9 L7 f
  95.         for(y=y0;y<y1;y++); {6 K+ I4 W% P2 y( e
  96.         {9 q4 Y; W: g' C
  97.                 OLED_Set_Pos(x0,y);0 V( G: R. ?. O
  98.     for(x=x0;x<x1;x++)3 G+ z" z0 M; s- E! b  V
  99.             {      " \1 |# _2 K. Z
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                   
    " E7 |; d$ G7 Q, ?; p; Y  l/ x
  101.             }
    ; J0 ^) F  F8 r: P
  102.         }# Y* I- s) F: H  p9 Q+ E
  103. } 5 t' e" Y6 {2 @6 N% q9 ~' }" M# `
  104. 5 B" c+ i4 `! \7 X
  105. void OLED_Init(void)5 n2 ~- b) v. {* v
  106. {        
    3 ^6 g2 b  g! M" z
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    ( B3 B5 C3 a. M% m
  108.         " Z! R. m6 X0 i+ v! w9 Y$ H( C7 W
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                
    * \/ R3 \1 f0 ^! V# f. n3 a" e
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
      ?1 H! N4 a+ n( |7 `; F
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    ' h/ A. x7 u, W/ ?+ ]1 v
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    5 \% {3 d$ S7 \6 X6 S" t
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         " p9 o/ X% ~) V% `; B% C9 T
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);( }1 ~6 ]  `# G; T& Y7 K, P* u
  115. HAL_Delay(200);
    2 n) B( E( ]7 g2 Z" m- L' F
  116. OLED_WR_Byte(0xAE,OLED_CMD);
    ! \" C3 f5 O; q5 j1 G
  117. //display off% x; `; x" z5 A1 e2 \
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address# V6 M3 g8 u8 L8 V8 x- `# I2 D) S3 t
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address& ]" T8 T* n1 M; \. q& l
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  / g+ [7 _* |0 M; H( C: r' u7 F
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address) g, D, @! D0 i* J( d) R
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control' c# }- z  M2 T; `6 S$ q
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
      m/ c/ [! Y% i& ]+ L, }
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 9 X& w7 M8 k' K. U/ t! C
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse" ~$ W( f& f: |: G1 [4 h! C, f) X5 I
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    / S$ N# w3 v! U6 k' d8 i* R# E
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty! a! w6 B$ d: `, a7 g
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction+ Z" W. v. L- }
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset; N( D: J3 u. U
  130.         OLED_WR_Byte(0x00,OLED_CMD);//+ a5 F4 h3 b4 k4 R) V/ ~# t
  131.        
    # K9 W" Z6 V8 `2 p
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    , K& h, q0 f& P4 F6 V
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    7 d  b$ J9 b$ V
  134.         1 P9 }- \! ^+ }+ x6 x5 }8 _
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off( W6 `6 R* x% D  S% `
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    - y: r& g- Q6 M* [  R  h
  137.         ; i5 {! q4 g1 q& ?. B8 m4 `
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period6 b. v0 u/ W! @& X
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    9 k0 ]- w7 @. ^% f  }, b( W! S
  140.        
    / n) S% _: {& x- R" C# L! Z
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion* P0 w0 R- E! \3 Q  A3 v6 j4 |
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    * t6 a- K- m* C
  143.         9 A) d) j6 h8 W1 e+ e) R! f% S4 D& S
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    ( s3 J, h; r+ }& M% }
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    ) G3 Q! `# i" E. ~: S3 N4 o* t
  146.         % N) B6 g1 i6 E# b4 V9 I0 o- l
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    2 h0 B( @9 x' h% q8 f$ y
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    4 L7 B- ^6 P, O' D9 m* F$ Y
  149.        
    * f6 ~* H+ h, T/ N7 f/ [. A
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel2 q2 P. g; C( Q( [7 K1 B7 z% r1 d
  151. }  
复制代码
  1. #ifndef __OLED_H5 y! n6 I" f4 K  J! q) B
  2. #define __OLED_H                                   
    % H, K$ D; w3 n. R8 Z  z: ^* O" M5 o( q
  3. #include "stdlib.h"
    4 \& e7 V' k/ q2 {+ J
  4. #include "stm32g4xx_nucleo.h"6 T1 l- s+ _7 j3 @, N% u2 d/ h
  5. #define OLED_MODE 0
    4 q) Y& b  f( _$ H. [) k/ a- U
  6. #define SIZE 8
    & u! Z" c$ q. Z/ F  q; A
  7. #define XLevelL                0x00( q: x6 f) c1 j1 h3 p
  8. #define XLevelH                0x10# A" O) p2 ?) K1 E4 S- F  F; ?& _% }
  9. #define Max_Column        128
    3 I/ `/ a( @9 d5 C/ I! }
  10. #define Max_Row                645 }% ~% ~* Z) Y
  11. #define        Brightness        0xFF 9 K" J9 _4 }) R  R
  12. #define X_WIDTH         128
    9 k* q4 s3 t' d, _% H
  13. #define Y_WIDTH         64                                                              
    1 G" O6 q$ b7 e6 O
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK" O) @. E+ J& m" @
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); |% r1 v' m3 k7 j: k  G
  16. . y* I" e8 @) |+ K  w
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN5 ~2 E. S( G. [  C9 O
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)4 x% x7 I& U( `
  19. 2 m3 T/ T  C$ H, n
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES
    2 ~1 c1 k  `9 m" E+ ~" a/ G3 h
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
    : Y) J4 c' [& v" w
  22.                      
    - g: y/ b1 ~* M* g$ e* E
  23. #define OLED_CMD  05 J' v; S' _6 b: U' J+ v" ~
  24. #define OLED_DATA 1( E7 m/ r2 {1 T7 X* U- X9 x/ {
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  ! b, d1 ^9 N+ q: [0 _% K, u' u
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
    ( ~4 A% W! R7 M1 [& O4 a7 r
  27. 0 s& }$ ^( p# \8 U, y% ]( V! ]
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
      R- y7 _( r- F( h' ?- V" l$ R+ }
  29. void OLED_Display_On(void);
    ) i8 T; _+ a- j. g9 w+ a8 Z. s+ H/ x
  30. void OLED_Display_Off(void);                                                                                          - t8 [  }: F5 g
  31. void OLED_Init(void);) D$ L  t$ v) p( ~/ a" ^% O8 l
  32. void OLED_Clear(void);1 {5 Y& f9 D$ Q$ }2 T! p; U
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
    3 x* k+ i: n% M% f" f" z
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    0 ^; s1 i0 W- g1 }* f
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    5 u$ v) i+ n( F9 a% k' d8 ~
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
    ; V9 R, M: D/ K+ k* ]
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    $ u1 C' |/ P( M9 {5 @9 @8 k' \: g9 {
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);% {$ \$ g3 f! j% D" Q5 T9 d) p4 ^
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    6 L1 P  W5 m% P9 l! q
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);4 S1 O8 B' k( g
  41. void Delay_50ms(unsigned int Del_50ms);0 h' ?( T8 w) M9 A
  42. void Delay_1ms(unsigned int Del_1ms);( X4 s7 D8 m# V! r
  43. void fill_picture(unsigned char fill_Data);: B, n8 V2 A+ l, g% H% V
  44. void Picture(void);! U( g" a$ m% Z2 X
  45. void IIC_Start(void);: D6 L& t5 p( ]# s% Z( k3 p$ E
  46. void IIC_Stop(void);+ w5 |' r/ U  K/ w  O* j& ~! O
  47. void Write_IIC_Command(unsigned char IIC_Command);% Y2 k3 Z* J6 L# F6 z
  48. void Write_IIC_Data(unsigned char IIC_Data);
    3 N; N2 y+ I( D4 a; i* T, J& j
  49. void Write_IIC_Byte(unsigned char IIC_Byte);) c/ ]& I0 [0 S" S) H
  50. void Display_Battery_Level(void);
    $ m9 J2 {+ N4 u, Y
  51. void IIC_Wait_Ack(void);
    3 w/ F6 y! h  B& q4 s3 ?( S
  52. #endif  
复制代码
  1. int main(void)4 U6 o) m/ {+ t+ B* E
  2. {
    8 t2 ^% j5 X4 c* S+ D; G
  3.         HAL_Init();
    ; F. V7 C7 X4 Q( {/ u" I! d

  4. ( }  S$ N( X% {; e* b& G. Y
  5.         OLED_Init();
    4 f* ~  l1 i' G$ g5 [
  6.         OLED_Clear();  
    : W+ d- o5 N4 Q6 U1 a
  7.         SystemClock_Config();
    2 }! S. z0 W. y1 ]7 X* Q
  8. , J2 j' O) @6 m; Y
  9.         BSP_LED_Init(LED2);6 i8 I9 q4 m# R" M7 D: v
  10.         EXTI15_10_IRQHandler_Config();* F# J6 M* z/ a6 ^

  11. & G: i' V: Y! h) u
  12.                while(1)
    / N$ v3 S% ~% d6 K2 x+ R
  13.         {/ B; C5 H3 I1 l; u* O% T
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);* i4 R/ G+ v7 r# Y
  15.                         OLED_ShowCHinese(45,0,2);//
    6 x6 d( f4 c$ e/ ^) Z& V  Y( w
  16.                         OLED_ShowCHinese(63,0,3);//
    ; N( ?  m7 i* _4 x0 P9 Q9 {, v* f+ e# E
  17.                         OLED_ShowCHinese(81,0,4);//
    * ?% }4 j- Z( y' W; P  ^- E
  18.                         OLED_ShowCHinese(99,0,5);//2 y' p/ {7 ]5 U( {0 `
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); 4 x( d( Z  X% A" U8 m$ \7 E* Q
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    + C. T! K0 H9 A
  21.         }          
    " d! p7 S; |$ e
  22. }
    ! U% x4 O3 D& H$ f/ [9 V/ T% v
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg
. k! S$ U2 O1 W- _$ b  _2 l1 r8 v. \, X

- m+ ~, c* y8 S( S
收藏 评论1 发布时间:2019-10-6 17:42

举报

1个回答
kongxiangtong28 回答时间:2019-11-16 12:04:22
您好,能给发一下G4的pack吗?我在官网下载老是说有错误,而且速度很慢。。。谢谢
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版