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

【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模块,今天拿出来来调试调试这个模块。
1 b1 a, [0 J  E4 Y      模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
8 k) x4 V8 {% |4 Y+ }& g       原理图.png 0 M7 `* m( ]+ B, Y
    部分代码如下:# ?, Y* l. e% R# z
% [8 n: C3 |0 G3 M) _7 }
  1. void IIC_Start()9 Z4 o+ M- U4 W& w- R
  2. {. Q# u: |: P+ p, Y$ @1 w0 Y

  3. $ @. `/ ?0 ]' @+ X8 \1 A6 u( }$ _; D
  4.         OLED_SCLK_Set() ;
    0 F5 |* `1 F& h  s6 H: r
  5.         OLED_SDIN_Set();; E! O9 [. y  x; x4 z6 v5 p% A1 H8 U
  6.         OLED_SDIN_Clr();& d0 M" X% S2 o7 b
  7.         OLED_SCLK_Clr();  J: r+ }! B- H$ r  ^
  8. }
    1 I5 ^- h) u9 Y# }0 U+ i+ j
  9. void IIC_Stop(). [1 A5 `/ s) G+ p0 r1 h! U
  10. {2 t8 Y( L( m9 e# t2 d1 N0 y+ }
  11.         OLED_SCLK_Set() ;' m$ ^6 A' I6 k( {
  12.         OLED_SDIN_Clr();
    8 s6 o+ D/ U1 R; U& T6 S
  13.         OLED_SDIN_Set();
    : c  }# v6 {) K1 b
  14. }' v; t; y) X* \( F6 ]
  15. void IIC_Wait_Ack()6 m4 s. f! l% ^+ T, \9 n8 W' Y
  16. {
    " j) G: H5 l7 z6 T+ a3 m0 i. e6 m
  17.             OLED_SCLK_Set() ;, x/ w6 |2 H  ?! ]+ c( z* s
  18.         OLED_SCLK_Clr();
    % e& h" l2 B! P% A& X0 e" S& U6 S
  19. }
    7 ]0 N( g; u9 a, N, d  C1 z
  20. void Write_IIC_Byte(unsigned char IIC_Byte)
      a7 ~: W' M/ U/ Z# V: U5 M& v
  21. {
    % ^6 d3 [/ @' a3 z- u8 ?
  22.         unsigned char i;4 C0 T# X' w' H; Y6 `9 C8 m9 v
  23.         unsigned char m,da;. g+ C: F2 z& L8 Y( \* Y' ^" _
  24.         da=IIC_Byte;( m4 W! ^  g0 f* L: M% y
  25.         OLED_SCLK_Clr();0 V8 n. a9 I5 R3 f2 m7 ?4 _/ u1 {
  26.         for(i=0;i<8;i++)               
    2 p8 J. X5 d4 z" L4 N: y+ U0 E- `
  27.         {
    0 i: C( k  N3 R% M1 Y7 ^, N- V
  28.                         m=da;/ e" b+ e0 e/ }# J' d5 G
  29.                 m=m&0x80;$ r4 }3 l6 x& X: B) p7 M
  30.                 if(m==0x80)+ E8 Z# A7 D- G. [$ A" s( b7 [" ^% M
  31.                 {OLED_SDIN_Set();}& j, E$ l& e2 g* m5 V8 ^- T+ {" I
  32.                 else OLED_SDIN_Clr();
    ! j/ Q% s0 S2 v/ R7 V
  33.                         da=da<<1;
    + V7 C  z6 p+ D. Y
  34.                 OLED_SCLK_Set();
    # _& [  U. x4 X& e" ~4 D
  35.                 OLED_SCLK_Clr();
    ( v& w; C9 O" o- @) L
  36.                 }% `" H( h: o7 q" v2 r' P
  37. }
    ! \, {4 @, ~; s( |7 j1 D
  38. void Write_IIC_Command(unsigned char IIC_Command)
    1 Y6 Q! k" j9 |* u) C+ K+ b: f
  39. {0 k( t% N3 B/ |
  40.    IIC_Start();
    , c' J0 |  M2 f: S
  41.    Write_IIC_Byte(0x78); * Q8 f/ H, f% o. H, m
  42.         IIC_Wait_Ack();       
    $ h; V+ O2 }! I& O% N$ x3 {
  43.    Write_IIC_Byte(0x00);       
    ! E8 i& _/ f/ d* W
  44.         IIC_Wait_Ack();        . w2 ~" a, ]) V% ]( Y; S7 Y* G3 z
  45.    Write_IIC_Byte(IIC_Command);
    , q6 B4 i, B; _, C3 m9 O' C
  46.         IIC_Wait_Ack();        & o' X. u+ v2 B, [. W1 |1 }  W
  47.         IIC_Stop();0 i+ Z, X; V. ]6 l: [1 c: e
  48. }
    ( Z. w. @- s5 Y, Q# m
  49. void Write_IIC_Data(unsigned char IIC_Data)
    # Y+ {, F4 T" X+ u2 B
  50. {
    3 V2 N! P' q. [+ `4 b
  51.    IIC_Start();- n8 Z: I- X7 W  t7 V( n0 }/ i
  52.    Write_IIC_Byte(0x78);' G1 J6 c1 H- Z8 S1 K
  53.         IIC_Wait_Ack();       
    ' E9 p0 a* Z- E
  54.         Write_IIC_Byte(0x40);
    . ~- Y( w: J# c! a( g* D+ X
  55.         IIC_Wait_Ack();       
    " ?" M* z- S$ Y* W
  56.         Write_IIC_Byte(IIC_Data);
    3 w4 O) S+ f9 O4 F; V
  57.         IIC_Wait_Ack();       
    . h, ^" z- p8 B$ V6 v9 a% `
  58.         IIC_Stop();
    & n2 w  h. m# ^1 K0 D5 ?
  59. }
    # }5 o- e) h- a  q
  60. void OLED_WR_Byte(unsigned dat,unsigned cmd)# `6 ~5 Q% ^$ `4 c
  61. {
    2 N9 X# ~# O  r, B$ S
  62.   if(cmd)- r& ]8 [- |/ S3 H. |. `1 q! e
  63.   {# b5 q4 B" |# P2 Y. T* y" C3 |. F
  64.        Write_IIC_Data(dat);
      K+ {0 l6 Q8 N: c* E0 W
  65.    }
    % c1 c2 m) C9 T+ s9 _' U2 R( V
  66.    else
    9 ]9 g  d  Z7 v
  67.    {; Z* W  a, |- R" d( P& v3 k# u
  68.         Write_IIC_Command(dat);       
    ; k4 q+ o* O5 z4 s! @  g4 J
  69.     }
    % `8 |& c9 f# u
  70. }
    & V2 V5 Y0 |" j1 Z/ L& {/ \
  71. void OLED_Display_On(void)9 `& M* q. `- W4 G4 ?( z. B  a) F
  72. {
    ! X+ f' `5 i# ?* g+ a
  73.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC7 t2 J/ d1 d4 r8 q7 c
  74.         OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON: N3 c3 p- M* v) n
  75.         OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON
    $ J1 y+ H0 P* X; _+ Z# _1 u' ^
  76. }   
    ! U5 c; {: D$ `: U; H% R% r" G) `
  77. void OLED_Display_Off(void)& K  @8 B/ o; e, `) g+ M: j$ Q& Z/ Z5 @
  78. {# [5 `  s# O% E; j) T
  79.         OLED_WR_Byte(0X8D,OLED_CMD);  //SET DCDC5 c# h: W7 B3 O
  80.         OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF7 ~! s3 l3 f0 R( d$ k9 s
  81.         OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF
    " W9 S) o% P- O. p
  82. }                                            
复制代码
  1. void OLED_Clear(void)  
    + a: Z$ m- n2 E9 k8 Y
  2. {  
    : I' ]5 u3 O$ f2 d8 w. ^& f& I$ u
  3.         u8 i,n;                    
    3 i* w: I6 V" R# N
  4.         for(i=0;i<8;i++)  
    - p" _8 U5 |7 E# Q% Z) E+ w
  5.         {  
    # R) C; X- B2 z$ @
  6.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    5 b3 A6 |( Z6 ]/ @3 \
  7.                 OLED_WR_Byte (0x00,OLED_CMD);5 q* w+ a& `' n5 w6 k/ g' l, K
  8.                 OLED_WR_Byte (0x10,OLED_CMD);        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); / i7 w) T6 r2 h
  9.         }
    5 f* H8 @$ h+ x& m( U% x- N3 w! \
  10. }2 u4 X; ^4 c# O1 e' C; G
  11. void OLED_On(void)  
    + ^, i; d: m% u" p
  12. {  
    ! J( m& W) a$ @0 n7 ]7 p
  13.         u8 i,n;                    2 [& b; f: V8 ~# R; n
  14.         for(i=0;i<8;i++)  
    * K* K' Z8 O1 y; v
  15.         {  
    / F4 N& |& G9 [1 v- _3 i
  16.                 OLED_WR_Byte (0xb0+i,OLED_CMD);
    ' k  P- y, f9 H  P; Y
  17.                 OLED_WR_Byte (0x00,OLED_CMD);
    ' `6 Q5 y+ Y5 E) x3 U- L
  18.                 OLED_WR_Byte (0x10,OLED_CMD);                for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
    - b$ m. _7 C% N& M
  19.         }
    ( S2 v; s) {7 E* }
  20. }
    6 _% y& Q5 ?& g2 L: j
  21. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)- [4 V3 V$ {, n- C( G; l
  22. {              1 E  |4 o  q4 @# ^8 L+ J! Y6 k4 c
  23.         unsigned char c=0,i=0;          g: N! s! L) A
  24.                 c=chr-' ';# d% P% T8 K7 J; H2 k' ]
  25.                 if(x>Max_Column-1){x=0;y=y+2;}9 ?& r8 y# V6 }- g% f! R" _+ G( @- F5 G
  26.                 if(Char_Size ==16)) [! L8 Z; i1 [2 K3 Q! A
  27.                         {1 T! u# o) I/ d" l( R! G
  28.                         OLED_Set_Pos(x,y);       
    1 _7 O1 @' Y0 S9 N- e
  29.                         for(i=0;i<8;i++)6 s$ T3 d/ t. T/ [: m
  30.                         OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
    ) ?! ?3 q- g4 C' T( A+ c. P
  31.                         OLED_Set_Pos(x,y+1);" z: i' d! b  ?) ~
  32.                         for(i=0;i<8;i++)
    ! c' w) }* T* D( O0 A7 b
  33.                         OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
    $ ]/ |/ J& b+ {3 e, Z
  34.                         }
    * F0 C4 c0 e- m5 H5 B# @% c) Y
  35.                         else {       
    & l  y* h& Q" L4 p2 T
  36.                                 OLED_Set_Pos(x,y);
    0 k$ ~# c) I/ Y1 B3 ~
  37.                                 for(i=0;i<6;i++)) D) v! a, n: P$ Z; B
  38.                                 OLED_WR_Byte(F6x8[c][i],OLED_DATA);                9 T& N/ ?. C& l
  39.                 }
    0 s1 [0 N* ~3 ?' K7 v
  40. }3 X, F, B9 g+ R9 R& h8 m" A
  41. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
      c9 Z& b9 ]* e+ w- @
  42. {                
    $ X3 }# q1 ?0 B# b! ]
  43.         u8 t,temp;
    $ M; t( _/ }: @$ z* c9 a' @
  44.         u8 enshow=0;                                                   4 d' X) o( d( g; q1 b
  45.         for(t=0;t<len;t++)
    7 t& c9 k, {: ^: {' a: a! f
  46.         {
    ) ?3 r/ o- {9 y, I( Q* G; m
  47.                 temp=(num/oled_pow(10,len-t-1))%10;4 V2 w  |" L( }! K( p/ T
  48.                 if(enshow==0&&t<(len-1))% ]& _: F" B! D
  49.                 {
    & i* D$ g0 V# L0 L5 K; a& A% l' T
  50.                         if(temp==0)
    ; B( w- f6 O8 I0 C$ r- G; J
  51.                         {
    $ \' }# y- n* e9 v/ ?; _: H8 H
  52.                                 OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
    ; N5 T7 D  D' N8 Y% q- ]
  53.                                 continue;
    + L  L- _8 h- W$ ^, O
  54.                         }else enshow=1; 7 [2 J5 r  z) c9 F+ r
  55.                           
      M) X/ |  v5 {, G1 {
  56.                 }6 Z$ t( U( ^, ~- z
  57.                  OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
    4 |- p$ K3 J! I" [$ v$ v
  58.         }
    ( b- |8 j9 l  q$ W" U  ]
  59. }
    . }% n6 q% O: H  X; O5 c
  60. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)1 w) h7 ^0 G- g8 f3 T+ g5 I0 e
  61. {. U3 x/ n- ~9 [
  62.         unsigned char j=0;
    # T9 B$ X5 e6 x/ u
  63.         while (chr[j]!='\0')6 B: i2 D2 F  _: s, }) a. u' c
  64.         {                OLED_ShowChar(x,y,chr[j],Char_Size);9 S0 n0 \7 N# ~4 t0 O
  65.                         x+=8;
    ( C) I: ?2 h  m! K2 W& L4 k
  66.                 if(x>120){x=0;y+=2;}
    % {) z( _' N2 Y# U4 d$ h
  67.                         j++;
    ' l3 c# m5 ^' Y9 ]
  68.         }5 S# f: b; g4 a- M: U) j
  69. }3 h! _9 C/ l6 g0 n

  70. % \# _7 b9 @, X4 }4 S3 h# g
  71. void OLED_ShowCHinese(u8 x,u8 y,u8 no)) b+ A' t# H* O7 ]  L# d
  72. {                                  # h" e( G5 i. k: q+ @7 N4 H
  73.         u8 t,adder=0;
    1 ^& B/ Q( k' G0 D# {
  74.         OLED_Set_Pos(x,y);        3 {6 c6 y7 l- e5 D( v
  75.     for(t=0;t<16;t++)
    ! r# w1 C1 g2 B
  76.                 {
    * b. f, U8 X3 `2 y$ Q- f8 k
  77.                                 OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);& |* I0 _" P$ O$ m
  78.                                 adder+=1;; S. K3 F, x$ F, @) v
  79.      }        0 P/ S3 p: |( B) w
  80.                 OLED_Set_Pos(x,y+1);        , i. j6 |8 t, D; q9 \4 J$ Y$ d/ y
  81.     for(t=0;t<16;t++)' s8 `$ D' o9 @8 e) j( [) R
  82.                         {       
    ; L( B$ t6 V5 F) [
  83.                                 OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);; m5 ?/ H5 I# x, }
  84.                                 adder+=1;
      x/ N. i$ e* l
  85.       }                                       
    ; Q" E* o, Y% _
  86. }% }# e. ?: X6 \

  87. ( ~4 |3 ]: W) _. E+ w$ I% Y
  88. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])2 m6 u1 N2 T' O- {' o: f* T( {
  89. {         * y7 e: x$ ~8 X) V  ^
  90. unsigned int j=0;
    ! l' z8 R; N' P. K* j' x
  91. unsigned char x,y;. Z9 T+ q. o+ S3 c- y- M/ ~' r0 r
  92.   
    ) N2 d. n4 Q# f5 B9 O# w
  93.   if(y1%8==0) y=y1/8;      
    + u* F" y- B: Z, X! i; s
  94.   else y=y1/8+1;
    7 u/ X! `9 ]" P, g, }
  95.         for(y=y0;y<y1;y++)* b# e) ]% E$ \3 @0 T/ b% o
  96.         {
    ! `; G4 \; c" |( A/ s3 N6 H' b% Z
  97.                 OLED_Set_Pos(x0,y);$ r/ ]8 `5 d4 o+ U
  98.     for(x=x0;x<x1;x++)
    + ?% P6 y' l- H6 t
  99.             {      
    % K4 A6 n$ L2 C
  100.                     OLED_WR_Byte(BMP[j++],OLED_DATA);                    # P$ s" `# x$ y5 `, D% D
  101.             }
    5 G# x4 o8 L9 _) r
  102.         }
    % `. a& A* o! G6 f- H& }/ K
  103. }
    - N- R: F( P/ c! @
  104. 7 k: _+ F) k5 u2 z
  105. void OLED_Init(void)
    3 [1 V9 G5 `: H, Z0 _- S
  106. {        
    % ~( v! n' i. q; s
  107.         GPIO_InitTypeDef  GPIO_InitStructure;
    8 \* ~- X5 M, @7 Y* _: ]
  108.         ! {: o1 T: E2 }: _' m7 Q7 Q
  109.         OLED_GPIO_CLK_ENABLE();                                                                                                                
    . g# c3 f9 D5 Y0 ~* i2 y; h- t
  110.         GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;         
    ! c# I2 {% w& }8 f0 C) X
  111.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;0 c: G( K  k; A! o
  112.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;& }' V* Z+ I3 b% g, |# [9 A. ^
  113.         HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);         1 S% S. x. C/ X6 |6 B( ]/ }4 o
  114. HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
    6 Z; p/ P0 Z1 G/ W. g& e
  115. HAL_Delay(200);0 k0 r& W+ C: [0 n) I
  116. OLED_WR_Byte(0xAE,OLED_CMD);- Q3 O& K' F( y- }
  117. //display off2 f" ^. A# V) Q2 u
  118.         OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
    7 x: E- b0 C" [! @
  119.         OLED_WR_Byte(0x10,OLED_CMD);//---set high column address( Q) @% L( s5 ]/ ?
  120.         OLED_WR_Byte(0x40,OLED_CMD);//--set start line address  1 m. Q( Y1 d' j+ w' ?
  121.         OLED_WR_Byte(0xB0,OLED_CMD);//--set page address. k0 u8 H0 H; `! L% A5 G- V8 x) ^
  122.         OLED_WR_Byte(0x81,OLED_CMD); // contract control2 w0 Q2 Z0 r% o# P. M
  123.         OLED_WR_Byte(0xFF,OLED_CMD);//--128   ) x% @$ L+ I' L% Z! n
  124.         OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 0 C& s4 o/ W8 a/ L3 B
  125.         OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse+ I) z& u2 V& Y  a' e+ ?- w
  126.         OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
    & d# M# }) u$ Y
  127.         OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty3 n6 u1 J/ Q0 N) [
  128.         OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction4 C  R+ [& L; w5 y  @9 H9 P. |
  129.         OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset" S7 ]+ i; h* m
  130.         OLED_WR_Byte(0x00,OLED_CMD);//
    * C/ l8 b8 O# o
  131.        
    % u; _/ H7 R8 `) J5 ?( E/ Z
  132.         OLED_WR_Byte(0xD5,OLED_CMD);//set osc division; f. ?9 i& I- ^1 ~6 j
  133.         OLED_WR_Byte(0x80,OLED_CMD);/// R  g6 q( E) p7 s4 M5 m( g4 e
  134.        
    9 X! R0 o0 d4 d' q5 C
  135.         OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
    , ]8 w4 l6 K4 |6 F
  136.         OLED_WR_Byte(0x05,OLED_CMD);//
    3 }2 T  }9 i8 X( k& H
  137.         0 }) s# X& y* I: O
  138.         OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period4 E7 Q3 G/ A' g7 U( D- p5 |$ ?
  139.         OLED_WR_Byte(0xF1,OLED_CMD);//
    ' s7 E1 o3 S( s+ G( v7 s
  140.         ( O6 F. j6 y: C/ ~
  141.         OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion$ j' H% ]& H" V; M
  142.         OLED_WR_Byte(0x12,OLED_CMD);//3 `* U' s) W3 u5 A$ e3 \% F; Q: {
  143.         / L7 o- N- R* b7 X' x! W- z
  144.         OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
    + T$ c7 L  ]; t% w# X) f0 R
  145.         OLED_WR_Byte(0x30,OLED_CMD);//
      q5 Y- [. k5 L! E2 J+ j
  146.        
    . g7 e+ l- k2 s
  147.         OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
    / z& r$ {6 J' y. H1 J% i) j
  148.         OLED_WR_Byte(0x14,OLED_CMD);//* Q2 j1 A- \& c9 ?) m
  149.         , Q  `, m- a+ n. I
  150.         OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
    ' L2 V: C: b, r) B# i
  151. }  
复制代码
  1. #ifndef __OLED_H: m, s' x0 Z: Y# k5 e  M! K! K9 x1 l
  2. #define __OLED_H                                   
    ' p. s$ ?0 H- r1 v# |
  3. #include "stdlib.h"
      a: ?0 g$ b+ w4 i
  4. #include "stm32g4xx_nucleo.h"
    $ ^- L3 F1 `% x& w$ t( K& j7 }
  5. #define OLED_MODE 00 S2 o- f' _" r1 p/ V* s
  6. #define SIZE 82 M: ]" m) b4 S- M
  7. #define XLevelL                0x00
    / |% W( m6 D) w7 L2 l& l2 H5 N
  8. #define XLevelH                0x10/ p& q& m6 r( ^5 e" ^  S% T0 P
  9. #define Max_Column        1281 `" X* x; u* T- h8 r  a
  10. #define Max_Row                64( [& g1 B  Q  ?/ N
  11. #define        Brightness        0xFF
    1 M3 _0 E0 v# [! M- ]
  12. #define X_WIDTH         128, C6 _, L: ^; @8 w! u' t( F
  13. #define Y_WIDTH         64                                                              
    9 ~, y& t* K* a2 w" `
  14. #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK  K: j5 [( k* B3 P
  15. #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)# `& }. `! K$ j$ i7 o/ N# z

  16. ; x2 w( P+ b  [; Z" l( z
  17. #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN! g1 g  q1 Y# T: m( d/ f+ ^; z2 _) Q
  18. #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)% j1 L( y% w- G: t4 T! B# z. Y

  19. 5 G# b0 x( d9 B
  20. #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ X) q& ?3 t, ^7 ^' |' v1 a5 Z
  21. #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)5 Y, N" E2 M: F/ D3 a, }# X3 x
  22.                      
    8 s" x( c* v5 y6 W2 |5 c* \) M) b+ ~
  23. #define OLED_CMD  0
    . [7 n2 R. \( `" R8 M: D+ R$ E4 X% L
  24. #define OLED_DATA 1
    . H5 T- `6 q: P) T4 _! i
  25. #define OLED_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOB_CLK_ENABLE()  + j- E3 q. ^- Q
  26. #define OLED_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOB_CLK_DISABLE()
    9 C+ ~) i5 d% m, y& n! o
  27. 3 i4 R* |2 F+ Y2 J
  28. void OLED_WR_Byte(unsigned dat,unsigned cmd);  
    & }. K- G# q! w
  29. void OLED_Display_On(void);( e* [+ D0 M" ^* j6 O! d5 Y
  30. void OLED_Display_Off(void);                                                                                          
    $ s6 G2 c2 C/ U
  31. void OLED_Init(void);
    & L1 I1 f5 T0 D% t
  32. void OLED_Clear(void);
    + L' x% L& ?' H4 a7 f! D' |* |
  33. void OLED_DrawPoint(u8 x,u8 y,u8 t);
    * [9 x) Z( N7 j7 `! S1 }. t, D6 \
  34. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
    # }$ r4 e; T0 Q& M" x% q( ~
  35. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
    2 N5 F5 j' {0 ~& B! g" @. Z/ e2 w. m
  36. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); # b# t* {1 p; d+ F6 {3 w2 F
  37. void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
    . T# f2 u$ }3 X7 s6 f
  38. void OLED_Set_Pos(unsigned char x, unsigned char y);$ a# o5 y7 L# W0 G
  39. void OLED_ShowCHinese(u8 x,u8 y,u8 no);
    0 R& Y) b- X, T7 ^' U9 ^* e  P( _
  40. void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
      c' p6 {9 A2 A& r( b3 |2 D
  41. void Delay_50ms(unsigned int Del_50ms);
    5 b6 c. }) `5 P- x" N
  42. void Delay_1ms(unsigned int Del_1ms);  N2 K& Q1 b" C  F9 u
  43. void fill_picture(unsigned char fill_Data);
    & G* N. D% }7 `+ R  S* Q+ a
  44. void Picture(void);$ c0 ~. v* u1 ]7 j
  45. void IIC_Start(void);
    0 C& i! {2 k+ N- G5 }! q5 }
  46. void IIC_Stop(void);
    & F0 z# p9 V* `( h2 j
  47. void Write_IIC_Command(unsigned char IIC_Command);
    " K: z& W/ h- h& J" p2 h0 S! I
  48. void Write_IIC_Data(unsigned char IIC_Data);
    ; ~3 E/ Z6 Q6 `5 d
  49. void Write_IIC_Byte(unsigned char IIC_Byte);
    . f* j; Q/ T" f% e! f
  50. void Display_Battery_Level(void);* J+ D+ n* P: W5 A6 q
  51. void IIC_Wait_Ack(void);
    - l) V& l) f* \
  52. #endif  
复制代码
  1. int main(void)
    0 ]  Y5 h; a2 d
  2. {0 B+ C& q$ u5 U1 C; T
  3.         HAL_Init();$ W9 Z7 z1 q. _

  4. $ C! o$ z- p4 e. i/ X4 o
  5.         OLED_Init();1 `5 m( ]' F/ b0 h8 y8 Z
  6.         OLED_Clear();  2 m* t0 \3 }  F" i! B
  7.         SystemClock_Config();
    % x9 l# O: k8 R! w. m! f

  8. 0 N1 x0 ~3 V! L' ?' a$ E* {5 R
  9.         BSP_LED_Init(LED2);
    3 o3 d: A# O& C, J, l, S. e
  10.         EXTI15_10_IRQHandler_Config();( a; Q- q9 Y5 p3 w5 m; ]4 @) p

  11. - _5 k% W5 V2 N+ M3 L
  12.                while(1) 3 Z# }( B8 k$ }# x+ T4 r# o& K2 _$ e  s
  13.         {
    ) n' B6 v) ~- O) i) W- M/ m. `
  14.          OLED_ShowString(0,0,(unsigned char *)"STM32",16);& N, n/ L0 G; S# I& L3 D  ^9 R5 w
  15.                         OLED_ShowCHinese(45,0,2);//. q9 W2 ]9 j1 \/ `+ d9 G( W, r
  16.                         OLED_ShowCHinese(63,0,3);//) c7 H" \/ N4 ~) C( s& g- P
  17.                         OLED_ShowCHinese(81,0,4);//
    0 g; K# b( I$ e7 C1 ~& X
  18.                         OLED_ShowCHinese(99,0,5);//
    # {- r- z, y8 E" N- K% u
  19.                         OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
    7 t3 r3 z* D* ]- {, V
  20.                         OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);0 n; s2 y6 f+ _
  21.         }          
    1 a9 \2 x$ M! O
  22. }$ k  q! e. b9 S0 o! a
复制代码
   编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。    20191006.jpg 9 [: z$ I4 L; \4 k- R  A, }
% O' y; d" l9 d& x7 x/ m
2 K5 S" q) i! n9 l2 R9 u" J- u
收藏 评论1 发布时间:2019-10-6 17:42

举报

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