国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。$ i/ F3 Z2 d' Q# i- [: J
模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
9 \, o5 Y1 V* a9 K" }/ V
/ u# Q; F) j" w+ P# Q+ @# e! z 部分代码如下:* r" g d B d/ g
8 ]# G7 l: h- o. C
- void IIC_Start()
# p. h9 |! v# e4 p4 J3 ^3 X - {& j2 o _ t- |! d3 ~
: m) P7 F$ f7 O; u3 ^1 \( x- OLED_SCLK_Set() ;
- n) X- o5 b8 e" o. i! p - OLED_SDIN_Set();7 h0 `+ R- Z, H9 m6 J
- OLED_SDIN_Clr();% P- }+ A, o- n
- OLED_SCLK_Clr();8 J. }+ N u2 E
- }
" c. q# b/ \ f - void IIC_Stop()* W Y ]4 c8 b/ W: D
- {5 K; N, w/ ~9 a& G$ ` S+ P
- OLED_SCLK_Set() ;
" _9 K) P; p5 c0 n2 P# [, F - OLED_SDIN_Clr();0 Q+ [' C2 n% c" @
- OLED_SDIN_Set();. K$ {( E4 W1 B$ d: w
- }
7 G$ a' k# b( o. T8 H - void IIC_Wait_Ack()
: g' w) x; F0 d) Q1 ]# E. o* k5 R - {
7 m; C' u4 |- {, P Y# u: y- L3 z - OLED_SCLK_Set() ;5 H8 y% Q. r7 f$ y! q) o3 w
- OLED_SCLK_Clr();6 z# e, b- Z* Z: R/ @3 h
- }0 V! H/ y, h1 ]1 Y8 P, _+ J+ T" ^
- void Write_IIC_Byte(unsigned char IIC_Byte)
9 e) N% ~3 e6 j# P ?" k - {& L7 S/ }7 _' R2 f+ s6 K
- unsigned char i;
4 \. y' i# `0 L! y9 s5 J - unsigned char m,da;
+ M7 s w! c2 I5 R0 V7 }% V+ f - da=IIC_Byte;0 q% Q; a2 N9 p$ H
- OLED_SCLK_Clr();- w. Y! [9 h% n; T- d3 _0 m9 O+ R
- for(i=0;i<8;i++)
7 d6 d" S& p( ~6 q# k$ F - {
; x3 o: m6 P$ h9 [, L - m=da;
) z4 `/ L5 e$ _# W4 J% I# W - m=m&0x80;
$ a! B. E3 r2 f+ s - if(m==0x80)
2 S9 n; P% I+ R - {OLED_SDIN_Set();}
( h3 N" w/ E' I; h - else OLED_SDIN_Clr();
% C, D% j+ u2 h' [ - da=da<<1;! M- {5 `% O1 g( R+ |
- OLED_SCLK_Set();
9 u( Y2 c' t, M4 S5 z5 i4 x - OLED_SCLK_Clr();
( F: I* ?8 k) B1 k; @1 P% W8 }3 W - }
9 V9 C4 W3 I1 T0 N- O' Q - }7 \% l6 n( J7 z4 G
- void Write_IIC_Command(unsigned char IIC_Command)
5 O9 O9 Y4 B% @8 a - {
8 P9 G5 C7 X0 |: [. [( ]# N( `$ `, u* D - IIC_Start();) O) @% B6 a* I6 `9 |, ]( \( `
- Write_IIC_Byte(0x78);
( u" x; r* l4 m - IIC_Wait_Ack(); ) b1 P! r0 Z; Y! Y7 i: Q! [
- Write_IIC_Byte(0x00);
|6 Z/ [/ h0 P0 w - IIC_Wait_Ack();
" q2 ~+ p2 o& N" q9 v - Write_IIC_Byte(IIC_Command);
. B- x1 @1 S" A7 A3 y$ R7 N2 g! E0 P - IIC_Wait_Ack(); " I; O' ~% v% f& F6 P% I( V2 u
- IIC_Stop();; h( D4 ]$ j; t. Z3 r) @$ U; n
- }7 C- D7 x, w8 L! f4 A5 w# [
- void Write_IIC_Data(unsigned char IIC_Data)
8 O; B W6 d N; ] - {
- Y6 z* ?' b* E7 v - IIC_Start();
1 ]" L( B) Z# G# t$ B8 M, T - Write_IIC_Byte(0x78);
8 D$ `3 o) W3 {8 h - IIC_Wait_Ack();
7 q8 D( c$ |% G - Write_IIC_Byte(0x40);
$ \! I% S! z) k, K' W - IIC_Wait_Ack();
3 b! m6 S, p) F6 {& C# x, a3 D$ {/ ? - Write_IIC_Byte(IIC_Data);' m/ t: w; z: D# s! e9 w# l
- IIC_Wait_Ack();
" m/ m* w$ x5 L" x& D, g( i - IIC_Stop();
4 U) b( l4 |5 t+ O( [( ?8 x - }
1 A" O9 ~( C' |2 X, V# a# N - void OLED_WR_Byte(unsigned dat,unsigned cmd)
( E7 ^8 R2 ]4 R U$ h - {+ Z5 _, u" O2 a) |5 r
- if(cmd)
9 l. f9 Z2 Y9 D" P; m4 @& { - { `/ B, a- C$ E% Y: q& A
- Write_IIC_Data(dat);
8 w) E* d2 L, {( s$ y, a: s; g. J - }9 }$ ]$ c4 Z/ Z4 ]- S# v
- else( p. w- X: R" n, T0 \
- {
. ]% e- @+ x/ M, U" S - Write_IIC_Command(dat); 0 F! e* F$ q4 u; F9 B
- }0 L! s4 P6 O! B
- }
) G1 N% N c( ]7 k5 f3 h - void OLED_Display_On(void)
% T5 e5 x# ^/ m. b" u - {: p6 J5 c( b, C" f. P! { D
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC! l# n: z' E. k5 @( Y
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
( m. S$ ], o C; Q" h - OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
& V4 b) ^. R4 w6 u - }
3 t& n# Q+ |$ V2 i7 E - void OLED_Display_Off(void)! F2 l' l$ R( y& s( y5 w7 F1 E# F
- {; ] x O* b) o& M& w2 W U, j
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC* u/ N6 q$ I, Y9 K! o& _0 N
- OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF( c9 d+ k# g( J% [* h7 \
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
$ m+ ?8 H. o' @5 G - }
复制代码- void OLED_Clear(void)
) z" X2 w+ ]% j9 N4 S/ D - { ' J" D+ a7 V0 Y4 {
- u8 i,n; / X; l( Z+ e1 k: B% ?$ ~0 ^
- for(i=0;i<8;i++) ! K9 o9 B/ U# \6 B1 c. E
- { 3 \: ^# ]+ }# G: k
- OLED_WR_Byte (0xb0+i,OLED_CMD);8 `! Z9 T, J: T5 D" w9 }" O
- OLED_WR_Byte (0x00,OLED_CMD);' l) z& p" t$ h5 R1 a" |1 r
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
1 m2 r. R& h; |* {1 }5 z - } + U! O/ {& i% }8 L2 G
- }
2 [% X9 x) A' F. A9 ~ - void OLED_On(void) - \1 ]$ ]. O* g
- { ^2 s7 E6 y2 G2 F. w2 l
- u8 i,n; 5 p& k& ?! l- X, c
- for(i=0;i<8;i++) 9 ^ T. v3 `6 x9 [# N8 o' f
- {
% X8 X' @1 t0 m3 F Z$ N7 l, T. R - OLED_WR_Byte (0xb0+i,OLED_CMD);
, A- [1 S; h+ A4 n - OLED_WR_Byte (0x00,OLED_CMD); : ^; U( K; Z2 P1 ?
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
+ D) B7 `2 `- \( e; j - }
0 I- r: d. f7 }: M; r - }3 J6 \$ Q. X2 B5 r; a
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)5 J; L) T. i5 S6 T; {9 Q7 S' ^- r
- { - R- {7 B5 M3 _3 R& y" w( I
- unsigned char c=0,i=0;
8 E' h9 W3 k6 Z/ g2 b; h - c=chr-' ';- x2 }0 t- x7 n5 W+ k3 r6 w
- if(x>Max_Column-1){x=0;y=y+2;}6 V1 S$ B4 N% z' G- v3 L
- if(Char_Size ==16)
5 z8 N: Y$ P/ R - {4 i4 w, m# k9 z# M B5 L
- OLED_Set_Pos(x,y); " L& T! H- H1 J
- for(i=0;i<8;i++)
% ~ t, ]1 K# a: r - OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
; N* {2 s8 f8 W% V! M2 N( H2 m - OLED_Set_Pos(x,y+1);9 W, q* P, z3 ?- q
- for(i=0;i<8;i++)2 }1 o- ~+ X1 p |
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);" q5 u% c% i2 f1 q" }7 e
- }
* V+ u5 E: o0 `9 |% ~; B3 U0 M& ^ - else {
' u( S0 A% C! g1 Z6 ]: E9 ] - OLED_Set_Pos(x,y);
- z1 m( G; X2 B - for(i=0;i<6;i++)$ a" T7 k2 t, L6 l
- OLED_WR_Byte(F6x8[c][i],OLED_DATA);
( l% H& x3 U, o* b0 H' A - }
. {9 P+ c3 }6 u" \, s - }) u9 L' m0 ^" z* H
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)- ~% @/ [+ k- C5 L
- {
z5 O, C4 G) y* F7 a) K( H0 E - u8 t,temp;; e& E5 h: V/ v8 G% n
- u8 enshow=0;
# r" u# W) O6 ~9 U9 G3 p1 N! W - for(t=0;t<len;t++)
3 @/ F4 l! g& Y8 c - {" v5 f7 q( q9 e6 c( N+ i' r+ T6 r
- temp=(num/oled_pow(10,len-t-1))%10;' r+ Z3 o; Y* `
- if(enshow==0&&t<(len-1)): n; @% O8 l9 J! `5 _
- {
# R0 o; L0 R& K" | - if(temp==0)
- r: h3 r5 Y# t4 j6 U3 U/ O - {
3 a6 Q9 O9 z" ?# ~. @ - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);: a' E+ S, n$ X' H4 r! |1 U
- continue; ~; Q; D5 L; P1 H! z7 O5 p1 l
- }else enshow=1;
; V8 S/ e' J$ m/ P# c" J+ H) O -
3 C$ T: F* n& l7 I' ?7 O$ n) p - }
' o+ ~; n% }! N! ~' {; O" | - OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
+ j3 \2 O& i, u( s7 g/ J" C - }
. n0 \1 {8 S: `* q - }
% H: ~$ }1 A# _* q - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
4 o' x1 {$ @2 A. W4 ] - {
; V! U: X2 f+ e$ ]1 { - unsigned char j=0; p0 S' p4 C: k9 y% P/ ] p
- while (chr[j]!='\0')# U* ?( O8 p3 b+ k4 l' V
- { OLED_ShowChar(x,y,chr[j],Char_Size);
8 Z' m* T$ ^5 ] - x+=8;% R. c, x8 p+ k% k
- if(x>120){x=0;y+=2;}7 @+ W' c6 w4 f2 H- c" G: v$ |
- j++;$ [3 z/ d, w7 S. y
- }
5 Q) E) S+ w: s! o& B0 M' p' t - }
7 m/ Z' h) L# k' A1 @6 W0 c
& H% B4 h% E" S ]+ Y4 X7 N) P- void OLED_ShowCHinese(u8 x,u8 y,u8 no)5 t8 F$ ]+ M# L5 s/ R
- {
4 M: Q" Q6 o0 z7 d1 p2 y - u8 t,adder=0;
+ {4 ~/ ~6 {1 e* ^& ~) ^) m% K - OLED_Set_Pos(x,y); 0 j* z. S* {5 y4 m6 o+ N$ Y4 `* \
- for(t=0;t<16;t++)2 n% m0 D: [& ?/ k1 b1 Q/ R
- {1 E4 _% N7 S" g' W
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);# j& y" r% u d
- adder+=1;! H$ O/ p, U \0 I: t* F8 t
- } / b1 O ?- u, k7 ~% k
- OLED_Set_Pos(x,y+1); . J0 p* l$ T$ s; u0 R. s' ]8 d
- for(t=0;t<16;t++)
/ d8 ]6 M( A, I# J2 x - { + H9 J* d5 }, v
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);' f' ?6 U6 q- @
- adder+=1;: e; E8 t# G% y& Y2 V! t. F3 N
- } 8 I. J% J9 r9 _9 i/ c6 h
- }7 L7 ? Z1 y3 W0 e
! c8 M( u: d- ^. E- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]). Y* W- u9 v0 D8 {1 ?) B6 o
- { . i# I0 [2 @# \
- unsigned int j=0;
5 ?1 ~. H7 H! p" V3 p - unsigned char x,y;& {/ |# e% y6 `2 p
-
" K8 n& {" m% ?" [ K" [8 Q - if(y1%8==0) y=y1/8;
. _2 o* ~- G& @3 u8 J - else y=y1/8+1;
! ]4 U: z" Z# z) p, B9 L7 f - for(y=y0;y<y1;y++); {6 K+ I4 W% P2 y( e
- {9 q4 Y; W: g' C
- OLED_Set_Pos(x0,y);0 V( G: R. ?. O
- for(x=x0;x<x1;x++)3 G+ z" z0 M; s- E! b V
- { " \1 |# _2 K. Z
- OLED_WR_Byte(BMP[j++],OLED_DATA);
" E7 |; d$ G7 Q, ?; p; Y l/ x - }
; J0 ^) F F8 r: P - }# Y* I- s) F: H p9 Q+ E
- } 5 t' e" Y6 {2 @6 N% q9 ~' }" M# `
- 5 B" c+ i4 `! \7 X
- void OLED_Init(void)5 n2 ~- b) v. {* v
- {
3 ^6 g2 b g! M" z - GPIO_InitTypeDef GPIO_InitStructure;
( B3 B5 C3 a. M% m - " Z! R. m6 X0 i+ v! w9 Y$ H( C7 W
- OLED_GPIO_CLK_ENABLE();
* \/ R3 \1 f0 ^! V# f. n3 a" e - GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;
?1 H! N4 a+ n( |7 `; F - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
' h/ A. x7 u, W/ ?+ ]1 v - GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
5 \% {3 d$ S7 \6 X6 S" t - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); " p9 o/ X% ~) V% `; B% C9 T
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);( }1 ~6 ] `# G; T& Y7 K, P* u
- HAL_Delay(200);
2 n) B( E( ]7 g2 Z" m- L' F - OLED_WR_Byte(0xAE,OLED_CMD);
! \" C3 f5 O; q5 j1 G - //display off% x; `; x" z5 A1 e2 \
- OLED_WR_Byte(0x00,OLED_CMD);//---set low column address# V6 M3 g8 u8 L8 V8 x- `# I2 D) S3 t
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address& ]" T8 T* n1 M; \. q& l
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address / g+ [7 _* |0 M; H( C: r' u7 F
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address) g, D, @! D0 i* J( d) R
- OLED_WR_Byte(0x81,OLED_CMD); // contract control' c# }- z M2 T; `6 S$ q
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
m/ c/ [! Y% i& ]+ L, } - OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 9 X& w7 M8 k' K. U/ t! C
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse" ~$ W( f& f: |: G1 [4 h! C, f) X5 I
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
/ S$ N# w3 v! U6 k' d8 i* R# E - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty! a! w6 B$ d: `, a7 g
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction+ Z" W. v. L- }
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset; N( D: J3 u. U
- OLED_WR_Byte(0x00,OLED_CMD);//+ a5 F4 h3 b4 k4 R) V/ ~# t
-
# K9 W" Z6 V8 `2 p - OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
, K& h, q0 f& P4 F6 V - OLED_WR_Byte(0x80,OLED_CMD);//
7 d b$ J9 b$ V - 1 P9 }- \! ^+ }+ x6 x5 }8 _
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off( W6 `6 R* x% D S% `
- OLED_WR_Byte(0x05,OLED_CMD);//
- y: r& g- Q6 M* [ R h - ; i5 {! q4 g1 q& ?. B8 m4 `
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period6 b. v0 u/ W! @& X
- OLED_WR_Byte(0xF1,OLED_CMD);//
9 k0 ]- w7 @. ^% f }, b( W! S -
/ n) S% _: {& x- R" C# L! Z - OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion* P0 w0 R- E! \3 Q A3 v6 j4 |
- OLED_WR_Byte(0x12,OLED_CMD);//
* t6 a- K- m* C - 9 A) d) j6 h8 W1 e+ e) R! f% S4 D& S
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
( s3 J, h; r+ }& M% } - OLED_WR_Byte(0x30,OLED_CMD);//
) G3 Q! `# i" E. ~: S3 N4 o* t - % N) B6 g1 i6 E# b4 V9 I0 o- l
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
2 h0 B( @9 x' h% q8 f$ y - OLED_WR_Byte(0x14,OLED_CMD);//
4 L7 B- ^6 P, O' D9 m* F$ Y -
* f6 ~* H+ h, T/ N7 f/ [. A - OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel2 q2 P. g; C( Q( [7 K1 B7 z% r1 d
- }
复制代码- #ifndef __OLED_H5 y! n6 I" f4 K J! q) B
- #define __OLED_H
% H, K$ D; w3 n. R8 Z z: ^* O" M5 o( q - #include "stdlib.h"
4 \& e7 V' k/ q2 {+ J - #include "stm32g4xx_nucleo.h"6 T1 l- s+ _7 j3 @, N% u2 d/ h
- #define OLED_MODE 0
4 q) Y& b f( _$ H. [) k/ a- U - #define SIZE 8
& u! Z" c$ q. Z/ F q; A - #define XLevelL 0x00( q: x6 f) c1 j1 h3 p
- #define XLevelH 0x10# A" O) p2 ?) K1 E4 S- F F; ?& _% }
- #define Max_Column 128
3 I/ `/ a( @9 d5 C/ I! } - #define Max_Row 645 }% ~% ~* Z) Y
- #define Brightness 0xFF 9 K" J9 _4 }) R R
- #define X_WIDTH 128
9 k* q4 s3 t' d, _% H - #define Y_WIDTH 64
1 G" O6 q$ b7 e6 O - #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK" O) @. E+ J& m" @
- #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET); |% r1 v' m3 k7 j: k G
- . y* I" e8 @) |+ K w
- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN5 ~2 E. S( G. [ C9 O
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)4 x% x7 I& U( `
- 2 m3 T/ T C$ H, n
- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES
2 ~1 c1 k `9 m" E+ ~" a/ G3 h - #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
: Y) J4 c' [& v" w -
- g: y/ b1 ~* M* g$ e* E - #define OLED_CMD 05 J' v; S' _6 b: U' J+ v" ~
- #define OLED_DATA 1( E7 m/ r2 {1 T7 X* U- X9 x/ {
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() ! b, d1 ^9 N+ q: [0 _% K, u' u
- #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
( ~4 A% W! R7 M1 [& O4 a7 r - 0 s& }$ ^( p# \8 U, y% ]( V! ]
- void OLED_WR_Byte(unsigned dat,unsigned cmd);
R- y7 _( r- F( h' ?- V" l$ R+ } - void OLED_Display_On(void);
) i8 T; _+ a- j. g9 w+ a8 Z. s+ H/ x - void OLED_Display_Off(void); - t8 [ }: F5 g
- void OLED_Init(void);) D$ L t$ v) p( ~/ a" ^% O8 l
- void OLED_Clear(void);1 {5 Y& f9 D$ Q$ }2 T! p; U
- void OLED_DrawPoint(u8 x,u8 y,u8 t);
3 x* k+ i: n% M% f" f" z - void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
0 ^; s1 i0 W- g1 }* f - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
5 u$ v) i+ n( F9 a% k' d8 ~ - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
; V9 R, M: D/ K+ k* ] - void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
$ u1 C' |/ P( M9 {5 @9 @8 k' \: g9 { - void OLED_Set_Pos(unsigned char x, unsigned char y);% {$ \$ g3 f! j% D" Q5 T9 d) p4 ^
- void OLED_ShowCHinese(u8 x,u8 y,u8 no);
6 L1 P W5 m% P9 l! q - void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);4 S1 O8 B' k( g
- void Delay_50ms(unsigned int Del_50ms);0 h' ?( T8 w) M9 A
- void Delay_1ms(unsigned int Del_1ms);( X4 s7 D8 m# V! r
- void fill_picture(unsigned char fill_Data);: B, n8 V2 A+ l, g% H% V
- void Picture(void);! U( g" a$ m% Z2 X
- void IIC_Start(void);: D6 L& t5 p( ]# s% Z( k3 p$ E
- void IIC_Stop(void);+ w5 |' r/ U K/ w O* j& ~! O
- void Write_IIC_Command(unsigned char IIC_Command);% Y2 k3 Z* J6 L# F6 z
- void Write_IIC_Data(unsigned char IIC_Data);
3 N; N2 y+ I( D4 a; i* T, J& j - void Write_IIC_Byte(unsigned char IIC_Byte);) c/ ]& I0 [0 S" S) H
- void Display_Battery_Level(void);
$ m9 J2 {+ N4 u, Y - void IIC_Wait_Ack(void);
3 w/ F6 y! h B& q4 s3 ?( S - #endif
复制代码- int main(void)4 U6 o) m/ {+ t+ B* E
- {
8 t2 ^% j5 X4 c* S+ D; G - HAL_Init();
; F. V7 C7 X4 Q( {/ u" I! d
( } S$ N( X% {; e* b& G. Y- OLED_Init();
4 f* ~ l1 i' G$ g5 [ - OLED_Clear();
: W+ d- o5 N4 Q6 U1 a - SystemClock_Config();
2 }! S. z0 W. y1 ]7 X* Q - , J2 j' O) @6 m; Y
- BSP_LED_Init(LED2);6 i8 I9 q4 m# R" M7 D: v
- EXTI15_10_IRQHandler_Config();* F# J6 M* z/ a6 ^
& G: i' V: Y! h) u- while(1)
/ N$ v3 S% ~% d6 K2 x+ R - {/ B; C5 H3 I1 l; u* O% T
- OLED_ShowString(0,0,(unsigned char *)"STM32",16);* i4 R/ G+ v7 r# Y
- OLED_ShowCHinese(45,0,2);//
6 x6 d( f4 c$ e/ ^) Z& V Y( w - OLED_ShowCHinese(63,0,3);//
; N( ? m7 i* _4 x0 P9 Q9 {, v* f+ e# E - OLED_ShowCHinese(81,0,4);//
* ?% }4 j- Z( y' W; P ^- E - OLED_ShowCHinese(99,0,5);//2 y' p/ {7 ]5 U( {0 `
- OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); 4 x( d( Z X% A" U8 m$ \7 E* Q
- OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
+ C. T! K0 H9 A - }
" d! p7 S; |$ e - }
! U% x4 O3 D& H$ f/ [9 V/ T% v
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
. k! S$ U2 O1 W- _$ b _2 l1 r8 v. \, X
- m+ ~, c* y8 S( S |