国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
* m3 v3 k* N p6 { 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB93 o! K0 j3 t2 f+ h; h8 E
/ L* w5 t7 Q$ p" I
部分代码如下:/ t/ h K$ T) p
4 J% L* r( n4 a( ~- y5 \: y
- void IIC_Start()( ?! c+ S/ {% v/ _, k2 a$ W+ Q
- {
( t% M: _- z7 i' D0 t6 S0 J- Z - " L) @4 c, w9 j0 h8 U! i
- OLED_SCLK_Set() ;
3 N9 V4 `! O: A- d5 ]- k/ P8 M& u# ` - OLED_SDIN_Set();
) K6 W' B2 M; s7 ^1 W4 l- ^6 j, L9 ~ - OLED_SDIN_Clr();1 i; Q% k5 c" \; _
- OLED_SCLK_Clr();
8 ~7 r4 z% r9 t$ D: Y+ k - }
' L/ K* c; o/ f+ w$ b* P - void IIC_Stop()
/ h5 x, c. x8 \+ U8 ] - {
2 T/ w+ S1 j) D7 A% n - OLED_SCLK_Set() ;
' V" k$ i8 \8 e - OLED_SDIN_Clr();
5 n" ~2 t# ^" P5 X4 s/ z - OLED_SDIN_Set();
0 X: c7 ]6 I4 E+ r4 } - }. q+ D( l8 d+ D' @, n2 d* p- {/ z
- void IIC_Wait_Ack()% E/ ?& l# ~& Q8 A0 G
- {
. o1 x' O: m0 K( \0 p! p4 j' k0 L M5 M, y - OLED_SCLK_Set() ;9 t- v p; d% }- u' Q
- OLED_SCLK_Clr();
" f: K2 C, p% B) s8 E6 \( ^ - }
* p) ~% i6 `9 d3 F5 H P - void Write_IIC_Byte(unsigned char IIC_Byte)1 ]0 d6 q. w' J/ v# I
- {) k! f m2 w' b1 U) b
- unsigned char i;2 L N8 m3 A7 T1 u2 g
- unsigned char m,da;. g: i, B% }$ U+ e5 y
- da=IIC_Byte;5 \. Z! A$ g: L0 |1 h; l( e7 e
- OLED_SCLK_Clr();
; E" {( a, u2 p4 x8 T) ~7 J - for(i=0;i<8;i++) 7 N5 r5 q. P+ m Q% [
- {
( R# l! N. |8 ^4 j- h - m=da;* T- A6 n' m4 O+ w
- m=m&0x80;
1 ~" }: Y! I4 g- u4 r; y - if(m==0x80)" j' Y# R& V/ ^. o
- {OLED_SDIN_Set();}
! e% w( R. ^$ a- o - else OLED_SDIN_Clr();$ M8 Y; n1 p5 F' }9 J( O/ `7 b% S
- da=da<<1;
* s0 a. l) i1 ]2 z1 g - OLED_SCLK_Set();
d* ^# W) M: q5 k# t- E3 D - OLED_SCLK_Clr();6 Z4 f5 R8 w3 C+ D9 u4 a
- }
+ B8 ]7 E3 F* O5 p - }
$ @) p" A7 T. Y, ^ - void Write_IIC_Command(unsigned char IIC_Command)
/ r0 G2 W6 G( O$ m( g- T - {
' J$ @; a2 Z& j/ H9 h6 ^) A - IIC_Start();/ h9 A( d" B$ v
- Write_IIC_Byte(0x78); ; }/ w$ K$ `! q: a
- IIC_Wait_Ack(); % [( ]% w i1 y
- Write_IIC_Byte(0x00);
& z0 w9 n$ b9 x0 ^0 L. T" d* s$ n - IIC_Wait_Ack(); ( h" v8 S1 _5 N. E! q0 z
- Write_IIC_Byte(IIC_Command); - K* y2 E: [4 b N8 L0 l
- IIC_Wait_Ack(); + H+ a2 `3 C3 x& ]6 L# D/ i# y
- IIC_Stop();$ M, x6 S9 g! H3 N9 c. h
- }; g- j; X# N% Q6 b; T h6 h( Q6 q/ A
- void Write_IIC_Data(unsigned char IIC_Data)) c Y6 _- y6 k3 I8 p
- {
6 A: W/ [) u( W - IIC_Start();
6 `9 p0 y( ], b3 i7 U0 h - Write_IIC_Byte(0x78);% O* W& A3 K. ^$ V& K; O. U
- IIC_Wait_Ack();
8 k, R- G9 W U I) y6 E# w - Write_IIC_Byte(0x40);! e$ z; _1 G$ a; J
- IIC_Wait_Ack(); ! P3 i: P" u# p, }0 Z$ |, e6 d$ W
- Write_IIC_Byte(IIC_Data);
. w5 ] m1 s. S6 v' i: j/ V - IIC_Wait_Ack(); ! Q+ ^" W$ B, w% k* {0 K
- IIC_Stop();7 A( u2 I0 q* A( w
- } t/ w `8 K0 u1 T6 N! Q
- void OLED_WR_Byte(unsigned dat,unsigned cmd)
! z4 A7 V+ F0 A2 y - {) |2 d k, Z B: n; U( W/ Q3 T
- if(cmd)
* K z/ e* f8 E - {- i5 g! K, {: x) N5 k
- Write_IIC_Data(dat);+ r1 P0 E; O' u
- }
" h# x7 b9 y! U; H - else7 m' x2 K9 E; T& [! }7 K+ B
- {
1 _$ w+ C& M7 d: \ - Write_IIC_Command(dat);
# O4 D( N% V: m- ` - }3 ` j8 G: ~9 L- ]7 a. X+ t
- }$ q O1 \2 i! O! t- N& i
- void OLED_Display_On(void)
. e M' G, Z$ W+ f7 {# x- Q - {
' w0 o9 b/ {3 t# a - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
! I) z4 R$ f! [3 |- } - OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON, f3 C+ Y* r% o3 @& Q4 `" j
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON: Z# c+ F' [7 H/ m9 M
- } 4 X% x3 e" o: q% Y4 c
- void OLED_Display_Off(void)
/ u4 J q8 z" s+ Q& @3 l - {
" u0 n/ |, @& j+ n7 J! ]3 f - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
- \7 d7 J- V$ _ - OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
9 C. I& Z* ]- }5 {& n - OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
, e! j7 c0 A8 R, j( Y; \' R0 s" u2 n - }
复制代码- void OLED_Clear(void)
5 M) |6 b( c- F" j' P! l$ k - {
/ a7 M3 i- V! u# ?0 D - u8 i,n; 4 b& ^3 W7 S, \8 V" U
- for(i=0;i<8;i++) 2 Y( b& D$ a- p2 R3 a! ^
- { 6 K& Z& l, S- u7 |6 Y2 K2 i% ]
- OLED_WR_Byte (0xb0+i,OLED_CMD);
9 Q4 r7 z1 `! k. r) Z5 n - OLED_WR_Byte (0x00,OLED_CMD);
6 O' T B: C) r1 C9 [3 B' W* [ n - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
- C! L1 d, S' [5 J2 i/ |2 {: N% C - } 4 d3 i1 k2 f6 A
- }
( J+ D8 n7 {4 ]% U% v - void OLED_On(void)
2 u3 m" M, i) }: }1 d - { {9 P- a. ~* y, {( J7 q
- u8 i,n;
. r% R6 D0 T, R* \! @6 l - for(i=0;i<8;i++)
8 _7 c( ~% t! y# I* t - { $ W. D1 W- R9 G' u' }4 L
- OLED_WR_Byte (0xb0+i,OLED_CMD);/ S6 d n: q6 z2 f
- OLED_WR_Byte (0x00,OLED_CMD);
% A% G- G3 s' c5 M, F: q - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 7 G! n, N$ J( V+ @7 @8 U n
- }
/ a: ~* b! j! n5 w8 U - } K. a' x9 \- G4 O
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)0 X( s* L% H& \ `3 P$ S: s- v
- { : p( }$ V% I5 X' x
- unsigned char c=0,i=0;
' z3 z% ]& L$ z9 \* f - c=chr-' ';/ r$ i J- X! e+ T1 G5 U# t' d
- if(x>Max_Column-1){x=0;y=y+2;}. C. f0 q. [4 ~+ [
- if(Char_Size ==16)
. T' y3 H: {( L* `3 ~ - {' H1 h. ~; |1 Z3 V! W
- OLED_Set_Pos(x,y);
' y1 p; B( ^/ D) h4 d! w1 U$ a - for(i=0;i<8;i++)2 N7 C: A" z* _( p/ }/ z; Z# X
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
+ a& c- S8 G" g1 Y! M" U - OLED_Set_Pos(x,y+1);
% I" O o$ ]4 i4 y" h+ I - for(i=0;i<8;i++)
8 ^% @, }# `; R ]3 Z2 x6 \ - OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);0 F! C# W8 ]# |. ?
- }
1 Z. O4 a$ t. J( H - else {
2 V1 p2 R7 D V - OLED_Set_Pos(x,y);: H, |9 {0 v- G) R4 f' }
- for(i=0;i<6;i++)
# H' X6 _1 ?& U0 C% N - OLED_WR_Byte(F6x8[c][i],OLED_DATA); * k$ f* M! [5 P+ A& D( Y
- }
# B* i5 y; z' b: z0 K( H# z - }) Q6 _# }4 {8 Z3 S' Y. a
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
1 o O. M* z; |' I6 x- G - { ! W. c4 Y& n4 T/ `
- u8 t,temp;
; J' n3 E% T9 Q% ?+ g - u8 enshow=0;
2 W5 Z' h& q) l) d9 Z/ S7 H% F - for(t=0;t<len;t++)5 e3 T3 U Z7 ^& d+ C \/ L
- {
( `2 a4 g' W' D+ f2 s# S - temp=(num/oled_pow(10,len-t-1))%10;
" f9 {) u" r. M, e$ _) X - if(enshow==0&&t<(len-1))* b* H) d8 }( R. f0 D
- {/ V, O) q& |5 Z7 x! o6 Z7 Y# [- J7 |
- if(temp==0)8 H3 n" t- j/ n ~+ b M" O+ y
- {# N5 u# u0 k; u2 y. A0 W6 Q# d
- OLED_ShowChar(x+(size2/2)*t,y,' ',size2);! j3 r5 h x2 r }
- continue;
2 E7 ^) B( U7 T: q# s i - }else enshow=1;
+ p$ |5 f1 W- k7 S; Z - * |( D- F N2 ~2 x2 S4 F$ j
- }
9 O$ Q. @. t) \0 @2 }( b - OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
; t# P; z5 h, h8 i6 E - } I3 B- ^0 B2 Y4 ^+ g. k
- }
6 z! Z$ b7 S3 Q. {0 v" J - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
; H% Y7 f( m2 M# _$ l4 v& n: J# ^ - {
# H. B3 r& F( a! h - unsigned char j=0;! u2 Q* {9 |9 d3 I5 j2 p
- while (chr[j]!='\0')
9 H# l$ {. T9 ^6 ] - { OLED_ShowChar(x,y,chr[j],Char_Size);3 `9 I5 d2 ` e3 T' r6 E( `
- x+=8;
) q' W, S1 f7 ^- T& E+ k, ` - if(x>120){x=0;y+=2;}
! D! v+ {! T' q, L - j++;" W) u' S, t1 t9 ^ T
- }2 ^5 d* v9 E! Z/ f4 l$ H6 ^
- }
$ S% p8 d7 M3 r; V$ Z I
) E2 Z: n2 \+ Z- void OLED_ShowCHinese(u8 x,u8 y,u8 no)
3 g/ B4 n- ~" S3 @/ d7 f; p' Q6 R - { 0 ?' O5 y! J1 x0 `6 u* o! ?. I
- u8 t,adder=0;
2 K7 \0 q2 p$ T - OLED_Set_Pos(x,y);
# I6 v2 F0 q: f - for(t=0;t<16;t++)# u2 L6 ^ E5 `& K: q0 r
- {$ N; @+ P6 A( A- T& @6 o* P$ y
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);6 r& N6 T v Y( W# }8 B2 K# U
- adder+=1;
9 @8 c! A2 {) T8 z - }
- o$ I: c& Z8 z( V - OLED_Set_Pos(x,y+1); + O9 Z: j; {2 l- J& ?- W$ h$ o
- for(t=0;t<16;t++) X- g; e1 ?( T
- { ( V$ _2 q; T1 i
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
4 q1 Z- J9 s( U( I. Z2 f$ B# z0 @$ J - adder+=1;
4 V6 } Z. y6 j6 u" \ - } # j, G9 h* n4 F' \2 E0 N
- }
' M% E+ X! G( k- U. ` - 3 g0 ]* w; m( M5 _1 x* |- S
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
' ]& w! H: N' F2 w - { 4 @- V1 o) s: j" a/ e
- unsigned int j=0;
3 Y d ^1 D4 ~; L. i0 B - unsigned char x,y;
% F' F p' C4 v, u* v4 X) |4 d - 2 z9 G2 p( w) `, J/ L/ B
- if(y1%8==0) y=y1/8; ( `6 y! v- A0 k; [- X2 m
- else y=y1/8+1;
( X# r3 F. G+ M# A# c - for(y=y0;y<y1;y++)
3 l+ L- q- `& n2 |! ^6 P - {9 d- z8 N7 S$ }; \9 G- l4 q- v6 s
- OLED_Set_Pos(x0,y);6 h. n7 s ^ W! W; E/ X) |) o* Y
- for(x=x0;x<x1;x++)
) G' L/ x1 {3 k4 j% G - { b9 l6 R' q" u- t8 C; L& K8 L
- OLED_WR_Byte(BMP[j++],OLED_DATA); , B! T: ?! [& d8 J- g, c8 m
- }
) i; W/ Z2 D- P& ^; T1 j2 P - }
6 z7 t; t( i& \: S - } ! x( O8 w- O$ D4 P# T. D3 i. c
b2 b6 _1 X& Y2 }6 l- @1 N( l- void OLED_Init(void), `# d4 i( n& ]: Q* W8 ]
- {
/ k g4 V0 w. G# ^% h* a; V" D - GPIO_InitTypeDef GPIO_InitStructure;
2 q( x. U$ r9 C# V% Z( R- p, m - 5 M8 x" P6 s/ E9 h
- OLED_GPIO_CLK_ENABLE(); 8 {- I; v' g0 k% F
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;
5 c8 f4 _3 x2 I7 i6 L; d, X' v& ~ - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;9 w+ I( I) q3 @; C
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;& }$ A* b$ e& |5 p+ h
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure);
8 Y7 D+ |5 O3 N$ Z1 C - HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
; R9 w/ I$ f J) o$ t; W- l4 D! O - HAL_Delay(200);: O( D9 t9 u% R/ @( E- r" O) ~
- OLED_WR_Byte(0xAE,OLED_CMD);9 g8 M' E' |( }+ k
- //display off
' u( R4 H4 D. Q# ]; \5 ] - OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
' J$ p) [) s+ ]6 j5 A% K. N - OLED_WR_Byte(0x10,OLED_CMD);//---set high column address& u( Z B! z! N* W6 z* l5 b# t9 N7 h
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address ; n, N6 U. q( z: n m
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
1 C/ H0 e n4 E; r" X - OLED_WR_Byte(0x81,OLED_CMD); // contract control
( {' H: b2 u# k& e" F0 X - OLED_WR_Byte(0xFF,OLED_CMD);//--128 8 B* Y: C* B5 \+ k2 g
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
# U1 c" \, N7 U. E2 X Q0 f( U - OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse5 E! [) i) T' }; L7 y( ~( Q! r
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)) H- Q. B( v4 r9 o% v
- OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty5 Q# W6 ]+ {% Y: F# T
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
1 a9 Z6 q; l* K9 \ - OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset, t" z1 Z! B' f3 ?* ]$ j! o
- OLED_WR_Byte(0x00,OLED_CMD);//4 l; O/ v; `" A
-
: D2 ^ @: c/ C9 g - OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
: l, p! H' _4 B7 i# a- V3 |) v' Y - OLED_WR_Byte(0x80,OLED_CMD);//4 e4 h; q; b2 L5 W
-
: W7 ]: K+ G7 | - OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
. ^+ A, H- L4 p - OLED_WR_Byte(0x05,OLED_CMD);//
9 Y# s1 y/ h7 ~& N. s! s! T - 0 i4 g" r+ r' u! ]' o( {, v
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period/ c! P8 [' ^* u4 d* X
- OLED_WR_Byte(0xF1,OLED_CMD);//
1 x2 f6 G" r6 L -
- o" d) J4 S* @( J0 C0 V/ @ - OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion9 e1 X$ w! i, R; ?4 n* o
- OLED_WR_Byte(0x12,OLED_CMD);//
/ y% z0 t' d" `/ d- K" e - $ n2 n; U: q0 B5 a8 e# P' c0 N
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
# g: [! v. \! b$ O4 G4 m& u - OLED_WR_Byte(0x30,OLED_CMD);//! p, A! F" b/ W! z- @# S% O
-
6 r, e4 q6 |3 o, x; w - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable" x" j& D- }+ Z# V! s3 p
- OLED_WR_Byte(0x14,OLED_CMD);//6 ~# [- Q! P s7 C( Q
- ! f% l* a7 E9 L6 j; b
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
: N6 A! ?8 }/ x0 F3 E - }
复制代码- #ifndef __OLED_H3 j3 k( `7 W0 V/ c
- #define __OLED_H 6 l$ X; F3 }) }4 v7 v
- #include "stdlib.h"
7 z, T+ y; f8 c - #include "stm32g4xx_nucleo.h"
0 B+ n( `2 O' z- u o - #define OLED_MODE 0. L$ o* F' v2 K+ [9 c( x! F
- #define SIZE 8
! b1 ~5 `" Q. V% A# q. m2 k - #define XLevelL 0x00, F+ L7 j$ I( k: ?0 n4 b
- #define XLevelH 0x10
$ x/ `9 l/ I' R. A$ N& ~- K V - #define Max_Column 128) t) z9 B B% q5 q& c+ ^7 s
- #define Max_Row 649 n% C+ N, y; o* |9 @
- #define Brightness 0xFF
8 V2 l v9 ^9 c, n% m - #define X_WIDTH 128
v& x$ z% t5 r0 ]& I/ g( { - #define Y_WIDTH 64 * v0 R4 F: t! o2 R+ O1 Q7 V1 v/ ^; O
- #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
; T$ F; q( T& U2 R9 V - #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)+ f; D( A* E1 X- B- U
- Z$ b S9 k# Y: t& F
- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
/ E e9 K1 t8 l( f; c: e$ R+ C+ C2 z - #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET): X: d/ [0 L0 u
- R) y0 O$ s& o
- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES5 ]. H3 u; M1 I# [
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
1 L, V' n, d8 t6 W -
9 z. z5 O4 \, m9 N; Z) Z% W3 A - #define OLED_CMD 0
0 j5 Y6 `0 \% g$ _4 |& K ^" H - #define OLED_DATA 1" c5 F5 F% Q2 E J
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() % X) Z$ G; O2 @) w
- #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE(): A: n) O0 F$ `8 n5 I, l' g
. {. ^* t, f; {0 U- void OLED_WR_Byte(unsigned dat,unsigned cmd); 4 v: Q3 K- W& Y9 e9 k
- void OLED_Display_On(void);* a# U' f! P- V/ C; f- ?' q; j$ ]; |
- void OLED_Display_Off(void);
. w! S9 Q3 H! [3 ~) q$ ^9 k/ I - void OLED_Init(void);
( v6 i- N6 u* N, b. r - void OLED_Clear(void);
: e6 i% R" [! ] l9 b% L2 w S - void OLED_DrawPoint(u8 x,u8 y,u8 t);. L q: k9 | x
- void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);) B! n) f& z- l& j# h9 w$ H
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);" \ L9 s& |3 Q$ S& b6 E. ]: g
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
2 y; t/ J4 O v H8 F - void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
( }* z/ U. n1 j& z - void OLED_Set_Pos(unsigned char x, unsigned char y);
' U3 O2 R x8 i, i/ } - void OLED_ShowCHinese(u8 x,u8 y,u8 no);# c2 w. `- }; L9 t3 E
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
1 w! V+ V) w. V - void Delay_50ms(unsigned int Del_50ms);" A1 n: m+ r! w5 x5 D
- void Delay_1ms(unsigned int Del_1ms);) h/ l4 V3 ^. R" Q/ F0 C) ^
- void fill_picture(unsigned char fill_Data);
+ Y( `' w- D3 t& f4 V - void Picture(void);0 I& q. @' {- G$ G- H! [
- void IIC_Start(void);
" {7 {# x" Z2 p5 T, h: b( S - void IIC_Stop(void);. J+ E; s l: b; m' f- q9 G
- void Write_IIC_Command(unsigned char IIC_Command);
8 y& Y( J: f0 @, o& A4 } - void Write_IIC_Data(unsigned char IIC_Data);7 T2 S2 R1 k' V9 H- ]
- void Write_IIC_Byte(unsigned char IIC_Byte);5 A/ U+ d. D% {) ^ `1 z3 [$ l
- void Display_Battery_Level(void);& j" v% ]6 u3 h! ]. k
- void IIC_Wait_Ack(void);/ l0 M3 E+ [4 h: s0 _
- #endif
复制代码- int main(void) ?# i) ~) I6 o
- {. D% G0 K; v. h% {; m9 u
- HAL_Init();8 {1 q" l2 I, j0 P4 H
- ; S( F* l, Q) _5 V3 ^% `2 L$ P
- OLED_Init();8 z2 L8 ?+ m$ o' b1 N6 I4 I2 C
- OLED_Clear(); * z3 k! O" b6 K- M5 }8 q9 G1 @# I
- SystemClock_Config();: w5 q6 D' f5 Y9 q1 F3 p& A, h
- 8 i# K4 O$ S: |
- BSP_LED_Init(LED2);
* U; \3 d/ N5 r& e( K - EXTI15_10_IRQHandler_Config();7 l. j/ R4 z _2 |# ` k5 n: c
- 3 T& }& G0 |! K* W+ n$ B% n
- while(1)
, r. V: \8 {) z1 g: X - {, o8 E* `4 _7 y5 u
- OLED_ShowString(0,0,(unsigned char *)"STM32",16);
+ K) {( i P4 F9 g - OLED_ShowCHinese(45,0,2);//
i% }# f) n; x/ N' s - OLED_ShowCHinese(63,0,3);//* M8 K8 W) B, K! v; K- A" k
- OLED_ShowCHinese(81,0,4);//& @& c2 l8 Y6 z/ n3 ?: [
- OLED_ShowCHinese(99,0,5);//
; Y* C4 p8 P$ Q+ u$ Z - OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16); . X; ~$ [/ n. q1 {! G! G
- OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);" ?4 a' X! O/ w2 Z" k4 v U8 v
- }
6 J; a8 e: G5 z9 v1 {$ Q6 B3 h/ g - }
: `9 |1 q( N( V
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
/ h" Y4 F. I" j5 ?
+ I" ]; K. v* E" C/ ]
2 }4 {# S, G6 H& P0 j1 [$ A" Q |