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

【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模块,今天拿出来来调试调试这个模块。( o* r  P; O4 A; {+ `% E$ y) e- r: j
      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9# f$ N( H4 d+ N( |8 t8 H
       原理图.png 0 L# y# j! \; @5 E0 v; a& E
    部分代码如下:) |3 P5 V5 l- u( |9 e! f& O

' E! \) |2 `% r
  1. void IIC_Start()* P) Q8 r* L7 M8 [8 i4 |
  2. {
    2 }" m; J/ ?9 F. I; I

  3. 7 c8 K5 ^2 D9 a% g; J" ?
  4.         OLED_SCLK_Set() ;
    / l& A9 L7 ?4 c6 l; n9 q+ h, \
  5.         OLED_SDIN_Set();
    + D, R% K8 b) C1 B( A  ?4 g
  6.         OLED_SDIN_Clr();; K, r; ]7 f5 ?
  7.         OLED_SCLK_Clr();5 ~1 Q( F- _5 s$ i; _
  8. }
    $ }) B! s7 e: S' C
  9. void IIC_Stop()& s; h; i6 l  m* D9 K
  10. {
    , W1 r0 r" B$ @; \: d# @
  11.         OLED_SCLK_Set() ;
    , Y# c0 P6 `- m) d3 r
  12.         OLED_SDIN_Clr();
    ) J' W6 r/ d" W$ C
  13.         OLED_SDIN_Set();7 o0 @! `) }0 H8 s+ R
  14. }
    8 H* ]5 u& f( K" G0 G8 b
  15. void IIC_Wait_Ack()) {" A6 ^; Y7 M2 m0 \$ h
  16. {
    # S7 K4 ]" P3 h0 [1 h7 b
  17.             OLED_SCLK_Set() ;
    - A( T9 K. ?4 K! K9 g# T
  18.         OLED_SCLK_Clr();
    7 F# j+ h2 ?0 Q, \! r' p! l; T$ u
  19. }
    2 x" A3 P% m% l1 V
  20. void Write_IIC_Byte(unsigned char IIC_Byte); ^5 b6 }1 H! C* K
  21. {
    / f  X, \1 ?: v5 U6 N* T- O
  22.         unsigned char i;9 G* B3 W) t% `7 ^) _( s  w9 Y
  23.         unsigned char m,da;
    ( T* k9 K1 U' }; n5 i' n" @
  24.         da=IIC_Byte;
    & r7 k/ K( C: {$ j
  25.         OLED_SCLK_Clr();
    - c6 A2 z5 |  n: Y" e' X# e1 [
  26.         for(i=0;i<8;i++)                . s+ o2 J) a+ q" G- }
  27.         {# N8 b$ \- ]4 Q; I- \% c: M- v$ k
  28.                         m=da;
    6 ^5 B6 f8 Y. f. E6 `, W
  29.                 m=m&0x80;
    * p1 B/ s1 w* v4 z0 c
  30.                 if(m==0x80)
    + K6 s( I* T- e' U# t
  31.                 {OLED_SDIN_Set();}1 R- }) @: ]2 Q1 u8 J7 |% ]% c. A: s
  32.                 else OLED_SDIN_Clr();
    # c. r! I+ V  k8 t4 c
  33.                         da=da<<1;5 |) O+ V' k* Q% W/ ]2 q  p
  34.                 OLED_SCLK_Set();
    ! i) B$ T0 H" y- _0 P' j! A
  35.                 OLED_SCLK_Clr();
    / w! H8 [- l3 t0 |
  36.                 }( [( T9 s, B  M: I2 H+ ~
  37. }
    : I" V6 K# Z3 ~1 j$ T; u
  38. void Write_IIC_Command(unsigned char IIC_Command)
    0 d) r, i. ~( J4 i1 o5 p- G
  39. {
    9 S, v5 ^& |7 H5 @/ E* _5 h
  40.    IIC_Start();' a4 W1 E* z# A$ f# F7 u# T! V
  41.    Write_IIC_Byte(0x78);
    7 Z8 n. O0 ]! Y- N
  42.         IIC_Wait_Ack();        & _0 e0 W8 S; B2 z, }% Z
  43.    Write_IIC_Byte(0x00);        9 k& `% K$ n6 ?! f: y
  44.         IIC_Wait_Ack();       
    ! l; w5 Y5 Q8 @7 _) s
  45.    Write_IIC_Byte(IIC_Command);
    8 B9 k% ]! u5 B8 h. X) \
  46.         IIC_Wait_Ack();       
    . A3 z( w; @# E5 p: R' e
  47.         IIC_Stop();
    " J2 G) Q/ K( P6 z
  48. }
    6 I( r8 A' w1 b8 i& K' w# a
  49. void Write_IIC_Data(unsigned char IIC_Data)  E6 ?6 {. X; y: V$ a
  50. {
    ! D* M% v! {  i
  51.    IIC_Start();5 o4 c$ x9 e$ Z1 i1 I' \
  52.    Write_IIC_Byte(0x78);
    , o7 Z6 _7 Z& D! H! _$ A/ q
  53.         IIC_Wait_Ack();        ) \- e& x( u5 }8 }' k! z
  54.         Write_IIC_Byte(0x40);
    3 o! U1 C4 z& x9 r; h
  55.         IIC_Wait_Ack();        3 m& Q6 ~6 m' R, r* D9 x+ R7 U
  56.         Write_IIC_Byte(IIC_Data);4 [9 Z, g+ B7 x6 x9 e, S1 I' |
  57.         IIC_Wait_Ack();        $ Z# C. Y7 I* F% p* W
  58.         IIC_Stop();
    1 f( I0 u4 f5 I  q
  59. }6 {) S" |0 \2 E5 Q& Y$ ~
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd): \+ a: G0 T) [2 [- P* n" n
  61. {# ^! Z; O, q8 w, w! t: `+ v4 T
  62.   if(cmd)
    & C* `% X2 V* U2 j
  63.   {4 E% L7 h1 n+ ~$ o* {- h
  64.        Write_IIC_Data(dat);" e1 n9 B6 Q- h: j" Z! u; x& U3 F
  65.    }
    + n& ^) R; Y$ @- f& u, X' }2 |
  66.    else
    # H) y/ o& T: E
  67.    {# e; C. d* F) {; M
  68.         Write_IIC_Command(dat);       
    / {1 l' s& V, E9 ^
  69.     }
    , \4 E1 \5 e; Y, K
  70. }- W/ \2 Q# K# o  d- W9 E  _
  71. void OLED_Display_On(void)
    * S5 t5 F' c9 Y2 t( S. V7 _
  72. {
    ! g+ e4 i# H8 Q/ `+ q% r" ?# o5 p
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    ( U& t% u1 L6 F8 Q- Y5 i
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON0 v- [1 T0 z0 ~
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON. h0 S' m) X0 T4 S& ], \; L
  76. }   
    9 R1 V' y9 ^, `" r
  77. void OLED_Display_Off(void)
    3 _$ u, g+ `1 J: }
  78. {
    . a: t+ M5 ?* H; A: F+ O
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    6 n/ i/ W! b; f
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF
    / q+ ]4 ?+ G4 ]. T& Q# d
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF( c$ s! ^8 b, W0 y: q( K
  82. }                                            
复制代码
  1. void OLED_Clear(void)  , c! C0 z( d. r* U0 A0 X, M
  2. {  
    - J8 e6 t+ l. S  F" n, ~* C
  3.         u8 i,n;                    
    1 k4 ~: N6 h, ?3 E
  4.         for(i=0;i<8;i++)  - z8 c% d# o& ~0 u* v
  5.         {  9 T/ N3 s# \" b9 ], V* F$ u' i; W6 w
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    9 @# [3 }& Z' z. M6 `5 v
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
      C, o* G, }) n5 h
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); ' ^1 ?0 D4 a4 Z" r& P
  9.         } 3 x  V" R! ]3 b* T( C2 [+ v
  10. }5 e2 d6 y% k6 k/ M# ~5 R" C$ e
  11. void OLED_On(void)  8 R! g, L, ]: @  V2 g
  12. {  
    , S2 v' |: N0 Y# x& V4 g
  13.         u8 i,n;                    3 q7 B# r# H& S1 J" d9 p0 F
  14.         for(i=0;i<8;i++)  ) f- h9 C, }3 |6 n
  15.         {  
    , n& }2 x/ t7 P* O  v4 m; W# b# z2 P
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);7 l# ~7 N" s* I( V5 k3 T' l+ a
  17.                 OLED_WR_Byte (0x00,OLED_CMD); # b6 `8 L- J2 P/ T
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    + i3 T, C0 @* X+ d4 F8 m5 m% I
  19.         } $ S, _2 u& g8 s
  20. }
    " T! }2 e1 W+ T  Y
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size); [% D  ~( U3 n& W1 U' a
  22. {             
    ' Z% C) m; R1 \0 ~9 N& f# Q; {
  23.         unsigned char c=0,i=0;        ) v3 n0 o2 Q1 i$ B7 b
  24.                 c=chr-' ';- D/ c% B2 ?  M
  25.                 if(x>Max_Column-1){x=0;y=y+2;}$ S; e5 t( ?0 {4 S. w4 ]
  26.                 if(Char_Size ==16)$ n. Q7 X2 T+ w  W) W
  27.                         {# j4 j$ X, {' O
  28.                         OLED_Set_Pos(x,y);       
    , t2 _3 g9 s, G4 X+ Q6 |& H
  29.                         for(i=0;i<8;i++)
      v" L6 |3 x4 ~
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    ' l* ], u: j; D, b% o
  31.                         OLED_Set_Pos(x,y+1);# i' ?% s7 S9 ^1 f% U
  32.                         for(i=0;i<8;i++)8 {7 x4 [6 G- |! ?) k. l* G8 v
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    ' y2 _( c; R; ^: V) V
  34.                         }; O2 J& A/ O, q9 s' g  e/ Y2 X
  35.                         else {        8 D+ ]# `1 @  G" P% o
  36.                                 OLED_Set_Pos(x,y);
    % _4 ?* u$ b( i- v( \
  37.                                 for(i=0;i<6;i++); v3 Y" W2 F( f! g9 d2 S# A
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    9 @  a1 |4 ?. Z6 E9 H
  39.                 }* W$ P8 Y' r5 g2 U! G- W
  40. }% t4 S7 B+ a" v! C: g0 q) }
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
    * u$ u, n" f' G6 w. k
  42. {                
    & {5 s( ]: Z, u
  43.         u8 t,temp;
      w% d3 w1 K  \; `2 O: s6 u
  44.         u8 enshow=0;                                                   ! Q0 D2 a( q: S; S- R2 b5 C3 q
  45.         for(t=0;t<len;t++)
    6 ~0 U: Z' P/ m9 M& ?- T( G  `
  46.         {
    9 j. j6 N% r" W/ f4 {  g7 g8 P
  47.                 temp=(num/oled_pow(10,len-t-1))%10;$ Z, d. _! c2 p+ s' m
  48.                 if(enshow==0&&t<(len-1))1 ?% ~0 J; ^9 t
  49.                 {$ S2 X8 Q$ n9 r
  50.                         if(temp==0)
    - S* c- C) i( K8 D$ r
  51.                         {
    8 V( H5 r8 w" W! Y8 B8 v
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    - R- L4 H) |4 l+ n) j
  53.                                 continue;0 N+ v( t6 e; G+ x
  54.                         }else enshow=1;
    1 A8 n8 R% G2 v/ t% p4 \. M
  55.                           
    3 H7 T! G5 ]& O! G. F0 H3 W5 p
  56.                 }0 y. \" z% C/ r
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 9 F( A9 V" p: b$ R# s' N
  58.         }
    / i- o; y6 \& `# E" }! B6 L) J
  59. } - e7 R7 [( }$ l' o! @
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
    9 D0 U  G9 w6 [4 y1 d
  61. {, {5 D) ~9 A. I# q( o! V# ]# i
  62.         unsigned char j=0;. s) U# a9 B6 w1 P9 @
  63.         while (chr[j]!='\0')0 q, U/ T/ }. e/ d& O/ y
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);, Q. \- U9 d/ i- H, {( l! D
  65.                         x+=8;
      q( a1 a0 I. H# q
  66.                 if(x>120){x=0;y+=2;}
    8 j+ \6 A# Z8 [
  67.                         j++;
    " [9 ~. f( m7 c
  68.         }" h' \$ M: e/ n. _) k+ _: l6 }
  69. }' S* [0 J5 E) m9 |* N, V2 g; f$ c; W

  70. + v% R! g/ p$ t9 w& i; j  F/ z
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no). N5 `, `% ?6 {1 h1 R4 m
  72. {                                  
    + T- Z0 Q1 w3 [3 p3 U! C, h
  73.         u8 t,adder=0;
    , Q8 h% \8 y! `- _" `7 \* }
  74.         OLED_Set_Pos(x,y);        - L) Y7 y; j& @# w* j/ E( [8 b6 e
  75.     for(t=0;t<16;t++)
    $ g4 |& n8 [$ y0 X4 J
  76.                 {
    ; I$ j: i% P3 {! I% C, J  ?3 N
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);3 S% h+ E& j! x" h$ o9 ~3 X: B
  78.                                 adder+=1;& H3 m6 Y6 T  T( i
  79.      }       
      G6 [6 D, Q6 w# ]
  80.                 OLED_Set_Pos(x,y+1);        " h. P  u3 b' X4 E
  81.     for(t=0;t<16;t++)4 _5 g* E% @9 J) n; `' f! `
  82.                         {        & V& V  F# n6 Y* |, Q2 x
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);; J7 j/ z$ P) E3 h& |
  84.                                 adder+=1;1 a4 B7 z; i- i9 j" }1 ]* Z& G* k
  85.       }                                       
    3 t% Z, g0 l  B1 l' O
  86. }
    $ u* U0 w2 @' w, [- S' L! r

  87.   E9 b5 D/ V1 f( L% r. v
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])' U: r3 N0 X" g$ `
  89. {         2 M- R7 z" z1 K' X9 E2 K
  90. unsigned int j=0;+ H: ~8 B; g; M" G5 {- [  p4 r
  91. unsigned char x,y;
    ; d$ ?- e0 s- A
  92.   ) a0 o5 [* |. A: s) D; v
  93.   if(y1%8==0) y=y1/8;      
    $ l5 [: W. X: A1 p
  94.   else y=y1/8+1;% y+ \0 g- N8 O( h
  95.         for(y=y0;y<y1;y++)
    8 Y$ E6 O- U5 k- _
  96.         {
    / {0 g3 e" ~  b
  97.                 OLED_Set_Pos(x0,y);
    . b" R3 a' D7 h4 @
  98.     for(x=x0;x<x1;x++)
    * P; B8 D  G0 Y% c& y9 o
  99.             {      ! w7 o' P9 B" A0 T
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                   
    & D* r3 [% L- O  h8 L( a7 g  m
  101.             }
    # ]9 s7 l4 |, j  w& m6 Z& y
  102.         }# }2 D; q: f  R
  103. }
    5 ?+ l; }. i1 H2 I+ o
  104. 0 I/ S2 G4 O9 D; {+ o) }
  105. void OLED_Init(void)
    , R7 r4 P/ J( N  R* X% x1 ^
  106. {        
    8 y2 ]- g) C' G( N+ d2 T) Q8 I
  107.         GPIO_InitTypeDef  GPIO_InitStructure;7 C7 ]: \$ S* j3 W
  108.         + {( k& z  t  P: W
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                
    8 B- L& |9 f: R0 I, y
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    5 K, p+ w) B) S" r
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    % D  A8 m0 x8 Y( r& x+ S5 N* t
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    . Z! N8 {5 `; m! D" V. X8 W- [8 d
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         
    . n! P0 I6 a; N0 e- i
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    4 L; C, o8 Y3 n, P* o% X- U
  115. HAL_Delay(200);
    ' A9 g* p+ F3 X# K  I
  116. OLED_WR_Byte(0xAE,OLED_CMD);% ~% ^# D) j/ B  H5 [" C
  117. //display off
    ! m/ S: ]# I! P8 p/ G; H
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address. P2 W; g+ s2 F0 R. g. ]2 W
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
    5 e7 Z5 {  v- H
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    2 |2 E  y. x: D, l
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
    : k" ~# h* a, N# W1 M
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control2 K' Q5 n: J  y9 r
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    ( P  J. b3 }5 c- w  O" h, i
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
    , b5 j3 }9 I6 m, T
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse: l' p* K, l) Z! ^0 F8 }2 e
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    * n/ z: v- \9 _9 u
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty- A) U5 l$ `- d3 `* R
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    2 d8 a, P! H* q: X
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset3 ^0 B& R0 K) {3 o% K9 ~  S
  130.         OLED_WR_Byte(0x00,OLED_CMD);//
    % U# B$ |+ ~1 G$ k9 T
  131.         ' A9 _. r4 q! g0 ~$ ?, G( w
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    4 X5 m8 _& T% k* ~  D- H
  133.         OLED_WR_Byte(0x80,OLED_CMD);//5 L+ \. w, |# i; u2 F
  134.         6 k% t% F( Z2 c3 y; U
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    ( P" }7 b, R! B8 |0 L0 @5 w# j$ e. r
  136.         OLED_WR_Byte(0x05,OLED_CMD);//' v  F9 L- o# p) r6 p( L8 [( s9 @8 N
  137.         . @* ~" N; l. n% D5 k8 O
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period: H/ l+ [" F# L
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    # r( @: |; {7 ^4 {$ _
  140.         2 M! s" Y! c. b2 F+ y: E
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    4 O3 L6 ?0 D/ W) C
  142.         OLED_WR_Byte(0x12,OLED_CMD);//
    : }' ^; w; M; n0 O
  143.        
    ; S2 G& U7 h0 U' V2 m. \; z$ y4 ]
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    4 W" D# J8 U7 X) e+ D7 s& N2 ^: Z( n0 N7 t
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    2 a# Z7 b0 y! v8 B3 ^
  146.           j: @3 t, i  X* S0 E
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    9 B. s$ }/ @6 g3 r4 |$ m
  148.         OLED_WR_Byte(0x14,OLED_CMD);//
    : X& K2 x% }/ s7 v! ~
  149.         3 e; \9 i1 w! z& r" A
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    3 z: z4 J! u6 ?  b5 W
  151. }  
复制代码
  1. #ifndef __OLED_H! T: o! w% K) x" b6 b( R; ?- y
  2. #define __OLED_H                                   ( P2 J. ]/ f/ S
  3. #include "stdlib.h"
    , m* _$ g; _; U8 i  g% N7 l& x7 f
  4. #include "stm32g4xx_nucleo.h"& r/ k( h2 i5 B! y+ }9 |5 g
  5. #define OLED_MODE 0
    9 E, X+ y. u) M/ h5 N, i6 X
  6. #define SIZE 8
    3 R: {! v6 Z+ x  H1 R
  7. #define XLevelL                0x00
    , R' _: C8 v1 i
  8. #define XLevelH                0x10
    ) _. ], N9 v9 d
  9. #define Max_Column        128
    # f! a* `3 p; \) _: }  C
  10. #define Max_Row                64
    0 v7 t2 I( ?+ H
  11. #define        Brightness        0xFF
    0 C0 |! P6 L; X9 A0 Y4 T3 [- c
  12. #define X_WIDTH         128
    8 ]* q8 p4 z. f; a1 k  V
  13. #define Y_WIDTH         64                                                              
    3 p) h4 @  N8 N( p) J# E' b; \
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
    * ?8 j0 w% I) A* \7 O3 Q7 p
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)  y  H" h  m* w0 y& K* z& S/ X
  16. ; W* {- Z6 G. z
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
    " M5 O2 T; R% z( V7 @
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
    2 L# d, T0 s' X6 S0 {4 B9 T

  19. 9 [* t; V' u) a
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES# X* Z  C9 Z# d4 e! M0 I- a
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)" }1 p9 X% Y; j& Z  i
  22.                      
    2 |7 D- t7 N4 |9 o6 P6 B, N0 y
  23. #define OLED_CMD  01 w4 {* Q1 V( q1 q" j
  24. #define OLED_DATA 1) W5 t8 ?. ~5 c
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  7 ]: s1 p! O; b: e- {4 q
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
    ( C, k6 |- `% A3 f
  27. 5 K% k- v  r2 T/ V" e8 ?
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  % E8 j0 a2 T' z5 l5 \
  29. void OLED_Display_On(void);) P  P# ?  }& p, x& r8 e& e3 R3 N
  30. void OLED_Display_Off(void);                                                                                          6 o6 I$ m$ X7 [5 L9 k' Y; [& `
  31. void OLED_Init(void);
    ! ]. t, ~' |8 v
  32. void OLED_Clear(void);5 v8 B- w9 e* O8 q. P. ]
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
    6 q' ?+ K* ]  v, g3 S
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    : ~4 N, Z6 k8 \: o- e1 d( U1 Y
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);0 B* n% A+ J: R+ J$ H' w: E4 E
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); - d. S" ^" x- b8 `
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    % P4 ~2 z3 ^/ u- H( [& m
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    ( k$ e7 ]  Q0 @( u' n$ I+ h! T: k
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);* z) n( y$ @1 m8 _8 O$ @
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);$ b. p9 M$ s% M1 D5 D& U
  41. void Delay_50ms(unsigned int Del_50ms);
    * N% |! E  f' o- v' z
  42. void Delay_1ms(unsigned int Del_1ms);
    3 U6 `" P5 f8 X; U
  43. void fill_picture(unsigned char fill_Data);6 V! U. V* F" ~( t6 [
  44. void Picture(void);4 Q% }, m% q, M, n# d, G1 T! b8 Y$ }
  45. void IIC_Start(void);$ {1 @5 }$ B; f, e2 |, \
  46. void IIC_Stop(void);
    + t5 ^/ |% Z; F
  47. void Write_IIC_Command(unsigned char IIC_Command);" @: ]0 L8 Z! _' h+ [
  48. void Write_IIC_Data(unsigned char IIC_Data);
    - `% T! O' o1 E: }2 R
  49. void Write_IIC_Byte(unsigned char IIC_Byte);
    5 d" w; J: p. B& N$ m& z5 Z4 s& A
  50. void Display_Battery_Level(void);
    ) Z/ |; M* \* ^7 E, B) g1 M
  51. void IIC_Wait_Ack(void);
    ! M3 y$ ?2 C$ b: ^' x: H
  52. #endif  
复制代码
  1. int main(void)
    3 r0 ]$ p/ w8 O- k
  2. {
    . B; S" _* R* n: X& U) _+ x0 z- K
  3.         HAL_Init();
    . u- c% l% U. q, t2 F
  4. $ D" Z9 k3 \, u7 z
  5.         OLED_Init();
    8 ?* N6 R1 N$ u- m0 b
  6.         OLED_Clear();  * A7 {- p! d' k, C6 ~) A
  7.         SystemClock_Config();
    % L- i( D( x9 K' c8 ]
  8. " m  Z# q: ~- v, `& Q7 m9 ]$ U
  9.         BSP_LED_Init(LED2);
    + J& Q0 x5 n2 _4 y1 ~
  10.         EXTI15_10_IRQHandler_Config();
    ! p2 a( o& T( Y3 A: k: j

  11. 9 r$ a$ B7 l- c5 R2 @* K
  12.                while(1) 7 E5 m! Y/ e6 E$ \" N( \/ K
  13.         {8 `* ~/ b& o  K* k9 _  W
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    % G% z/ V. P0 J8 ~
  15.                         OLED_ShowCHinese(45,0,2);//
    2 |5 a. N5 s! A) j5 K  j, W. V
  16.                         OLED_ShowCHinese(63,0,3);//
    ( k  `. M: v! Q! B& r2 s
  17.                         OLED_ShowCHinese(81,0,4);//9 O5 d% Z6 R) d* [' h/ T& [
  18.                         OLED_ShowCHinese(99,0,5);//
    $ x7 g  e0 H) N
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); * `/ R$ I/ k2 }% \
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);% b$ _1 q5 J  `2 `. Y% N& t
  21.         }          6 r9 }1 p8 e/ q& n# p9 B
  22. }; g; t0 A( f0 Z' W8 s
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg 1 Z( F5 a' ^$ h; ~' y/ `; d

  K# g( ]6 |7 y3 y8 j0 L# y! g0 E1 Q" \' a, u
收藏 评论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 手机版