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

【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模块,今天拿出来来调试调试这个模块。
  N7 m* C& y1 I# {+ l7 c" O4 l4 V      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
- @1 m: P# o* ]2 Z8 F$ h7 T1 L       原理图.png ' }6 ~6 Q  n9 O7 E7 _$ c* d
    部分代码如下:2 w5 H' e. I9 b; b! q

; ^% p& Q: e- n- e7 f* O0 y; I7 Q! Y
  1. void IIC_Start()( q/ D3 G* \  l+ j0 _1 r5 D2 l; h
  2. {
    7 q' ?0 F3 m4 \, H, X

  3. 0 k4 {& N3 t, G. x
  4.         OLED_SCLK_Set() ;
    1 L0 f' k+ e. Q& R' e
  5.         OLED_SDIN_Set();
    # b: ~) d' Q% W7 e6 ~8 V2 Y
  6.         OLED_SDIN_Clr();
    # A" `7 S/ G  Q7 x+ I5 y) q5 _4 E( c6 b
  7.         OLED_SCLK_Clr();
    / ^% m* X* Z3 N7 P" j
  8. }3 N& X( r# |' @- f8 E
  9. void IIC_Stop()
    9 I. c0 \3 g5 k. v1 c( b# x
  10. {
    # }/ m0 O' g8 ?& u$ `
  11.         OLED_SCLK_Set() ;" s4 Q+ {! Q5 i2 w
  12.         OLED_SDIN_Clr();
    : O0 |3 [# Z* E8 n* D6 z% ?% [; D
  13.         OLED_SDIN_Set();! U8 c3 Z. n+ D  l* {9 l8 l& f
  14. }
    9 T, f1 w$ C3 N. \% d
  15. void IIC_Wait_Ack()
    * H! }7 Q; k$ K' @8 U* A+ C, i
  16. {' V) b/ ?& j6 O
  17.             OLED_SCLK_Set() ;
    ' Q' D. {* p: ^
  18.         OLED_SCLK_Clr();
    . T# J/ R! f5 ?* }
  19. }
      T9 n4 O; ^% f6 k2 y
  20. void Write_IIC_Byte(unsigned char IIC_Byte); Y4 ]! q* z6 W6 _9 |2 N1 Z2 ?
  21. {
    - f& X1 L' U) Y
  22.         unsigned char i;
    6 P  K+ e: h. |) P+ m* f7 O0 i
  23.         unsigned char m,da;3 d! a" K1 F8 ^+ A0 K5 M; D
  24.         da=IIC_Byte;
    ! M; U! G/ D: m
  25.         OLED_SCLK_Clr();
    7 b( |, |6 o$ h  p
  26.         for(i=0;i<8;i++)                % s  r+ J- b" b( i% ?6 S
  27.         {7 P2 E" q4 T0 l. ]  ]+ ?  G' }. U; G0 \2 s
  28.                         m=da;
    4 e: F/ W1 Q/ f4 W. e6 X+ s* n
  29.                 m=m&0x80;
    - ~1 Y( A$ w8 n- [/ b/ W
  30.                 if(m==0x80)
    1 X% O) s  b' X# }' y
  31.                 {OLED_SDIN_Set();}
    5 @/ e# w& \/ k3 z; L
  32.                 else OLED_SDIN_Clr();
    $ ^# j& P/ b) F3 V. A+ y8 ^" A
  33.                         da=da<<1;5 Y0 _+ k/ a; i0 Z* @# n4 `8 h
  34.                 OLED_SCLK_Set();) G7 N3 \& B6 z4 Z$ N
  35.                 OLED_SCLK_Clr();! S0 w# O; b, @0 {, q# f: N, B; w
  36.                 }7 S8 v9 Y6 p' i7 w, C% u
  37. }/ Z- T$ s" h% K/ w
  38. void Write_IIC_Command(unsigned char IIC_Command)9 e. F5 d4 j4 s% t! R/ h' b9 r
  39. {
    . V& o6 ^1 U7 L3 S, U. T
  40.    IIC_Start();: G9 q, I9 w. J, D1 B
  41.    Write_IIC_Byte(0x78);
    . H! h$ E  Z. m* w. l0 E# x# ^
  42.         IIC_Wait_Ack();       
    5 U! L' {3 ]& C% C0 z% Y' F  e; h
  43.    Write_IIC_Byte(0x00);        . j- z# t( C. o: w1 i7 e0 j7 i+ T
  44.         IIC_Wait_Ack();        % E2 k5 p( D# K# W6 ^) k* C+ l+ e
  45.    Write_IIC_Byte(IIC_Command); 8 z0 n" O: L1 S8 W. _
  46.         IIC_Wait_Ack();       
    7 G" i4 @" H; d
  47.         IIC_Stop();  O* _5 k+ y3 n( _
  48. }$ v& K7 T* c- V* z; N* S0 p
  49. void Write_IIC_Data(unsigned char IIC_Data)
    7 A: b; ]& _4 P( m' _& r9 K
  50. {
    ; @5 R5 Y) [9 p1 [. Q0 Z
  51.    IIC_Start();% n& |, F* u" ?# b; W/ ]& g
  52.    Write_IIC_Byte(0x78);; N+ v6 W/ f" j" z1 T5 M9 j' X
  53.         IIC_Wait_Ack();       
    * L' Y5 [3 p- e; j
  54.         Write_IIC_Byte(0x40);
    * E0 b5 K% G% Y/ z- c  w
  55.         IIC_Wait_Ack();        , s* ]8 l# M1 F9 ^* `( U3 |8 D
  56.         Write_IIC_Byte(IIC_Data);
    0 T& y: C: c3 m+ d* U  _; I
  57.         IIC_Wait_Ack();       
    : H+ s) J6 A6 o1 |
  58.         IIC_Stop();
    ! D/ a  D2 \! v6 p/ {+ n  E
  59. }
    3 Y! a! J% S. F
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)
    ) D1 h, R8 q3 F4 p) @& `. A6 G* I
  61. {
    # l7 v9 {1 l- V$ s0 X. p2 a5 Z
  62.   if(cmd)
    " |  ^( G! M; |/ _( Y
  63.   {
    9 B. [; y4 c. G% B, ~; F
  64.        Write_IIC_Data(dat);
    * O5 b; ^2 R4 S: H; Q: D
  65.    }
    ; `9 s6 ~2 {, ?9 f7 S
  66.    else0 t# X) v/ c4 W* _% [8 F9 z0 E. u! f
  67.    {
    : N1 C! f' h$ d" j
  68.         Write_IIC_Command(dat);       
    8 q+ R: C* {# m+ U: k& H6 I
  69.     }4 l! M# Q6 ?+ u+ y
  70. }
    2 D. Q$ X! N/ r
  71. void OLED_Display_On(void)+ l. l7 `, N: r8 _
  72. {( m# P1 g8 i' ]
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC# F' I, c, O, k* Z  r) m2 @
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON
    2 _* n: i# h( [: o1 U9 t& I
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON! ~# k8 ]* o5 u# c/ j  R
  76. }   1 y; m/ {4 z% U- a  }8 y7 ~- H/ b  I
  77. void OLED_Display_Off(void): p5 I% q3 ]' |/ B6 V5 L
  78. {0 r, X- u* C% Z7 d% f7 f7 i
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    " K+ r: \9 J$ |" \8 E) d
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF- Q2 l  O! P/ u* K4 G2 k( q( d7 {
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF: V7 n% p6 {$ g/ v2 \
  82. }                                            
复制代码
  1. void OLED_Clear(void)  . c1 U2 @4 i9 ~7 v! p8 ]6 y
  2. {  
    . B0 p8 H- o  _3 \
  3.         u8 i,n;                    
    9 Q3 y2 ?/ }+ `/ [6 e$ K& Y+ T3 l
  4.         for(i=0;i<8;i++)  5 E( P/ o; v' }0 E, v  @/ o3 X
  5.         {  6 ~& i0 g) E5 |$ Z
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);& x6 C9 [/ g  I' a
  7.                 OLED_WR_Byte (0x00,OLED_CMD);
    ! z& ?2 X& [. D  Y+ a6 R0 n
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 9 M5 A# X8 J" y. E0 E( P
  9.         }
    ; l" C3 m1 i% j  ^& B( t
  10. }
    # J; r" H7 G  u1 L% y! ]3 \7 P
  11. void OLED_On(void)  5 V; v% |& r- [. O$ T1 [
  12. {  
      u" x' S9 q, i5 g2 J* R, F
  13.         u8 i,n;                    
    - ?+ Y: _2 l# l  q1 D7 y
  14.         for(i=0;i<8;i++)  5 l' @; t5 U9 A. N- n. Y; O- S4 y
  15.         {  6 @/ {+ N& e& G: F: d2 c& w; e' @4 d
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);/ Z. q) U) u' k* m. t: \
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
    / |: Q# F: I) U/ s* \# g$ o- Q# z& i
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); " q- O2 d# z/ C
  19.         }
    * d+ F, R' B0 P5 {5 }
  20. }
    & g4 D1 ?2 e; V4 Y; w" h& N
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)4 e6 j0 p9 p( j( d& s$ F; T1 X
  22. {              * n6 @2 u4 m3 E1 K5 s) r
  23.         unsigned char c=0,i=0;       
    5 Y1 W4 Z% s2 `( c& e( q" n
  24.                 c=chr-' ';
    ; @0 H. S$ s, f8 J% [. c. W
  25.                 if(x>Max_Column-1){x=0;y=y+2;}( e; r/ t- a! `" P
  26.                 if(Char_Size ==16)- ^3 Z3 h7 F, Z7 v' }7 `: @
  27.                         {- m# F5 E& p$ t# u
  28.                         OLED_Set_Pos(x,y);       
    - _7 K& u% ]9 A5 L
  29.                         for(i=0;i<8;i++)
    $ l; ]" c3 Y2 g4 R  _% i
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);5 {1 _& @: K# h% r+ E: I
  31.                         OLED_Set_Pos(x,y+1);
    ! y4 X4 q8 ^  N& I; s
  32.                         for(i=0;i<8;i++)" N( m: U. s8 r
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);  t' `# S; N% U1 _) L: V3 ?0 N
  34.                         }8 C: k3 L+ R$ Y9 D. D: h( p! h0 A% |
  35.                         else {        : O+ P( y2 n+ {4 O# L  M+ `
  36.                                 OLED_Set_Pos(x,y);6 T% `% i, h2 k2 I9 b7 O$ x
  37.                                 for(i=0;i<6;i++)5 G/ L) l0 Q9 D6 j
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);                ; c( k& g0 H3 q/ X8 \/ j
  39.                 }2 e* t) L, u5 H6 T- ^( L! W
  40. }3 G, h( S6 o+ T  P1 e" k
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)6 R1 u; f& b' k- L/ o
  42. {                
    : q1 t- W+ v4 `& }2 o' o
  43.         u8 t,temp;5 V9 G6 x; Z3 ]% `; v& N8 }
  44.         u8 enshow=0;                                                   8 m3 f. W& H3 N0 j
  45.         for(t=0;t<len;t++)0 \9 X4 q6 Y7 M( [9 {
  46.         {7 d7 R  E2 |- X. ~9 j( a
  47.                 temp=(num/oled_pow(10,len-t-1))%10;
    0 k) A" G  x9 I, t# f) j3 v: _
  48.                 if(enshow==0&&t<(len-1)): z, P, d( r0 i% u1 y. c0 X) t
  49.                 {
    5 K& V# |  U# f$ z, X3 s# W% Q
  50.                         if(temp==0)- m$ n: \2 Q1 ~
  51.                         {
    / c, U6 L9 q& g
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    1 j! r) v5 V. ^% J8 e3 k  f; E+ H
  53.                                 continue;
    . J. z6 h& j# R" ^) r# ~' P, s' F
  54.                         }else enshow=1; 3 j; \$ C% t+ D& [+ ]+ \5 F
  55.                           % V; E1 X5 u0 B0 k& S8 O
  56.                 }4 `5 i5 |1 G7 C" o/ d3 @" G% G
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    " G' L2 s- b/ ~
  58.         }2 h5 a" U5 ?7 B) x; N! s
  59. }
    - m! q$ L  S# C' W+ x& P* F- H
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)- C$ p7 N" u: h* \! U! y9 c: j
  61. {/ R* O( I( ]4 ~& g* U
  62.         unsigned char j=0;( M' o2 v, ?7 W4 y9 P
  63.         while (chr[j]!='\0')
    - ^1 Q. r, n; |% W! ?" H( \: M6 h
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);. k# @. y( b* \, Q+ a
  65.                         x+=8;/ K3 u; C6 ~: R  O% n
  66.                 if(x>120){x=0;y+=2;}
    % p$ V' J3 q3 U7 B/ R
  67.                         j++;8 y" p% g1 G3 a
  68.         }" g) k! v$ x) \! {
  69. }
    ' B' S6 ?# D+ e" W3 Y- r4 W/ {

  70. + w) }6 W) ~  D
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)9 C$ d, k# |8 M' y' t5 z6 \3 ]. l
  72. {                                  
    / S7 U2 w: V  D! d
  73.         u8 t,adder=0;
    2 A% [, }8 Y3 ?7 X8 }) I$ }
  74.         OLED_Set_Pos(x,y);        6 J3 f! Z. W8 \. C
  75.     for(t=0;t<16;t++)( u) i4 ?3 L8 b: J; D  E
  76.                 {
    2 k6 _$ C) g+ Q+ X4 J7 \% d
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);! l. X1 B6 j  t; s, j* Z
  78.                                 adder+=1;3 [/ D0 J+ v: a% r9 X7 D3 ^& j
  79.      }        . C  l3 {2 q* m+ Y) Q
  80.                 OLED_Set_Pos(x,y+1);       
    8 S7 k, V. _9 {$ [; o
  81.     for(t=0;t<16;t++)
    7 x; ~0 p9 i/ O& A3 f3 H! p
  82.                         {        % i2 S3 K+ V/ h" i
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
    ) O# e' J* O" ?; }: d9 T) ?3 ]2 _
  84.                                 adder+=1;$ P1 i5 R8 \( W
  85.       }                                        5 x1 y) N  [2 z/ _
  86. }. U; R. F: p6 f9 V$ Y

  87. ( [2 H$ [1 y' }) g
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])- a5 S6 T5 q# D- c0 R& R
  89. {         . c, C; Z6 R+ ^1 E
  90. unsigned int j=0;
    7 m6 v( i$ H9 Y7 k3 I
  91. unsigned char x,y;
    . i2 J: f- |. j( G
  92.   
    % U* F3 M( R0 l* V' ^: f% X
  93.   if(y1%8==0) y=y1/8;      
    - r# b5 m0 K5 Z4 T8 w+ ~7 M8 A
  94.   else y=y1/8+1;
    , p/ e2 I3 @( P5 ~
  95.         for(y=y0;y<y1;y++)5 P$ j8 }# s# c. {* t6 H! i
  96.         {% _+ s2 m5 E/ z  S$ [, O: _+ Q5 R
  97.                 OLED_Set_Pos(x0,y);
    ! n; G- P3 W9 z
  98.     for(x=x0;x<x1;x++)
    # s/ [" E) o9 {/ B9 i! `
  99.             {      
    5 o2 ~' |( S" }- z' H$ P, a
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    ) A. ]: ]4 [0 X) J# ~4 ^% H) T
  101.             }, J$ @7 _5 Z  u$ C
  102.         }) E- h" d" m' K7 ^- j
  103. } 6 J( O( \$ S. `# w& \9 p! A/ x
  104. " J/ @7 _" R  v. j* ?
  105. void OLED_Init(void)
    9 M1 f9 ?3 E; j/ {3 z
  106. {         " u: Z8 A% e! |# X
  107.         GPIO_InitTypeDef  GPIO_InitStructure;. z$ h/ U; r4 I
  108.        
    * [8 b% C% m" s5 ~* R6 S; v
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 " f( g" D$ z. x# f$ V- v
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    " J( W9 T+ R7 G
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;$ ?. K+ j) ^) w0 M
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;! F' l8 ?( S' C
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         9 R" Q# \5 K8 W
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);' J, f4 R2 Y! i0 j/ h( k$ v& F
  115. HAL_Delay(200);
    ' t' a) K7 z; F
  116. OLED_WR_Byte(0xAE,OLED_CMD);& N$ w5 P/ A& W+ N! c* ^) |8 O8 Z
  117. //display off
    " i5 C- |! q! }4 f# L% _
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    - ~9 t1 j! f/ N5 q5 |* i
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address% `, R$ x& a5 ^1 F0 y8 E% g# d
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  
    # V+ W8 _5 |0 L% ]& k+ V; L
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address# b8 c+ e, X; r5 [
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control7 O$ \9 F! X6 c% y8 v
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128     G0 l' y* c) |
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap ! w; Q  S/ O! o8 ?. c5 T; e
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
    5 Z# T" v" q2 P6 M
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    4 h& k! t  u5 {  j1 r( P4 a
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    ; B" q( X9 o& u. E8 q1 I# N5 U' x
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
    / w& I3 ]. Z5 F1 K7 |7 q
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    6 ]4 Y4 S3 R3 B
  130.         OLED_WR_Byte(0x00,OLED_CMD);//0 n7 E+ [/ w; A9 n( l+ t
  131.         # i! y. v& k4 R) t
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    " t' c. \  F! e% S. }- K8 }% ]
  133.         OLED_WR_Byte(0x80,OLED_CMD);//, @% p! H7 j8 t5 Y# G
  134.         % n) \, p' _4 h. M6 p- R* T8 A
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off$ s& W4 b7 J  t
  136.         OLED_WR_Byte(0x05,OLED_CMD);//$ l$ u, m; ]  v
  137.         % l6 f- w4 d% v
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period) b- U" v% |9 u/ {9 V+ g
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//) A2 I  \4 g. z, H. Y
  140.         / B  A9 h4 n  z
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
    9 |( L, ~/ X3 _
  142.         OLED_WR_Byte(0x12,OLED_CMD);//. ~! C: M6 G$ }# B# e
  143.         # B  l5 Q+ C) J
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh% ^+ L  s: Z9 @( {0 j" c
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
    7 n, q6 D; _. C) z- _' i2 I2 p8 @; }
  146.         0 \4 p- c) R1 w- _+ g
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable' _! X$ I3 z; i/ J. ]& R) Q
  148.         OLED_WR_Byte(0x14,OLED_CMD);//" h: W5 n4 M* R7 J3 l
  149.        
    * |2 k/ _9 ^! O+ F/ g- u
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    4 g9 S' t  k, v' }
  151. }  
复制代码
  1. #ifndef __OLED_H$ K, `) [$ S1 `
  2. #define __OLED_H                                   
    4 G' R9 f% Y6 |6 I" A( C: F7 C! b3 C
  3. #include "stdlib.h"# ^5 F9 z  ]$ \0 L% {( h
  4. #include "stm32g4xx_nucleo.h"
    : @2 u  I# r' ]0 h  P- S0 S% Z7 M
  5. #define OLED_MODE 0# j- b2 [& H* z: \
  6. #define SIZE 8
    7 N% D1 w0 \" R, I5 ?
  7. #define XLevelL                0x00( F' c" v7 {. W7 }8 x
  8. #define XLevelH                0x10) n6 w; v7 Q8 k
  9. #define Max_Column        128' T2 z0 T; |0 l/ k/ z& m
  10. #define Max_Row                64
      v4 X- o" b! U0 Q) K
  11. #define        Brightness        0xFF 8 H! E6 B' ^- U0 f2 ^
  12. #define X_WIDTH         128. X; B* v& a0 n# m6 c1 e$ m6 [% F( e9 K0 H
  13. #define Y_WIDTH         64                                                              
    , m9 }" i' S8 m& V3 {0 C
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK2 D( }) [6 P, T1 t5 D
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)/ z) A: @; [5 G6 x

  16. ! r. l  |! v4 h7 h$ U2 z$ W
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
    & k( M+ x* h) B
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)2 _# A6 G8 ~$ {9 D

  19. 9 e& d$ K8 \, Z" ^" p
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ m; n" y0 @- m4 Z5 H9 n
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)4 S' n" \; k1 D& O' ^/ @% s$ A
  22.                      
    - N  X7 k9 l: U5 a1 t: ~
  23. #define OLED_CMD  04 J' G, F7 {) w. G  @: g
  24. #define OLED_DATA 19 Q! M* u0 w' l: c' z" W! }1 i% K
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  
    3 V4 r& I6 f4 m; z
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
    $ G9 \0 d# w" Y5 x; T4 y5 v
  27. 1 e* k: _4 i% F+ M0 l
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
    1 v8 [" `0 t( J3 I  c
  29. void OLED_Display_On(void);
    3 N8 Q; {8 x3 K
  30. void OLED_Display_Off(void);                                                                                          
    0 E9 c) c2 V) h
  31. void OLED_Init(void);5 c% T' T+ T9 [: K% M5 X' M
  32. void OLED_Clear(void);9 }9 Y% I" X9 A: h, D
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);# w5 g, R: `0 n
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    ' ?/ F9 S; H( r
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    ; S" c' j8 q0 C% ^
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); * Z3 T! L2 h" \( c- c
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    9 J, n9 }* W  A4 Q
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);
    + w3 N* L$ Q$ d. U# K
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);3 u: d  h2 C9 ^+ O
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
    2 i0 [% x8 n. R& z0 v- N5 T8 M
  41. void Delay_50ms(unsigned int Del_50ms);
    1 U. \% U: C- [( x1 t: |
  42. void Delay_1ms(unsigned int Del_1ms);9 K0 n8 P4 Q9 S+ d
  43. void fill_picture(unsigned char fill_Data);# J) Q, O2 _3 _. P" {6 h/ L
  44. void Picture(void);
    , h. g6 |9 a, N& H8 p
  45. void IIC_Start(void);5 ?0 h1 e  c6 E( b
  46. void IIC_Stop(void);0 V% ^* M9 F) z* O
  47. void Write_IIC_Command(unsigned char IIC_Command);
    ! T+ d& K, p8 l1 h1 G4 ]
  48. void Write_IIC_Data(unsigned char IIC_Data);
    : h1 c. L3 Z4 V9 u* w& n
  49. void Write_IIC_Byte(unsigned char IIC_Byte);
    . t  A7 I2 d6 S; Z) j
  50. void Display_Battery_Level(void);! @$ L( c8 q4 b
  51. void IIC_Wait_Ack(void);- C/ ^- R  f0 r6 `( [' L: Y
  52. #endif  
复制代码
  1. int main(void)
    % [1 H# h( ]0 W( C0 i& F
  2. {
    & ?$ G( k* W* Z
  3.         HAL_Init();' i% T( x/ M; ?6 \# u+ @! ]

  4. # F* b" M/ b- b' i* s% {7 W- I( W
  5.         OLED_Init();
    4 k4 a' m: F! {7 ]. J5 \) C; l- G+ ^- q
  6.         OLED_Clear();  5 g7 ^* G6 I, Q0 A4 u
  7.         SystemClock_Config();& {; I" @8 Q1 S1 B1 V

  8. : m. t5 J5 i8 S& Z
  9.         BSP_LED_Init(LED2);; N/ o5 r2 S6 L, v, D
  10.         EXTI15_10_IRQHandler_Config();5 V0 g: R1 [: v% c
  11. ' _# ~1 L0 ?, b# k* Y
  12.                while(1) ! R6 O" }+ o/ S9 t# Q  w( I6 ?/ C2 P, x
  13.         {+ R; _+ m( ~7 b! n) j
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);& }( n: d9 A6 u+ r
  15.                         OLED_ShowCHinese(45,0,2);//2 a4 ^' X3 O; v* u4 s% Y
  16.                         OLED_ShowCHinese(63,0,3);/// m+ [; u* m  t
  17.                         OLED_ShowCHinese(81,0,4);//
    & A# T. o2 g* i$ f
  18.                         OLED_ShowCHinese(99,0,5);//7 ?) }9 q  s3 n. J- I- T6 H. v
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
    ' ]' E; g* `2 |$ Q) x
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);/ U% i# A2 K3 A( B
  21.         }          $ g& _! V: P" i' K
  22. }* p# ^- U( _  i( `/ R" C
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg : Q3 S7 I0 R  g1 [& ^
1 f$ l' _: N" ?

# q' `6 z$ j3 \7 w# C4 I
收藏 评论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 手机版