国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
& _! U' @" O D$ n4 l 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
( ?( |( Q% x0 ]+ v# _8 |' D
) _0 m5 q, }) Q5 J
部分代码如下:
1 q6 z" O/ d6 q
, e# ]0 j( k: {( Q4 d- void IIC_Start(); v8 }' u. `" O9 |# C% E
- {: d. a5 K, r3 c( \1 H" F, g
- & Q- O$ H) D3 U' k# p/ z& ^
- OLED_SCLK_Set() ;
' P% e8 B% k+ ^# _+ l3 c. ]! z - OLED_SDIN_Set();
. D. ] E2 y0 n9 e8 a1 c8 ] - OLED_SDIN_Clr();6 V1 K! K+ `0 w0 o
- OLED_SCLK_Clr();
3 v/ A. b9 f$ C3 g* V% h; O - }
- g1 X/ w- Z$ @* I( N - void IIC_Stop()- M3 m0 F' w" \$ N& O) |
- {* c& E( M9 z" k# O
- OLED_SCLK_Set() ;& q! S# _1 w8 m
- OLED_SDIN_Clr();
; F8 O' G& M8 E$ X/ ?, w2 E7 m- r; T - OLED_SDIN_Set();, o# s: k$ C- F) O/ }8 W: R
- }
; J+ Y- s/ o% \% z. B$ } - void IIC_Wait_Ack()
+ i' e$ M2 d1 k Q# N) Z - {9 q) @; m5 `5 O9 q0 W. g
- OLED_SCLK_Set() ;- Q! } A9 g! D
- OLED_SCLK_Clr();
/ q" E! q5 Z8 X+ A" B' o4 p$ I( a4 ~* W Q - }; a7 g. R4 d* A. y* t
- void Write_IIC_Byte(unsigned char IIC_Byte)4 C( `3 I' B% [ O; D8 ~' ?
- {
* q% o% u7 b$ h: T) W2 d - unsigned char i;" p( R9 H+ c1 q: S- i: X9 ~1 J5 H, o
- unsigned char m,da;
0 K& e# K# m6 [. W7 N/ c - da=IIC_Byte;
+ u. g! s: [4 C - OLED_SCLK_Clr();
' e: n& \0 N) P - for(i=0;i<8;i++)
+ X) a+ Q P$ S4 ^- ~ - {
6 E/ [% j. M* d* j - m=da;5 w! O$ h+ G9 a5 Q2 G5 N
- m=m&0x80;' D/ H8 V9 @ A r0 W( W1 w
- if(m==0x80)
7 z( l9 n3 J* Y8 t9 D. R' x) m - {OLED_SDIN_Set();}3 I- {+ b& J+ A7 E# V
- else OLED_SDIN_Clr();' b1 Z/ r( B4 A# O
- da=da<<1;1 @* ?. F% N- s4 N2 ^4 s' C
- OLED_SCLK_Set();
& }4 ^$ h9 R9 O3 K/ t8 N: z3 }3 Y - OLED_SCLK_Clr();5 z% D9 v7 i$ }, e
- }& g: c8 j& V% `* k
- }; c: z$ @( H3 K# r' x& c" r
- void Write_IIC_Command(unsigned char IIC_Command)" Q, i, @* O: ~& ]4 }4 {$ Q I
- {
/ ~; j3 q/ W/ e- L( K# {! C - IIC_Start();9 x; D. n1 q6 g5 g8 n
- Write_IIC_Byte(0x78);
8 K$ f9 a' H8 G1 Q: X' d( i3 o: W - IIC_Wait_Ack();
% t$ |6 K6 j1 u! a0 z" e2 B6 U/ m- J - Write_IIC_Byte(0x00);
& t- l" {2 _, b" o* Q* v - IIC_Wait_Ack();
8 o, k& R& q2 x4 [ - Write_IIC_Byte(IIC_Command);
% o X( y: h% y/ ^ - IIC_Wait_Ack();
. | c5 ~0 t2 i* ~ h: D - IIC_Stop();
4 K% J0 Y7 B0 f2 [ - }0 ^* V x9 t5 w2 V
- void Write_IIC_Data(unsigned char IIC_Data)8 u# V' X- ~( |
- {
6 a# L( m' R; V2 B3 t4 g - IIC_Start();
8 x% q4 u+ }! r& B9 G) ] - Write_IIC_Byte(0x78);
# J, [$ P9 U) H- Z - IIC_Wait_Ack(); ; t I0 D, G+ R6 Q W% p+ L
- Write_IIC_Byte(0x40);6 g2 a: Y3 ?/ R8 a& \
- IIC_Wait_Ack(); " ^" t! A, Z& s2 b
- Write_IIC_Byte(IIC_Data);
# `! q( t6 t9 i6 Z - IIC_Wait_Ack();
9 T9 B) P* m+ ?( ]$ |. v - IIC_Stop();. O: I* d( Q( {$ @6 s* x
- }9 b9 h# U, K/ _0 M. f
- void OLED_WR_Byte(unsigned dat,unsigned cmd)
9 x6 K* W7 V1 F5 ?8 j - {
, s. g4 B5 b1 }$ h8 D - if(cmd)
( x8 t7 A2 F9 R# _# l; J6 w- x - {
. P1 c& n, E) o! k - Write_IIC_Data(dat);' w! ]/ o. ^3 e& I3 `6 v
- }
$ `' ^* J( c( | - else% u6 p% z; i9 ]0 {# t
- {
' n9 A6 o/ P6 C5 Z. u+ d. ~ - Write_IIC_Command(dat); 7 y' O" `6 G) ~1 I9 I4 V# U- O
- }7 E8 q/ h: r, u# }6 O( `
- }, r# H: C5 f+ K( n1 z
- void OLED_Display_On(void)
: K1 G0 H+ l% w" X/ X( D: [ - {5 W7 D4 F" I$ X* i2 j; ]3 N0 \
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC: P0 F4 u$ W& A. W3 \7 }
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
' B6 c3 z, D7 V$ B - OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
5 c' L2 f/ I% `( d- B - }
. U, g4 M& A& _1 ?2 g3 t5 t - void OLED_Display_Off(void)' J: W! M, e2 X
- {5 `% k+ L0 ~$ k- a% @6 A) F+ W$ d
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC, r6 d+ F! U3 O4 S2 y8 x- t% h
- OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
Z3 [* R' w: @6 Y - OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF0 [# J5 l/ [8 s! I' w, k2 A
- }
复制代码- void OLED_Clear(void)
) r/ J k; A9 J) Q: D - {
& r: j* P- o- r - u8 i,n;
. z: z0 g! W: M5 K, i# p - for(i=0;i<8;i++) $ V9 Y+ a; P4 O( Z& G
- { - u S# A1 U: e; f3 `9 T
- OLED_WR_Byte (0xb0+i,OLED_CMD);8 C) x& V1 U7 F) k" M9 W; u
- OLED_WR_Byte (0x00,OLED_CMD);0 J) N7 x) y& `0 t
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); + I" \. f( B1 k
- } 7 B" O8 w) \1 M2 I% k6 u# x, {
- }# K1 D0 H0 J4 B+ b4 z2 l' |3 |! |
- void OLED_On(void)
* M ~( Y2 F' p7 X+ k v - {
3 \1 |) o3 [/ h- u1 r8 | - u8 i,n; : a3 H1 K, [3 F$ ~/ L% Z' u
- for(i=0;i<8;i++) 0 O' k! h+ n* }: q; b/ t7 k" v
- { 5 G/ k, d( \( t2 W
- OLED_WR_Byte (0xb0+i,OLED_CMD);
% i$ j6 I7 W9 p! t2 w - OLED_WR_Byte (0x00,OLED_CMD); ) X5 i9 A. A J
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
4 w: j3 y5 |! g& w3 O - } / }! r7 G5 N" q4 O7 j. H$ i8 Y
- }
7 X$ F: Z$ a. H7 g# B - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)3 p- b* K1 i) G3 J5 d( T$ b$ s6 |
- { , Q6 I, b9 C" j3 T
- unsigned char c=0,i=0; . d" K% Y# Z6 ~. J
- c=chr-' ';6 u! g+ W6 j: ^' d# _
- if(x>Max_Column-1){x=0;y=y+2;}
/ _! S1 w: N" x e8 O6 ^ - if(Char_Size ==16)0 n+ [& T6 b. T
- {
+ `0 t9 r) L. a5 j/ y+ f( w6 q7 o - OLED_Set_Pos(x,y); L0 _6 Q2 F0 @& V
- for(i=0;i<8;i++)7 x8 |( ^' r2 C% C
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
4 m3 |) G$ R+ r% G - OLED_Set_Pos(x,y+1);, x, g+ S1 d3 v, ?. _* Z, x
- for(i=0;i<8;i++)4 a8 ?. C% D5 C. G3 O/ r5 L4 y
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
+ j3 U3 G" w% o5 r: {7 X( p7 n% [6 w) J - }6 q' ?" R4 {& {3 Q K* B# G* A7 p3 u
- else { 4 C/ c6 a& {+ e- p% s) K M" P
- OLED_Set_Pos(x,y);( j* ]6 Y$ c3 S' f& Q
- for(i=0;i<6;i++)
% @; j! _) B3 g; C" A: S% s - OLED_WR_Byte(F6x8[c][i],OLED_DATA);
/ m$ j+ S& x4 ^! [ - }
( l0 i) [+ K4 r5 s( f! X/ ~5 y$ X' c - }
4 V- `6 W( B/ |. u& i - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)& e& q- V* w/ e7 y) C- O
- { , W# j& [5 ~9 }
- u8 t,temp;
# v& ?% ~' m( s5 I/ z; J2 {' h1 y - u8 enshow=0;
. a+ M6 }/ [! }4 a' ^2 O! U0 K5 } - for(t=0;t<len;t++)
$ S- |7 j3 A) @, S* q8 V - {, a: S4 w0 {/ Y- x6 h% d
- temp=(num/oled_pow(10,len-t-1))%10;
6 u8 J0 x& ]) R! O- F - if(enshow==0&&t<(len-1)) _: Q1 @- ~, ]& G
- {
9 d- ]/ a/ z* n& m6 ^; M - if(temp==0)
( ]! B4 Y) \; b( I/ i* t - {
/ P3 d1 S% o6 k1 Y - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);' U5 O+ O# c6 M/ Q/ I
- continue;, O H: p3 Z- D$ i! V+ E
- }else enshow=1; ) ^- Y; h& Z" T" S. c
- 5 F6 |+ A5 U. v/ m; c
- }" I$ p* O8 T, h" ~4 P2 a
- OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 8 _" J$ c% M) s7 T8 \. N
- }
& g1 V5 s1 ?5 X( q9 t3 ^2 f - } J) z4 i( \ ?6 C0 ^! z* d) ^4 F
- void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size), l) a Y# ?3 \$ o5 \0 L3 e
- {
* I; x( q& ?- w/ u6 ^; [ - unsigned char j=0;: T2 j' v9 S& U; M8 E" \' c# B0 G
- while (chr[j]!='\0')
0 ]2 V. j7 K+ K6 n* r+ v' @8 c - { OLED_ShowChar(x,y,chr[j],Char_Size);
7 Q$ s* [, V5 C' S# X - x+=8;$ F5 l" b! z# {9 r& `
- if(x>120){x=0;y+=2;}# ]5 W/ f6 b1 D" t' w: j
- j++;5 X! V- z. S- O; U" ?/ Z' A8 i
- }
8 {6 Z: D6 i6 n2 @: B# K& \3 e - }
: F) a: ]% j$ g - - |4 h k* i- m
- void OLED_ShowCHinese(u8 x,u8 y,u8 no)0 H: R* _+ D" o/ `! |
- { : v% M0 l$ \3 \& a
- u8 t,adder=0;
% {% o+ s4 T, i0 `2 W - OLED_Set_Pos(x,y); 7 I9 x& m: C9 U/ R7 }: }
- for(t=0;t<16;t++)
4 C7 ^ ~+ @0 v- j1 S - {; E0 W# h0 k& V; f0 ^: b6 A0 _0 V
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
" g& ^; p% u1 d$ A$ T2 H: T6 r6 C. V - adder+=1;
3 _% F7 _( @, T - } ( i( N: _# x1 ~4 v
- OLED_Set_Pos(x,y+1);
" e. v+ a" @+ p0 k$ ]5 X- R - for(t=0;t<16;t++)
* y' i) D- N9 p n$ E6 s - {
# Q7 X0 A1 o6 O* A0 C6 B - OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
1 g% u9 \+ [7 j - adder+=1;, O- \ J$ N( Z$ Y: l/ f: q: p
- }
# V o* d' F$ M& z* ? - }
( T' \7 j J0 J+ n - ( b6 `) a" D! t
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
' S7 E; k2 {1 Q. }" ^* m6 U - {
! g" P; C/ n# L3 `* e - unsigned int j=0;
. c, |+ H7 ?8 X0 j, \6 c - unsigned char x,y;
- [: }1 G+ A# d: v& q/ K - ' E4 {4 J6 ]; ], K( Q
- if(y1%8==0) y=y1/8; 9 @- Q. z1 y: o" x, h
- else y=y1/8+1;- I, y0 I, P" E4 f9 \1 P; x5 X
- for(y=y0;y<y1;y++)
6 i3 E4 J$ }1 a Y H' P+ T8 J - {
9 _3 C# `6 U5 ` - OLED_Set_Pos(x0,y);
3 S- [0 |% }/ H: Z3 Q7 y) a* r+ E - for(x=x0;x<x1;x++)% ~' x" @) |+ H
- {
. D0 c2 m" D* E8 |1 Q9 A; y+ g - OLED_WR_Byte(BMP[j++],OLED_DATA);
$ l: u7 H% Z+ L! r$ S; ~# d1 W' a# z - }/ N# o) ?: l1 V8 x
- }9 C P$ g2 }& \! y: Y
- }
4 d1 Q6 B- B% s - ( z2 ]4 h0 Q I' x6 b* M2 l! B
- void OLED_Init(void)
, R6 E( k, u2 T B' o. c - {
p4 S( |0 Y' y2 a' h; b f - GPIO_InitTypeDef GPIO_InitStructure;
/ h& |- Q# v- C! ]) `; C -
5 H( c8 R- }4 ~ - OLED_GPIO_CLK_ENABLE(); . y' a9 Z/ V% D5 x4 p" h! q. ?
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9; 3 h }: K& V2 a2 G1 [9 |
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
s/ O- G: E2 m5 Q' I3 ^7 i - GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;8 n2 O( ]8 S. _7 N- u: Z
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); - G) x9 }' @- S9 a& t
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
9 H- o; g7 ]( {1 k - HAL_Delay(200);
3 w" B: h8 s! h1 X- A5 `5 d9 W - OLED_WR_Byte(0xAE,OLED_CMD);# Y- R ~% O+ A4 N8 U; Z2 h5 t! [
- //display off
8 ~ `1 I7 @0 d9 W5 L L. S# i - OLED_WR_Byte(0x00,OLED_CMD);//---set low column address/ _# X6 h5 S3 H C3 s0 b) J
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address5 w. D! v T+ D/ p3 A B0 G" m! |
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
: c: c' V% Z# r3 J1 n. N+ [& T - OLED_WR_Byte(0xB0,OLED_CMD);//--set page address* T# }# e, A4 U4 P/ J4 m! q
- OLED_WR_Byte(0x81,OLED_CMD); // contract control9 Y9 @9 @* c- s6 p. c* o
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
- g( W8 g: p) k7 Y# _% F/ b - OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap / e1 b- v. e- p# w/ r f( T- A! G0 ~
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
" K- J0 D1 ` Z2 ^0 d9 ? - OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
6 r" e3 I4 j. ]' b9 Z8 ?$ L - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty9 T5 Z4 B7 ?. Q z
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction! T& x; b* R/ n' R. x2 L
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset8 \5 V; y* |8 X5 l( j' }' Q
- OLED_WR_Byte(0x00,OLED_CMD);// w4 z2 z7 }6 W. k8 |! {* R9 p
-
! n( v' _ ~# |" |, U - OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
- c7 Y* M8 j8 |* B7 l - OLED_WR_Byte(0x80,OLED_CMD);//. x" o) S; w5 ^% g; ?+ J
- 4 ]% b5 f6 w6 Y- A: f! \/ g
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
) W: z! y. G1 R5 h - OLED_WR_Byte(0x05,OLED_CMD);//
% G8 s' O2 ?$ K/ ?. X' k( j" Q4 G. } - 9 @3 _6 {0 }5 |; |2 a; l. }9 w: J, O
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
* E" w- u8 D0 `+ E - OLED_WR_Byte(0xF1,OLED_CMD);//
8 H8 J4 U! @) k0 j% H -
/ z# f5 t! I' n* x - OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion: b: Z- y# m0 @
- OLED_WR_Byte(0x12,OLED_CMD);//
/ @+ v& P! E+ V7 _4 P -
3 L5 |! ~5 u* n; H/ F% R5 C - OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh% n8 O8 @" l( g
- OLED_WR_Byte(0x30,OLED_CMD);//
2 E: ] R5 \" y" C* _# N8 f0 A -
$ n6 R3 `" s* i3 V) p5 S - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
/ ?" e# C3 ^# X& r5 F; H6 r - OLED_WR_Byte(0x14,OLED_CMD);//
1 W- ?" W" E. O8 M& [ - " X. O8 e e5 l: j. m2 Z* q: ?# t! {& b
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
6 M5 @/ |$ w# o3 E- W$ @ - }
复制代码- #ifndef __OLED_H+ Q- d0 M. q' J6 ^- ]
- #define __OLED_H 2 W$ ?* j9 I* ?- {* b4 v: k
- #include "stdlib.h"
0 o5 V H% R1 h1 {: B6 j - #include "stm32g4xx_nucleo.h"6 O7 y: q; q0 W" R
- #define OLED_MODE 0
- v4 U/ ]/ L; m' a( Z2 x - #define SIZE 8# E! D4 E1 @$ ?0 L9 z+ \( j6 G3 Q
- #define XLevelL 0x00
% N! q5 d! S" A; r; K( I8 Z - #define XLevelH 0x10
2 r4 T+ [3 Q8 F - #define Max_Column 128
4 ^1 j. [- k8 m! j - #define Max_Row 64- v& ?$ ^7 @8 K* [1 J, k( x/ _. N5 k
- #define Brightness 0xFF 7 n: B- j% L5 T/ y N0 `
- #define X_WIDTH 128
/ ?' Y) `" a) a5 u- ]( L; Q. O - #define Y_WIDTH 64 ) n. Z5 E/ Y% U: Y9 R& o
- #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
2 |7 t8 N2 X* {6 D, C/ R - #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
) H% e6 x- p2 g, b, \2 b% j# A% o - 9 V, ]3 T5 O: F- j
- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN& l, z1 q! y# O9 G
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
+ V' l. J+ C3 a - 0 [: p6 q+ t* |5 ~1 d
- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES
- R z e9 Z4 W: F) [" ^ - #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
7 {: ?3 K% M5 R6 c1 _3 e - ! C* M( |" r* \4 O; j& B) U
- #define OLED_CMD 0
3 q. v5 [8 O0 } - #define OLED_DATA 1! j* Z' L' |: Z9 Y! G$ o+ B' Z2 P: L
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
7 _: x$ l! m: I4 f- F# G5 _) N - #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE(); A" M: B& e, p V6 j$ F$ q- I
/ l4 z( |; S7 X* \4 M- void OLED_WR_Byte(unsigned dat,unsigned cmd);
& f5 N5 K) f( J/ d% z& W4 \9 W - void OLED_Display_On(void);6 F; L# y* j* M6 p
- void OLED_Display_Off(void);
6 q0 \% h$ \7 r) e9 L: P# r - void OLED_Init(void);
0 }; l2 [5 Z9 U7 r3 d7 f - void OLED_Clear(void);
2 p" F7 C, k' Q0 ?7 i - void OLED_DrawPoint(u8 x,u8 y,u8 t);% Z# y) b9 Y, V- O
- void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
* z0 ~, \$ f* j9 s - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);1 R$ s. p3 ~. ~1 E
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
0 P! J; j& |2 g0 j( j$ c8 X - void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); u" {+ j% g. v' v' g) i7 |# v
- void OLED_Set_Pos(unsigned char x, unsigned char y);# R" |# c% i1 L+ a; v
- void OLED_ShowCHinese(u8 x,u8 y,u8 no);
6 b$ w6 w8 j8 ?+ R2 q; L - void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);1 q0 g1 s `8 T6 ^- z% W* Q
- void Delay_50ms(unsigned int Del_50ms);
% c% p L! e; h. ] w6 M - void Delay_1ms(unsigned int Del_1ms);
( b5 b' \# ^, U& J+ L - void fill_picture(unsigned char fill_Data);
! b) ^/ Y; S* X: o4 r0 n7 s - void Picture(void);6 B- Q' G+ g$ O* b' ~0 e; {, W
- void IIC_Start(void);+ }3 ^' N+ T( S% R1 R
- void IIC_Stop(void);; W+ r6 @4 b2 u& u; h
- void Write_IIC_Command(unsigned char IIC_Command);
) R0 } p, B3 ~4 \8 D7 T - void Write_IIC_Data(unsigned char IIC_Data);
' Y- j0 S# j0 p. d( I/ o+ h& I8 q2 ^ - void Write_IIC_Byte(unsigned char IIC_Byte);
" g1 _: U+ q9 x; U8 P* R - void Display_Battery_Level(void);) j) H- y' j" `4 }2 ^ [
- void IIC_Wait_Ack(void);
# T9 L6 d8 U% H9 M: }, _ - #endif
复制代码- int main(void)( F3 Z+ R0 K" s1 j
- {# [2 T0 k1 A" R3 s6 f6 k. z: ?
- HAL_Init();
1 `* ?1 W5 t' @! H5 Q2 ]
! _, {: X0 W% H8 t. `- OLED_Init();$ N7 q. K g9 p7 P8 I: A
- OLED_Clear();
# E. h5 W8 y, U4 t! t& | z0 v - SystemClock_Config();; _$ s4 Q) I1 [( r8 P' I4 l
/ j' J! N. A. U/ j( B- BSP_LED_Init(LED2);% k. K9 I# e& ^
- EXTI15_10_IRQHandler_Config();
* r2 H& h) Z) o- @( \0 b - ! {$ N9 l+ X1 d* ~, @
- while(1)
. u4 N9 S1 i- b o - {: R; z4 j- ]$ h; X; M% ?9 @+ B! Y
- OLED_ShowString(0,0,(unsigned char *)"STM32",16);8 D) a+ {+ j) i7 t5 T
- OLED_ShowCHinese(45,0,2);//" P. a# i( p1 @1 e
- OLED_ShowCHinese(63,0,3);//' y" I% B3 S9 m9 j+ ?
- OLED_ShowCHinese(81,0,4);//
- F N1 L( k5 t" \5 q9 M7 J - OLED_ShowCHinese(99,0,5);//
& z" B. e ]0 | | - OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); 5 [1 Z, N- z0 S; ?; O# L
- OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
7 G- f) j. O( E4 `1 X& B0 i( m1 J - }
0 ~. _/ ~1 y' O) j" j0 n - }
& G& i$ D5 o: N9 V1 y8 K$ W( \
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
1 l% w! D- g+ @: J
n; H% r6 r4 }% ?9 b) Q
6 T- ^' L7 {3 s. C- h4 O# A |