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

【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模块,今天拿出来来调试调试这个模块。/ ?# O0 l2 X% z5 Y2 S1 @8 J* Z, D
      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
7 f/ [3 h2 U9 M0 r5 R6 x       原理图.png * O0 b9 s0 Z0 o: g, b4 z
    部分代码如下:
4 [6 @" I, a; K) `$ O2 g- u8 ^/ |9 R' @# N
  1. void IIC_Start()) s8 @+ S4 ^: j/ ]
  2. {/ }$ ]) N, d- f
  3. 7 v8 B3 `( M; j1 a$ z0 [( x
  4.         OLED_SCLK_Set() ;
    3 [9 R  N. d$ @* E1 C' g  R
  5.         OLED_SDIN_Set();: ^% |8 \' j1 I2 a; @/ j
  6.         OLED_SDIN_Clr();7 C" B6 z8 R0 ?7 {( m
  7.         OLED_SCLK_Clr();0 g: x+ N( J5 a; _1 i% K& f
  8. }# g8 V% {& ]7 |- \
  9. void IIC_Stop()$ K& P# V9 j! b+ I) }
  10. {
    ; h9 d/ v- B/ ]% S  M- R
  11.         OLED_SCLK_Set() ;
    3 |1 `( S$ s1 L4 m& s1 f* C( a" a
  12.         OLED_SDIN_Clr();; h5 z  S3 D9 g- O+ \- Y
  13.         OLED_SDIN_Set();
    # P2 o$ ~  |& o! E0 J8 A# P
  14. }
    8 \$ b1 W$ H- h7 f1 A6 t) I
  15. void IIC_Wait_Ack()/ H- `; q) ]( j- l# h# Q5 b: n. ?( q
  16. {
    ; X& t6 ~( o, c; B) T
  17.             OLED_SCLK_Set() ;( q5 z( \4 q7 m5 V
  18.         OLED_SCLK_Clr();+ H+ @9 ?3 `8 B" j
  19. }1 q# I, R$ r7 ]8 W; i) \* C5 ^4 U
  20. void Write_IIC_Byte(unsigned char IIC_Byte)
    7 Q; G' I7 I2 i) l+ O
  21. {) \& W( d2 R  \( \
  22.         unsigned char i;- V3 J8 N( N- O; ~" H  x& o# Q
  23.         unsigned char m,da;
    & O8 S, g$ [$ d3 S7 V! z. j
  24.         da=IIC_Byte;5 |' t; {) @$ y
  25.         OLED_SCLK_Clr();2 }6 J5 H% w6 N6 f
  26.         for(i=0;i<8;i++)               
    + U4 h! ?) A; Z+ J) A. R! R8 J
  27.         {
    0 u, `, u6 t3 |& D* A+ q; ?
  28.                         m=da;
    % n! R  u4 Y6 ^  D# @7 ^5 [
  29.                 m=m&0x80;
    4 ]% w7 `( _+ R8 M$ [3 I  H7 k
  30.                 if(m==0x80)
    5 h  @7 d& x$ N( R3 I9 v
  31.                 {OLED_SDIN_Set();}( B' o4 v9 V: m" t6 f
  32.                 else OLED_SDIN_Clr();. E' g1 `+ c7 r# w2 k% k
  33.                         da=da<<1;1 N. S: q& A2 Z, f) Q, T
  34.                 OLED_SCLK_Set();
    ! C+ j9 I( i% w! {% c
  35.                 OLED_SCLK_Clr();4 _2 E9 O/ H9 O! W! U) @3 ?  o9 B
  36.                 }
    2 [) \% p1 ]. n. D. b
  37. }
    # C* j4 m# ?, c
  38. void Write_IIC_Command(unsigned char IIC_Command)
    1 n2 O' E" u: p7 [  ?- H8 i$ a
  39. {& z8 ]: |" h" Y' z# [& U* f
  40.    IIC_Start();5 c+ a' U8 Q  c" \, C
  41.    Write_IIC_Byte(0x78);
    : M% F: _# [0 f, e
  42.         IIC_Wait_Ack();        ' B4 D; R% ?3 u. J( c
  43.    Write_IIC_Byte(0x00);       
    ! S9 z( t6 k; d1 n5 W
  44.         IIC_Wait_Ack();       
    6 X( e, }9 I3 e2 A. t
  45.    Write_IIC_Byte(IIC_Command); ) u* {9 i: A/ I
  46.         IIC_Wait_Ack();       
    7 G% Y1 `# k4 G% E' O
  47.         IIC_Stop();, Q+ {1 U" a% |# ^- a6 l
  48. }2 g5 g) T% R8 b" F/ L; e: k5 N
  49. void Write_IIC_Data(unsigned char IIC_Data): |6 @0 C% q9 h3 Y0 I
  50. {
    2 I4 N. p8 i* m
  51.    IIC_Start();8 W$ G* b; C* S$ Q/ v6 z) ?
  52.    Write_IIC_Byte(0x78);1 \  t' P! P) H# n7 d! D1 u  Y
  53.         IIC_Wait_Ack();       
    5 |1 e, d' f- w% h0 H  o
  54.         Write_IIC_Byte(0x40);
    , M$ W$ q, j% s. y
  55.         IIC_Wait_Ack();        1 o# }# f" Y* h
  56.         Write_IIC_Byte(IIC_Data);
      R% }+ N/ p4 k$ E
  57.         IIC_Wait_Ack();       
      F7 Q; H# R4 N6 V/ }
  58.         IIC_Stop();
    ; T6 U8 n+ X+ y2 ]3 \
  59. }
    # V% U/ B) r8 f* [& x1 q4 K
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)9 |; Y: a* b& B# \4 [' r
  61. {1 N( r6 q. N# @! U5 d( z4 v
  62.   if(cmd)
    5 Z8 ~' G" Q' k" q, G* {0 O8 b
  63.   {
    : f) s( C4 R0 Y
  64.        Write_IIC_Data(dat);6 _) G) J2 e+ u. I7 Y- x
  65.    }
    5 b! l: G* |& b! M4 Z
  66.    else
    ! v* h5 v( j. E4 X; z/ e9 i
  67.    {
    2 |' ?! Y( {5 }3 o; Q6 o- Q" ^
  68.         Write_IIC_Command(dat);       
    " W6 Y$ w% Z* [: \* ]
  69.     }  w8 b6 Z' V/ n1 x+ o: ?5 H
  70. }
    . b* G( U# g" s( a" m  s1 }
  71. void OLED_Display_On(void)
    " I6 ?7 T1 i5 S4 u, h
  72. {
    9 ~7 S% Z, j1 M- l! b
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    / O& Y0 g; t5 b0 h/ b
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON- {2 N# n4 _9 R, Y: w$ {( h" \+ k& c( @
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    4 P" o) |6 s- h3 e+ g( T6 N" {( I
  76. }   
    # r3 }( E- c: {$ {
  77. void OLED_Display_Off(void)# V- |' F9 N! G4 n8 v
  78. {
    2 Y! ]; G% X1 N& K9 w" m1 T0 v0 P
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC
    - x$ c7 g+ l" K
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF$ Z0 Z  J) c7 A- ~& `
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    2 e* v1 s7 |0 v
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    5 \  R- Y) j% R0 b+ g
  2. {  % \/ j* o7 |6 K& c$ c/ ~* q- u( G- ]
  3.         u8 i,n;                    0 X. [# X) |2 o8 @& U( ?
  4.         for(i=0;i<8;i++)  
    , }3 l- z; L! d+ e
  5.         {  " V7 ?7 V, m: X( \' _/ w1 }) I
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    * M$ u9 R$ X1 Q% B1 F# x. L
  7.                 OLED_WR_Byte (0x00,OLED_CMD);% x; K! f- V" k9 q+ g( D5 q& q
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
    ! |1 n& Z. z0 v7 G  Z
  9.         }
    5 ^* S5 j  G8 `" x( U
  10. }
    1 |( t$ H; v8 o$ w/ q, o/ Z
  11. void OLED_On(void)  
    $ A7 a( T1 O3 Y% T9 N! p' _
  12. {  
    : x5 n) f% V0 L; j" m- i
  13.         u8 i,n;                    
    ' v) R: q& i: r
  14.         for(i=0;i<8;i++)  
    / y8 J9 l4 [) V2 q2 H
  15.         {  
    - B* m* @* e* F: T- H8 b) o8 `
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);7 F& s+ y* E  u: l5 t4 Z
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
    % f& e& O% ]* ]8 l
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    & `: S* |  \; x0 o! W; ~
  19.         }
    2 M  s3 z2 ^9 s0 D! t
  20. }- \- d( Y- Z! t1 U9 @+ _
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
    2 \/ Q$ t0 Z, y# V8 B
  22. {              : B/ O. ?, z6 w% v
  23.         unsigned char c=0,i=0;        7 E% ~; q4 m- `
  24.                 c=chr-' ';
    1 i4 ?0 W( x  w1 N* m
  25.                 if(x>Max_Column-1){x=0;y=y+2;}8 x+ n* l$ R& V1 ]; H% [
  26.                 if(Char_Size ==16)
    ' o$ u* e5 t+ q( n( Y
  27.                         {
    7 M" H* j4 q" A5 E1 o: k, P* D: n
  28.                         OLED_Set_Pos(x,y);        . K: B. S' J1 L8 Z/ M# I
  29.                         for(i=0;i<8;i++)
    / A. |  A0 B0 m( j4 K
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);0 M2 {2 f  g$ H  v0 b* k: h
  31.                         OLED_Set_Pos(x,y+1);
    6 x6 e& f# s( A  J
  32.                         for(i=0;i<8;i++)
    2 |% N, x; z1 U) w
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    6 I2 s! e/ V3 r, j
  34.                         }0 j. ]( M" l1 B2 T6 r/ x
  35.                         else {       
    : @7 o- s5 r0 M
  36.                                 OLED_Set_Pos(x,y);
    ) z; R$ V% I/ j* A" c
  37.                                 for(i=0;i<6;i++)9 t7 m5 D4 b5 S" G7 X! Y- X
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);               
    , q* \- E. {5 g- j) O! r# @) W
  39.                 }, n1 J1 y/ B- C5 s$ ]
  40. }8 ~, a/ m+ t; p7 s  `  p6 {
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)- K' S6 v0 Z2 t
  42. {                
    " w% g/ K- [2 Z7 {2 ]. l. B- w
  43.         u8 t,temp;, b1 R; A& ~" v! X8 C
  44.         u8 enshow=0;                                                  
    1 C2 n- [4 N/ t+ ~9 L: Y$ M0 P
  45.         for(t=0;t<len;t++)
    " C0 S7 U5 N2 @9 F
  46.         {
    - Y9 \4 n! h5 [; |+ U
  47.                 temp=(num/oled_pow(10,len-t-1))%10;
      J4 f3 j% y; D
  48.                 if(enshow==0&&t<(len-1))/ m' c6 H9 q! H7 |
  49.                 {
      F% N# w. b! ~" P9 C
  50.                         if(temp==0)* M) S( Y, W6 L* u& E& E& c6 p3 ^# _
  51.                         {6 Q7 Y# E2 C4 O& _+ g/ j6 Y: Q, Y& `
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    4 `9 O( d7 ]0 A3 [1 W8 y8 \: o" M
  53.                                 continue;
    % y9 Y3 K' Q! Q3 A/ R  a
  54.                         }else enshow=1;
    $ M: ^( z( X- N  Z7 }. B
  55.                           5 g: K% K$ ^6 i* J) ?8 K
  56.                 }
    6 e3 \6 E3 h# a+ k0 M! h) `" @# ?
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 7 e0 D8 {: L, U# k
  58.         }! M- D2 ?  h" t/ p5 Q8 V# L
  59. }
    # R+ H7 A6 w5 ~; |8 J, X. R: r# }
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size): f- G) Q1 a! E; J% ]; E
  61. {: s. W! m. T# u" ^
  62.         unsigned char j=0;
      H9 }) n8 m5 ^  b' l" g
  63.         while (chr[j]!='\0')
    + k* [% P  Z; b" m& E5 Q5 e, P4 j0 \
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);
    ! h/ n% s& P8 m1 f9 n
  65.                         x+=8;. |, Z) s4 i% D4 F8 I+ _
  66.                 if(x>120){x=0;y+=2;}% S- k8 K, C- R* R8 d5 b
  67.                         j++;
    . V3 h5 x0 W" [, r  `+ {
  68.         }  S3 Z) l; h9 t" h
  69. }' |8 V, Y* T  I, ]7 P& ?& m0 z" t6 `. L
  70. + o) B* H! M% U
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)$ Q' I+ @, p+ d4 R( q0 z
  72. {                                  
    . w% E  p- Y  i0 U9 y' K- ~
  73.         u8 t,adder=0;9 C2 P5 K: W+ i9 @
  74.         OLED_Set_Pos(x,y);       
    # y3 y2 H$ E' {. o7 M6 K" ]: E, R
  75.     for(t=0;t<16;t++)
      Y6 x! T( z# M$ I9 v
  76.                 {
    * G4 z9 U0 x8 [, k
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);5 W% l* ~: W  W7 `' G
  78.                                 adder+=1;
    3 |7 r; \, o2 l. u* W& Z% L
  79.      }        / Q0 J' q5 W1 L4 y& S- j0 e
  80.                 OLED_Set_Pos(x,y+1);       
    ; s) o  _$ [5 w" V: ~; u
  81.     for(t=0;t<16;t++)
    5 o5 Z6 C. w$ h" ?3 X& o6 a) l
  82.                         {          V" q+ b; E. l0 P  @" v
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);. ]0 ~4 g3 \$ y$ r1 e" a4 M- ]
  84.                                 adder+=1;
    ( M6 M& [8 O2 v4 U
  85.       }                                        ; L, y! W! A6 R2 R0 f) E( T' R8 `
  86. }: _4 [: S* T. J2 B& J+ T

  87. , \4 p1 i! _6 n; [3 I6 c
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])% R2 y' e0 x* @- l9 K0 g) V: n) A, T
  89. {         & H1 q7 G3 m6 u6 g
  90. unsigned int j=0;2 I, `1 e- Z( c
  91. unsigned char x,y;
    # h7 w1 a/ g* D: a+ e! ~
  92.   6 n2 e! g7 s5 y6 |2 W
  93.   if(y1%8==0) y=y1/8;      
    ' t  I$ C: k( _- s
  94.   else y=y1/8+1;% a  M, g+ T/ D4 W; R* ?
  95.         for(y=y0;y<y1;y++)# O) A% o2 [, Z8 l& D; q" i) d. X
  96.         {
    " u) \7 Z7 B" B
  97.                 OLED_Set_Pos(x0,y);
    4 T" b8 L( E" f% ]! d5 n
  98.     for(x=x0;x<x1;x++)
    - C( M2 u7 X5 s2 g, N! f
  99.             {      
    + ]  x; v# O7 u. [
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                   
    ' N4 [, F3 i9 `2 ?  E
  101.             }8 I2 u2 v" c! {: j
  102.         }
    7 Q+ F) k) G4 D9 d; n( @; K9 i; N3 T
  103. } * f& ~; I- w, @
  104. * T! I2 ~5 h0 f& n5 N/ f
  105. void OLED_Init(void)
    5 Y- Y' z, c! Y( b
  106. {         # k7 ~# V8 p5 u& w+ t
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    $ O+ s) G4 J: {
  108.        
    ! Q+ |# y/ S2 ?8 A1 U+ j
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                 ' F; U1 m: p: z; {* S+ f
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         " f% l1 R* {! G1 q7 R7 [
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
      F* T% h: p. b) p, u! g
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    4 {' T2 @9 o4 m0 q
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);           V8 k# I+ W) h, C0 A" C' I6 P
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);8 ?& t4 u* ?9 A, `/ I
  115. HAL_Delay(200);0 Y% P- L2 l9 e
  116. OLED_WR_Byte(0xAE,OLED_CMD);
    3 {" j! N4 [" u- Y4 E
  117. //display off
    . M7 b- O# f" W( c; n- ^
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address. S2 F, J2 _' f  i; O
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address3 k( A; q  p. g0 E/ {
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  / W# V. j' m2 k. \, d4 [. X
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address- Z8 |6 C; ?4 i- k$ u
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control
      J9 L6 q" y" i* U6 q( t
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   
    ' ~7 b+ B7 X: x; z, R8 D* s( k. |2 D; K
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 4 m: X. D' l/ H" [4 `$ K( U% x
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse) u6 G7 L3 D/ N& k$ |& v8 k# m8 @  C9 U, N
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    8 e+ w4 P6 Q5 ]5 L
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
    - j( |& h) Q/ v0 q) X" G
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction) m! r1 ]+ F" G; ^6 Y' V
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
    0 `3 p2 c- B% ]! n
  130.         OLED_WR_Byte(0x00,OLED_CMD);//
    * v: R- y% K$ }/ G5 H4 o" C
  131.         , S: h9 I* v1 I
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
    3 Q# ^3 u  c7 F' ~
  133.         OLED_WR_Byte(0x80,OLED_CMD);//
    + t. y* s# V  p2 o7 K- T# b
  134.        
    5 r6 @, K' H8 P/ M9 c, B
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off5 E' k) N1 D; r+ s/ t9 K
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    6 O$ s8 r8 M) t9 G6 v$ p1 ?" F
  137.         0 n" M% _. H8 d" m8 B; h7 b) Z
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period$ ^( J/ L* P( j+ Y
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//8 N7 _+ e# m8 N5 \" U3 l
  140.        
    ; V# u2 c; s4 ^+ L- L; }
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion7 Z. ?) B. e* j
  142.         OLED_WR_Byte(0x12,OLED_CMD);//2 n; U2 h4 Z  u1 G, n/ ~4 I
  143.         * |; F; b3 p" U$ s
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    # S6 z# `6 ?/ i8 P3 Q
  145.         OLED_WR_Byte(0x30,OLED_CMD);//! D/ G: s3 Z+ ^% J) i
  146.        
    ! O& |* X+ v% |8 J& j
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    , A% ^9 G; z  J, [7 F
  148.         OLED_WR_Byte(0x14,OLED_CMD);//% J& c" n; B$ A
  149.         " J- g1 a' H0 B. E5 i
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    % X5 s+ D$ v: r5 {8 Z
  151. }  
复制代码
  1. #ifndef __OLED_H- _, h. l" |( h) G) H* c
  2. #define __OLED_H                                   " h2 N+ |. H' |. ~6 m
  3. #include "stdlib.h"& @8 r  @5 T% _4 S# i
  4. #include "stm32g4xx_nucleo.h"
    ( F7 H! W: {7 K& v! @- r1 V
  5. #define OLED_MODE 02 u$ p9 {! L! n/ J
  6. #define SIZE 8: A8 ^$ F4 X  ~
  7. #define XLevelL                0x00
    9 Q% v/ @9 Z) v6 [1 d. G' m
  8. #define XLevelH                0x10
    & g3 }2 X' r' m" M
  9. #define Max_Column        1281 L: s  V$ t' U0 H8 \
  10. #define Max_Row                64# _( F" b7 b: O% a% a, k
  11. #define        Brightness        0xFF
    9 W; Q7 \+ g/ x7 u; \
  12. #define X_WIDTH         128
    ; t8 `! W! B7 ^8 y
  13. #define Y_WIDTH         64                                                              & O: w. f" H9 C" h/ J! \& ?, E
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK8 ^: Q4 o* n; O/ \% M) O
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
    8 M& A0 c. R7 [

  16. % \! ^; r0 \, H8 c/ t# D
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN, C4 J; _% Z& V* h! l. S6 _* ]  n
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
    4 G" o* o5 {, e# h% z

  19. 5 y" k: w4 v( R! p5 s
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES- ]% h/ F3 ^0 y1 Z
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
    4 P- e, _+ M6 w- s
  22.                      : ^1 e" b) S  M* [* Z8 P" C) u: L
  23. #define OLED_CMD  0
    . I2 @2 ~; b" _
  24. #define OLED_DATA 1+ {/ d* {+ A4 C5 K( W
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  1 R, @- k, n: I% i: L% Y8 E
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()9 D, S1 c! _4 K1 X% @/ _  m
  27. . f! Y& r* E- K- E" ?* H
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);    x, ^0 z9 F3 ]1 c( ^0 K
  29. void OLED_Display_On(void);
    5 `7 ^' I1 b: C% ]
  30. void OLED_Display_Off(void);                                                                                          / e) W1 L. f- D+ B
  31. void OLED_Init(void);
    2 u9 V* _8 A' L* S
  32. void OLED_Clear(void);
    + X4 {" ~/ p! {: [( D" u. M7 Q
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
    - X' O4 I2 d: A. E& d
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    . a( I2 ~+ f! U' T" F* [) i* P& \
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);" Y+ a9 |! E0 i8 x
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); 4 H1 |5 L/ x+ S4 J9 v/ a: s
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    + X, K3 z: u" h1 I0 u# z
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);; e3 l1 G& |# w. u0 g, P
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);  q7 s# J6 r, ?% X& n# ]$ q5 Q; s
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
    " a" J4 R( R4 W- }
  41. void Delay_50ms(unsigned int Del_50ms);
    : W6 j3 [8 ]  g' z. o
  42. void Delay_1ms(unsigned int Del_1ms);
    & E' a6 m* v. P' @1 X7 b" V
  43. void fill_picture(unsigned char fill_Data);
    " f/ ~! |1 |7 W0 t1 s4 X" O( u1 o2 p
  44. void Picture(void);
    ' a( ~; S! F, y. R
  45. void IIC_Start(void);3 z# u+ p4 t# d( m. W" U, z
  46. void IIC_Stop(void);
    . h9 h  q: H  s# ~0 N5 C
  47. void Write_IIC_Command(unsigned char IIC_Command);" n( P6 d" |1 K4 [
  48. void Write_IIC_Data(unsigned char IIC_Data);
    / }9 Z2 t. }. W0 U. {/ [
  49. void Write_IIC_Byte(unsigned char IIC_Byte);, r/ `: Z& H! E5 O3 i
  50. void Display_Battery_Level(void);& g$ _+ f) N4 @! p( D
  51. void IIC_Wait_Ack(void);
    0 Q; o& {" Q& E2 b
  52. #endif  
复制代码
  1. int main(void)6 Q- i& G, i* y! @, O# N
  2. {- k1 a) c0 d5 t0 e0 g% v
  3.         HAL_Init();( p1 h1 v  e3 m" l2 @$ D! X3 E4 _
  4. " K) [3 N1 b# e2 r+ Q, u% o
  5.         OLED_Init();
    / w; d. V; X1 ^2 G0 `. s' ~
  6.         OLED_Clear();  
    ! a0 b, p) b, n4 a
  7.         SystemClock_Config();
    7 ^8 v. b0 Q/ j( z0 M/ T
  8. + y9 K$ Z% B9 w( u
  9.         BSP_LED_Init(LED2);% x% {* h6 H! H8 A4 r& J0 O' B3 P
  10.         EXTI15_10_IRQHandler_Config();, E  q6 _: l! c/ R/ n4 w3 D; l
  11. . v) X1 y9 |7 r" v
  12.                while(1) 6 t2 h( p1 r  p$ e+ k
  13.         {6 k/ V* @3 w! N5 f9 N
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);
    2 t: b6 l+ ~- e
  15.                         OLED_ShowCHinese(45,0,2);//7 v  e) p! @* I' Y2 W! z
  16.                         OLED_ShowCHinese(63,0,3);//
    4 j* W6 L9 }6 h
  17.                         OLED_ShowCHinese(81,0,4);//
    6 V+ Y  e# j5 l
  18.                         OLED_ShowCHinese(99,0,5);//
    9 v! Q' d. V+ Y$ T% G
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
    6 Z+ G$ i; @4 Q1 y4 z& E0 \
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
    9 \' u. w; x5 E; Q7 r
  21.         }          
    1 U8 q; w2 C# w* g" Z8 Z* u
  22. }- S. e# ~; w. r( W* M( {  G: {) g
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg / Q/ U9 S, {- P4 @4 w
6 x% [; M. p$ M

. K' B# R( y0 t8 I+ g* x
赞 收藏 评论1 发布时间:2019-10-6 17:42

举报

1个回答
kongxiangtong28 回答时间:2019-11-16 12:04:22
您好,能给发一下G4的pack吗?我在官网下载老是说有错误,而且速度很慢。。。谢谢

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版