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

【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模块,今天拿出来来调试调试这个模块。
% C+ p3 i9 Q* U: [, v0 k& I      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
' n5 f5 o, G1 O6 U; J: }% \       原理图.png : U$ n0 L& O( ?+ Q0 Q( Y5 i
    部分代码如下:
! ^+ y2 n1 L2 [0 b, S0 i: Z0 s( l6 p( m( ^* c- }  z6 ]1 V
  1. void IIC_Start()' s# ^1 _; h# F& H8 {
  2. {/ f0 \7 {; ~: ~1 e, k$ d) t
  3. 4 t3 |* [* D' b9 J% n
  4.         OLED_SCLK_Set() ;4 Y$ V9 |% v1 E
  5.         OLED_SDIN_Set();
    / d: u$ {- s$ w" N1 H* Q! Q9 L  G! F
  6.         OLED_SDIN_Clr();
    ! K& E+ I, h1 X" \
  7.         OLED_SCLK_Clr();
    3 v. Z! Y# L) k
  8. }
    0 h) n3 d& B) F2 y0 o6 d( w
  9. void IIC_Stop()/ T7 d  B) B- |4 H* _# \
  10. {* R9 \* x9 O3 r% E
  11.         OLED_SCLK_Set() ;8 x& i' X- f% T5 w$ J
  12.         OLED_SDIN_Clr();9 e1 a, C3 }1 l6 U) O
  13.         OLED_SDIN_Set();
    % o6 ^1 O' Q* \* |: y
  14. }
    " W% z6 M6 u" x, L( F
  15. void IIC_Wait_Ack()
    9 v3 z/ U$ q+ M4 M! ~9 u
  16. {
    ! G2 P. G/ ~3 I/ j7 }: M7 {
  17.             OLED_SCLK_Set() ;  N% u* z& ^7 u* `  o  Q+ V" @6 D: V
  18.         OLED_SCLK_Clr();! |, Q7 ~3 \8 }& v% \! ~
  19. }. P) l2 Y& N6 z( ?( M
  20. void Write_IIC_Byte(unsigned char IIC_Byte)2 r$ P! i: g2 `7 {) ]9 i$ {( c6 [
  21. {1 k1 a5 i0 l& @& I# h2 [6 ^
  22.         unsigned char i;
    2 L7 Y; E# S8 C/ S  J6 m2 M' n
  23.         unsigned char m,da;
    4 }' @: q8 P0 x3 z9 n& Q0 {
  24.         da=IIC_Byte;+ ^# W3 L8 J  G" x  \
  25.         OLED_SCLK_Clr();* y2 c  c1 s- U6 h+ c; L9 ?' Z
  26.         for(i=0;i<8;i++)               
    % G& }6 a- m- N2 a; Z0 d$ j
  27.         {7 F( i; |9 Q5 q7 ]
  28.                         m=da;
    , l8 E7 n2 r5 T& c! O8 |& a6 q
  29.                 m=m&0x80;
    ) s3 D$ }4 ^& U1 }' {2 X
  30.                 if(m==0x80)% z8 r2 f, S! f" X/ z5 M2 h4 K
  31.                 {OLED_SDIN_Set();}: e; p3 k0 f$ v& I5 T' x
  32.                 else OLED_SDIN_Clr();6 n: u1 E. U& S6 |* j. x
  33.                         da=da<<1;( M$ B4 M, i) m0 \  Q. y
  34.                 OLED_SCLK_Set();
    2 K  K2 c2 [/ D5 o: L/ C6 I3 j
  35.                 OLED_SCLK_Clr();
    # G4 _+ y' d* }0 B5 ], i
  36.                 }
    ! i; V' {$ j# Z
  37. }
    . `8 ~! d' b( V" Z3 ]) a* f
  38. void Write_IIC_Command(unsigned char IIC_Command)
    ) H* ]8 x1 u: a! M2 D2 i- [7 ~* K
  39. {
    . m9 N7 a7 G: c) _" u$ I: ]
  40.    IIC_Start();
      {' \# g# h" @, i( K
  41.    Write_IIC_Byte(0x78); : q5 ^4 l6 J9 }; Y* j7 T
  42.         IIC_Wait_Ack();       
    7 t' F. b0 }; v7 v, I) R" x% W
  43.    Write_IIC_Byte(0x00);       
    4 Y( F: r' Y+ i* X) j3 ~
  44.         IIC_Wait_Ack();        0 z6 C) n* I. Z. |: B" R7 s
  45.    Write_IIC_Byte(IIC_Command);
    $ z* {& p. G5 w, |
  46.         IIC_Wait_Ack();       
    * k9 h- v9 I7 v. b- s3 w: [
  47.         IIC_Stop();
    0 Y9 e% U0 ?7 J( {# i" Y1 u. b
  48. }/ l) I! P3 I- f9 \
  49. void Write_IIC_Data(unsigned char IIC_Data)
    " m0 r- V$ E" Z: }
  50. {
    7 j3 T6 u7 Q' s' i1 N2 {- U
  51.    IIC_Start();! a: {1 ~# @  ~3 a
  52.    Write_IIC_Byte(0x78);
    6 H& f2 w8 X6 q' F
  53.         IIC_Wait_Ack();        $ E+ [! X8 }/ i8 ]  O3 A5 T
  54.         Write_IIC_Byte(0x40);" Y2 [0 H5 G5 e& V" e  E$ m' f
  55.         IIC_Wait_Ack();       
    # Z1 g. g& `) S7 t1 c
  56.         Write_IIC_Byte(IIC_Data);" j* H) n9 h* l! `# [! Q# K
  57.         IIC_Wait_Ack();       
    0 O2 H3 [" |; Q" O' k3 j3 w
  58.         IIC_Stop();# R$ L) ]) d2 G
  59. }
    2 G6 V5 s" c3 d' `; i% U: S( q
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)9 ^3 c* y) l$ X9 C, D: e
  61. {
    . [! m1 t, J8 `  E
  62.   if(cmd)3 \  g! l4 Y: w
  63.   {
    ! L- C& y/ z3 w8 b7 k% c5 C6 r- ?1 D
  64.        Write_IIC_Data(dat);
    7 ]) J( |9 g: }# s9 u$ u& r1 [
  65.    }! |5 e0 J% Z9 v) b, D
  66.    else
    / V, D1 N, z5 S9 n0 A
  67.    {1 ]% o6 H8 B1 |% R. N
  68.         Write_IIC_Command(dat);        3 l) L' [, _% H8 f9 w9 I5 f: c3 h% l
  69.     }
    9 }  P; }1 }: W' W9 V4 _  t
  70. }- p& ?& M& P/ a* O! ~
  71. void OLED_Display_On(void)+ g- h1 B/ U+ Z) }  }2 b9 i5 ^
  72. {
    , J, [2 c/ S% F# ?
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    : j5 ~9 o4 Q9 W6 \8 @; A8 p+ Q
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
    2 t/ j: l+ z& r) f, S# r+ n
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    $ O5 }) |6 ^# H5 m
  76. }   
    & f8 R' W9 T" o* Y5 K. T( N& f
  77. void OLED_Display_Off(void)
    0 j+ m3 b- B+ n' @3 A- C1 K/ e. U
  78. {6 v- U# ^$ @+ u3 @' Y
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    6 E6 a' }. V; ~% `' n
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
    % J& {) g6 k1 K- _1 P+ J
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF' C) U$ Q) W' n! n' w% Q
  82. }                                            
复制代码
  1. void OLED_Clear(void)  / u! q5 ?- o% N+ @' T
  2. {  
    / ~$ {5 I6 z- |$ Y7 D0 h& h
  3.         u8 i,n;                    
    , A; e! ^, P) n$ H) Q) A/ [
  4.         for(i=0;i<8;i++)  $ o- p# `+ l* \7 I! d* T* C) F; m$ Q
  5.         {  + b/ r) A, z( N
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    - z7 `; J5 Z3 k
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
    5 q# G# j9 T6 X2 M8 R7 e+ F: z* y% s
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
    3 \( {1 }4 a( H- h! F0 E! p$ V% ~9 A
  9.         } 1 [+ n3 n" A& ?5 k% D, D
  10. }
    7 O: I* y6 z$ @" ~
  11. void OLED_On(void)  4 {  R! m! j  s2 {/ l
  12. {  
    $ f6 T. t% v! g! I) [
  13.         u8 i,n;                    
    ; r5 F* h1 ?% f  T& ^
  14.         for(i=0;i<8;i++)  3 l3 M$ f( R" }5 F4 L) H* T
  15.         {  
    3 t" d2 }8 X$ }2 ]. [
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);# g9 p9 W7 I) I; ^7 P' W
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
      A% {# K3 f" G9 M
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); % S$ E) ]6 A6 \7 C8 Q; R# ]* U
  19.         }
    7 Q7 d( c. x+ U. d* E0 f
  20. }! ?/ }0 n: b' }. D& F! N
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)$ c8 ^/ ?5 F- g5 F+ G
  22. {             
    " G6 j7 h% n& Y' Q+ v
  23.         unsigned char c=0,i=0;        1 G; t3 g3 _9 ~+ r0 s/ T. L$ d
  24.                 c=chr-' ';
    3 l9 Z: B  T6 O/ p
  25.                 if(x>Max_Column-1){x=0;y=y+2;}' m! v; F" s# a# V
  26.                 if(Char_Size ==16)
    , h' x' e5 z2 ~5 Y3 D' `
  27.                         {4 y- ]) ^( m9 p. m0 n7 k! f
  28.                         OLED_Set_Pos(x,y);        9 X& R0 T& T% ?) ?$ H' E  g- ^- Y3 N
  29.                         for(i=0;i<8;i++)
    ; z+ V, u& C. g+ S( r
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);1 b; U2 k+ \# l" C$ U0 r) Z/ }
  31.                         OLED_Set_Pos(x,y+1);
    ; ~: \5 k0 _! z4 I6 W
  32.                         for(i=0;i<8;i++)
    ; R, l7 |, [. [
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);* E: ?; s& B! z% I% g
  34.                         }
    6 n; @! s/ ~" X/ s
  35.                         else {       
    & A' }1 c' R8 H' o! i2 q& H
  36.                                 OLED_Set_Pos(x,y);
    1 P# ?; \3 D: A: h# f
  37.                                 for(i=0;i<6;i++)
    ! t# n% ~3 F- z0 D+ h
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    # k  e/ G6 A" ^5 m
  39.                 }5 h$ Z# n3 @% ]+ V( {% `  K9 ~
  40. }
    5 B  [) H+ p$ v' H- l' }
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
      U; r& d4 m$ B4 \5 v
  42. {                
    ; z0 h, W& A) X& {
  43.         u8 t,temp;
    0 Q2 C  S2 ]% @
  44.         u8 enshow=0;                                                  
    ) z/ `, Q' ^; w: ~
  45.         for(t=0;t<len;t++)) n0 `4 `) M* ?. O/ Z! ^( |3 w
  46.         {# u0 Q+ k2 \: `/ E
  47.                 temp=(num/oled_pow(10,len-t-1))%10;# V7 a2 n6 I# Q" j3 J  q
  48.                 if(enshow==0&&t<(len-1))) u2 L7 r+ N. i; D7 \
  49.                 {, E- L' }* i9 Y( j: L9 d/ H
  50.                         if(temp==0)
    6 d( C5 E6 D5 X
  51.                         {
    9 K7 N  c- I' }7 t9 L, ~
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    9 `* H# C. ]; o. \( ~' l9 ^# `
  53.                                 continue;1 m! ~9 U  [( ?% Q9 j3 S9 S
  54.                         }else enshow=1; % e# T8 l- S& P, D
  55.                           
    : ~4 t$ h: _. l) [3 @0 ^
  56.                 }
    3 S1 {8 V$ N3 e" N8 S
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
      Y6 U: d7 c0 y+ L9 c0 v
  58.         }
    % l& e7 e" t5 O( Y4 U' j
  59. }
    0 S1 S/ Q7 d5 a, b. ]8 S
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    ) _- \: U9 S5 Z- c
  61. {* N' J: S( c9 E0 y
  62.         unsigned char j=0;
    ( }* e) X. }8 c! y2 @8 O
  63.         while (chr[j]!='\0')
    , c0 G8 Q1 h  r/ z, w& Y6 ?
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    * \$ z5 {6 q9 y: b
  65.                         x+=8;
    # L( l( c7 q5 l+ G
  66.                 if(x>120){x=0;y+=2;}
    : K/ r& h7 x+ R9 `: C+ f
  67.                         j++;
    1 r3 U6 Q! L1 r; L7 g, c" N
  68.         }/ u- O0 e# u) c+ F5 R2 s
  69. }4 ^% e: |' ~0 K( T
  70. % m! ^' {! Y6 v) m: Y
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)9 k8 t, ^" J* _- h5 n& F9 R
  72. {                                  
    ( C4 u+ k3 u6 t" H" H
  73.         u8 t,adder=0;
    ' w9 s1 u' ^; ^% S# @
  74.         OLED_Set_Pos(x,y);        ) g1 d; ^% v  p8 n1 N  e6 e
  75.     for(t=0;t<16;t++)9 t1 P- n2 i) u6 L9 A
  76.                 {; H& e, R8 g: g0 ~: v
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
    # p& k/ N8 j, U+ `* a
  78.                                 adder+=1;2 `! X5 n& ]  E- X$ N
  79.      }        & A2 e& j; s" {4 [: c
  80.                 OLED_Set_Pos(x,y+1);       
    / [7 V4 g$ @  T6 F' p
  81.     for(t=0;t<16;t++)
    6 m& b" u+ K8 c. B9 Y7 y
  82.                         {        ! d! V; f& x4 L" V$ x4 a
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);/ D1 k5 Y# H3 V; s3 ]
  84.                                 adder+=1;
    , _2 \; f. N4 q. b: f# A
  85.       }                                        ! W+ }, e- Q* P' W* s4 ?! x. ?
  86. }
    2 @* r2 X: n0 o

  87. 3 [. C! y2 `( l3 ]$ s# A
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
    2 g! _8 {. |: }. ?: O& S
  89. {        
    - h5 t5 M  J& E; `3 O1 ~
  90. unsigned int j=0;
    & }. q( r4 t9 M0 o& [; f) g
  91. unsigned char x,y;, G% S' Y# S: ]3 X6 U
  92.   
    % z. L3 M1 d/ Q% M8 ?1 `0 b. q
  93.   if(y1%8==0) y=y1/8;        s6 c/ x  v! ~3 t' O! r9 J
  94.   else y=y1/8+1;
    / N! W* X, K6 E
  95.         for(y=y0;y<y1;y++)/ Q9 m! `1 u. s$ G
  96.         {
    # h% k! I8 P' m$ I
  97.                 OLED_Set_Pos(x0,y);. j* U# j; Y: X
  98.     for(x=x0;x<x1;x++)6 k/ d9 _$ `9 C6 ^
  99.             {      
    4 x4 Y. t, k* i  f5 o3 k- e2 C
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    / @  L5 F# }$ A! m" H* z
  101.             }
    . @9 X+ S- f. `5 @
  102.         }
    4 r2 ~/ w& m& i' B  s
  103. }
    ! U. e+ N6 a0 w  _. r0 u3 w9 D& Z

  104. 3 w6 S0 S' N) D) ^2 b6 y
  105. void OLED_Init(void)
    + D( O& ?7 ?8 n' m$ M: c" G2 h  A
  106. {        
    6 d4 ]4 p' v/ J2 y* K5 ?7 |
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    & C) W! C/ u0 Z! h( `
  108.        
    # I! I) _; ^/ b4 H& }3 Y8 ~7 }4 a
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 ' @& s1 ^4 I5 E! n
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         & X9 C) C4 }1 R! k0 Z* C
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    8 `! x! W& Z  d) ?' [, o9 ^
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    . V1 d+ y6 c  V& }3 e. I  m
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         - r" _; M- f/ A: |, w% c
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    ( J) J) c( n, R' L% O
  115. HAL_Delay(200);/ }2 h: J8 L% X' S. h* e5 o
  116. OLED_WR_Byte(0xAE,OLED_CMD);
    + M4 N4 `/ M' Q1 a% o+ h
  117. //display off
    2 z9 j2 S1 ^  j! b9 V
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address& H) j: m$ W' [! o: @
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    . ?/ V& w( @. Z/ K( e- Q2 [- j8 L3 T% C
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    2 J5 g  `0 t. M0 m; H5 f
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    4 V$ E5 f; p$ E! S9 t0 {
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control* Q; f# E, a, |
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    1 [4 j; S# m$ u
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 0 [; l8 Q- k( i. F6 v( |6 l
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse( F' h( R, K9 A
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    2 Q4 M% \7 s" r8 C5 [
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty% U+ y; V6 F' t( t2 b' n0 ~& o2 F
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    ( R$ T+ [! N! s
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    0 P* B0 o3 {, x! y' g! M4 D7 q
  130.         OLED_WR_Byte(0x00,OLED_CMD);//9 {: o; w0 j/ r8 M0 _
  131.         / h( o3 G$ e  w0 @, D* B" X) H) P
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    " E+ R' T/ I0 R, Z3 G
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    * t3 ]- Z- l" n4 D
  134.         3 Z) |* u$ J) x% |. [
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off& u, W; F+ u$ G0 r* w% p. p
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    7 r! N+ R: c: Y7 o: f& [, v' ~
  137.        
    , f9 I" f6 ^/ {' f$ A0 U
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
    0 @2 J7 c! n6 h: s# Q1 I
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    ( C7 Y# M) @+ K9 m2 N+ C
  140.        
    , ^' M% r6 Q+ w( `2 u  L. V! ?
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion% z0 m6 @7 _, ]! L
  142.         OLED_WR_Byte(0x12,OLED_CMD);//5 ^  R7 O5 _3 `9 d0 x  Y
  143.         4 a+ X: p5 v: s# ?0 ~; s
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    ( {7 H, J( l  J2 ^7 `# [
  145.         OLED_WR_Byte(0x30,OLED_CMD);//+ E4 I  o/ D  @( H, q% D
  146.        
    : f: ]. n+ I' m* Z6 Y* F% U' D
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable7 R7 h: L% c/ C' \9 {  \  ~4 q( b
  148.         OLED_WR_Byte(0x14,OLED_CMD);//. ~7 F) P+ C- v, F- [' e
  149.        
    7 I8 l- |. x8 V% K4 e* x4 w. Y
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel0 z9 c0 P( W# f0 ?4 K4 o$ f3 n
  151. }  
复制代码
  1. #ifndef __OLED_H
    ( l: f' O' Z, e7 |& d8 D
  2. #define __OLED_H                                   
    0 J) K  P0 B# j0 x: o3 H
  3. #include "stdlib.h"; ]$ k% N, z0 I
  4. #include "stm32g4xx_nucleo.h"/ E: E* d. l' r/ }4 [% w
  5. #define OLED_MODE 0: |# C0 o) P; `0 \2 d
  6. #define SIZE 8
    & J. x+ M( O, C' h
  7. #define XLevelL                0x00
    / k. _* A% w" d
  8. #define XLevelH                0x10
    7 n  T/ Z/ Y$ [) F! Y& x/ M" l% e: B$ Q
  9. #define Max_Column        128
    . Z# M! G8 a# b. ~
  10. #define Max_Row                64  }2 w0 c8 D% N5 X; g$ w
  11. #define        Brightness        0xFF - [* U, r! ?: l* @2 J/ }5 j2 N! C; q$ e
  12. #define X_WIDTH         1282 {: A! ?: O& t
  13. #define Y_WIDTH         64                                                              
    & @4 l  D" V3 t' D; A" I) |/ b3 S
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
    * Q6 j& I. @6 T3 m
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
      S( x' k0 N. y8 _) ?

  16. 7 I5 @3 L' J2 D2 Z" }2 a/ G
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN5 Y; ^- N5 S- h' F+ j+ D
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)  ~3 z# @. c* v- h2 v, d! J

  19. # D0 d5 X/ m4 J
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ i$ ]1 n  Y$ ?, B( ^8 B
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
    3 ]  F# j2 C& t- g0 r$ z
  22.                        R- W: E+ R" r1 k
  23. #define OLED_CMD  0
    * ]6 H: i7 b- A( U/ T7 o
  24. #define OLED_DATA 1# v9 S0 `  c+ u5 i
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  
    ! W9 t6 P* O& I' Y
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()' T) U0 ~# T# W+ x

  27. / i' |6 U5 [; ]" U
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
    0 |: X% s' l6 k, A
  29. void OLED_Display_On(void);
    ! F4 a- s6 K$ L$ d7 r* L9 N
  30. void OLED_Display_Off(void);                                                                                          
    8 U4 q5 z# K2 q/ v" k+ C, d
  31. void OLED_Init(void);6 I3 w6 E6 O5 q8 z% [
  32. void OLED_Clear(void);! }' y& F) K4 m5 s" `
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);! P: q/ H( c: K! z2 I" \
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);( R# @! m: e+ ]' G% @' Y6 x! C" Z
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    ! K: D/ c, ^8 K$ J
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); / _8 ]; L5 k+ B; v7 ^1 [8 k
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); 8 p: f( F" L) F( a; H5 _
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    ! B7 v  N9 f, z; g
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);  P" h( S: q( T: u, ^  p1 W- ^
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
    3 t. w+ T1 o  Z3 a$ P
  41. void Delay_50ms(unsigned int Del_50ms);
    7 P. R  q+ z* g' x6 X
  42. void Delay_1ms(unsigned int Del_1ms);+ ?- }: _+ O- p! @. y  c* N0 `8 V# j
  43. void fill_picture(unsigned char fill_Data);
    # O5 z# f) Z1 ~
  44. void Picture(void);' `; C' j7 a5 w6 G
  45. void IIC_Start(void);
    , M1 X; w1 [  B
  46. void IIC_Stop(void);
    6 g5 R: I& D7 D. Z  b
  47. void Write_IIC_Command(unsigned char IIC_Command);' e9 ~& H- }: [: {5 _
  48. void Write_IIC_Data(unsigned char IIC_Data);
    : B& r% g" F' _) h" r' b" i
  49. void Write_IIC_Byte(unsigned char IIC_Byte);# F( t/ S. y8 ]# g! o) x
  50. void Display_Battery_Level(void);& J4 P( p+ y& ]2 c
  51. void IIC_Wait_Ack(void);
    5 f) ^8 ]( V7 g% G/ n+ E
  52. #endif  
复制代码
  1. int main(void)
    + `. g7 L# J# p. b% V# M& n6 X. r3 w
  2. {2 ^2 K9 j! F2 h1 u3 g+ j$ G
  3.         HAL_Init();* H5 m3 w, D" h# o9 O* t% b
  4. , H2 H4 u  [$ `, f7 m+ X
  5.         OLED_Init();
    6 {" y' Q6 B# ]( U& v/ [/ j* Q
  6.         OLED_Clear();  ! k. z+ `; k% _2 k  R- S
  7.         SystemClock_Config();
    - m2 H) {- }# h3 A2 G
  8. ! q( F( S$ Q! ^% O
  9.         BSP_LED_Init(LED2);' F  A, ~: D" l; e4 N/ ~+ V0 y
  10.         EXTI15_10_IRQHandler_Config();' P: x- m8 {( Q* c

  11. - q2 m9 ]) |& w" W( B1 m
  12.                while(1)
    5 `! J+ F& ]0 g$ t9 D) F
  13.         {
    ; z* |- D9 f  j6 {
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);4 A  F1 V) w# b6 |, ^8 _2 ]' Y) v
  15.                         OLED_ShowCHinese(45,0,2);//
    0 b) v. _1 R8 m0 T
  16.                         OLED_ShowCHinese(63,0,3);//& O! i) Q8 z  l# a3 \2 f) A
  17.                         OLED_ShowCHinese(81,0,4);//
    % o8 \7 _" j- O4 {& d0 ~
  18.                         OLED_ShowCHinese(99,0,5);//
    3 C/ N& C8 _* r: f! s7 u2 ^' A, ~% c4 r& d
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
    , `% y6 u  J' ]- S  Z6 h  J( R! @/ S  ?
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    " r1 `% }' A4 X+ M/ W% y$ r" T1 \
  21.         }          ) X- ~) n! z5 L# v0 y# M
  22. }+ i9 J3 W* q; s5 I
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg 9 Y. C7 [3 q1 p

1 |# z6 ~/ a+ U( a
+ _1 v2 q3 `- s+ J3 s
收藏 评论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 手机版