国庆假期即将结束,回顾这些天的休息调整,今天拿出来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
* O0 b9 s0 Z0 o: g, b4 z
部分代码如下:
4 [6 @" I, a; K) `$ O2 g- u8 ^/ |9 R' @# N
- void IIC_Start()) s8 @+ S4 ^: j/ ]
- {/ }$ ]) N, d- f
- 7 v8 B3 `( M; j1 a$ z0 [( x
- OLED_SCLK_Set() ;
3 [9 R N. d$ @* E1 C' g R - OLED_SDIN_Set();: ^% |8 \' j1 I2 a; @/ j
- OLED_SDIN_Clr();7 C" B6 z8 R0 ?7 {( m
- OLED_SCLK_Clr();0 g: x+ N( J5 a; _1 i% K& f
- }# g8 V% {& ]7 |- \
- void IIC_Stop()$ K& P# V9 j! b+ I) }
- {
; h9 d/ v- B/ ]% S M- R - OLED_SCLK_Set() ;
3 |1 `( S$ s1 L4 m& s1 f* C( a" a - OLED_SDIN_Clr();; h5 z S3 D9 g- O+ \- Y
- OLED_SDIN_Set();
# P2 o$ ~ |& o! E0 J8 A# P - }
8 \$ b1 W$ H- h7 f1 A6 t) I - void IIC_Wait_Ack()/ H- `; q) ]( j- l# h# Q5 b: n. ?( q
- {
; X& t6 ~( o, c; B) T - OLED_SCLK_Set() ;( q5 z( \4 q7 m5 V
- OLED_SCLK_Clr();+ H+ @9 ?3 `8 B" j
- }1 q# I, R$ r7 ]8 W; i) \* C5 ^4 U
- void Write_IIC_Byte(unsigned char IIC_Byte)
7 Q; G' I7 I2 i) l+ O - {) \& W( d2 R \( \
- unsigned char i;- V3 J8 N( N- O; ~" H x& o# Q
- unsigned char m,da;
& O8 S, g$ [$ d3 S7 V! z. j - da=IIC_Byte;5 |' t; {) @$ y
- OLED_SCLK_Clr();2 }6 J5 H% w6 N6 f
- for(i=0;i<8;i++)
+ U4 h! ?) A; Z+ J) A. R! R8 J - {
0 u, `, u6 t3 |& D* A+ q; ? - m=da;
% n! R u4 Y6 ^ D# @7 ^5 [ - m=m&0x80;
4 ]% w7 `( _+ R8 M$ [3 I H7 k - if(m==0x80)
5 h @7 d& x$ N( R3 I9 v - {OLED_SDIN_Set();}( B' o4 v9 V: m" t6 f
- else OLED_SDIN_Clr();. E' g1 `+ c7 r# w2 k% k
- da=da<<1;1 N. S: q& A2 Z, f) Q, T
- OLED_SCLK_Set();
! C+ j9 I( i% w! {% c - OLED_SCLK_Clr();4 _2 E9 O/ H9 O! W! U) @3 ? o9 B
- }
2 [) \% p1 ]. n. D. b - }
# C* j4 m# ?, c - void Write_IIC_Command(unsigned char IIC_Command)
1 n2 O' E" u: p7 [ ?- H8 i$ a - {& z8 ]: |" h" Y' z# [& U* f
- IIC_Start();5 c+ a' U8 Q c" \, C
- Write_IIC_Byte(0x78);
: M% F: _# [0 f, e - IIC_Wait_Ack(); ' B4 D; R% ?3 u. J( c
- Write_IIC_Byte(0x00);
! S9 z( t6 k; d1 n5 W - IIC_Wait_Ack();
6 X( e, }9 I3 e2 A. t - Write_IIC_Byte(IIC_Command); ) u* {9 i: A/ I
- IIC_Wait_Ack();
7 G% Y1 `# k4 G% E' O - IIC_Stop();, Q+ {1 U" a% |# ^- a6 l
- }2 g5 g) T% R8 b" F/ L; e: k5 N
- void Write_IIC_Data(unsigned char IIC_Data): |6 @0 C% q9 h3 Y0 I
- {
2 I4 N. p8 i* m - IIC_Start();8 W$ G* b; C* S$ Q/ v6 z) ?
- Write_IIC_Byte(0x78);1 \ t' P! P) H# n7 d! D1 u Y
- IIC_Wait_Ack();
5 |1 e, d' f- w% h0 H o - Write_IIC_Byte(0x40);
, M$ W$ q, j% s. y - IIC_Wait_Ack(); 1 o# }# f" Y* h
- Write_IIC_Byte(IIC_Data);
R% }+ N/ p4 k$ E - IIC_Wait_Ack();
F7 Q; H# R4 N6 V/ } - IIC_Stop();
; T6 U8 n+ X+ y2 ]3 \ - }
# V% U/ B) r8 f* [& x1 q4 K - void OLED_WR_Byte(unsigned dat,unsigned cmd)9 |; Y: a* b& B# \4 [' r
- {1 N( r6 q. N# @! U5 d( z4 v
- if(cmd)
5 Z8 ~' G" Q' k" q, G* {0 O8 b - {
: f) s( C4 R0 Y - Write_IIC_Data(dat);6 _) G) J2 e+ u. I7 Y- x
- }
5 b! l: G* |& b! M4 Z - else
! v* h5 v( j. E4 X; z/ e9 i - {
2 |' ?! Y( {5 }3 o; Q6 o- Q" ^ - Write_IIC_Command(dat);
" W6 Y$ w% Z* [: \* ] - } w8 b6 Z' V/ n1 x+ o: ?5 H
- }
. b* G( U# g" s( a" m s1 } - void OLED_Display_On(void)
" I6 ?7 T1 i5 S4 u, h - {
9 ~7 S% Z, j1 M- l! b - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
/ O& Y0 g; t5 b0 h/ b - OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON- {2 N# n4 _9 R, Y: w$ {( h" \+ k& c( @
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
4 P" o) |6 s- h3 e+ g( T6 N" {( I - }
# r3 }( E- c: {$ { - void OLED_Display_Off(void)# V- |' F9 N! G4 n8 v
- {
2 Y! ]; G% X1 N& K9 w" m1 T0 v0 P - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
- x$ c7 g+ l" K - OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF$ Z0 Z J) c7 A- ~& `
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
2 e* v1 s7 |0 v - }
复制代码- void OLED_Clear(void)
5 \ R- Y) j% R0 b+ g - { % \/ j* o7 |6 K& c$ c/ ~* q- u( G- ]
- u8 i,n; 0 X. [# X) |2 o8 @& U( ?
- for(i=0;i<8;i++)
, }3 l- z; L! d+ e - { " V7 ?7 V, m: X( \' _/ w1 }) I
- OLED_WR_Byte (0xb0+i,OLED_CMD);
* M$ u9 R$ X1 Q% B1 F# x. L - OLED_WR_Byte (0x00,OLED_CMD);% x; K! f- V" k9 q+ g( D5 q& q
- 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 - }
5 ^* S5 j G8 `" x( U - }
1 |( t$ H; v8 o$ w/ q, o/ Z - void OLED_On(void)
$ A7 a( T1 O3 Y% T9 N! p' _ - {
: x5 n) f% V0 L; j" m- i - u8 i,n;
' v) R: q& i: r - for(i=0;i<8;i++)
/ y8 J9 l4 [) V2 q2 H - {
- B* m* @* e* F: T- H8 b) o8 ` - OLED_WR_Byte (0xb0+i,OLED_CMD);7 F& s+ y* E u: l5 t4 Z
- OLED_WR_Byte (0x00,OLED_CMD);
% f& e& O% ]* ]8 l - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
& `: S* | \; x0 o! W; ~ - }
2 M s3 z2 ^9 s0 D! t - }- \- d( Y- Z! t1 U9 @+ _
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)
2 \/ Q$ t0 Z, y# V8 B - { : B/ O. ?, z6 w% v
- unsigned char c=0,i=0; 7 E% ~; q4 m- `
- c=chr-' ';
1 i4 ?0 W( x w1 N* m - if(x>Max_Column-1){x=0;y=y+2;}8 x+ n* l$ R& V1 ]; H% [
- if(Char_Size ==16)
' o$ u* e5 t+ q( n( Y - {
7 M" H* j4 q" A5 E1 o: k, P* D: n - OLED_Set_Pos(x,y); . K: B. S' J1 L8 Z/ M# I
- for(i=0;i<8;i++)
/ A. | A0 B0 m( j4 K - OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);0 M2 {2 f g$ H v0 b* k: h
- OLED_Set_Pos(x,y+1);
6 x6 e& f# s( A J - for(i=0;i<8;i++)
2 |% N, x; z1 U) w - OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
6 I2 s! e/ V3 r, j - }0 j. ]( M" l1 B2 T6 r/ x
- else {
: @7 o- s5 r0 M - OLED_Set_Pos(x,y);
) z; R$ V% I/ j* A" c - for(i=0;i<6;i++)9 t7 m5 D4 b5 S" G7 X! Y- X
- OLED_WR_Byte(F6x8[c][i],OLED_DATA);
, q* \- E. {5 g- j) O! r# @) W - }, n1 J1 y/ B- C5 s$ ]
- }8 ~, a/ m+ t; p7 s ` p6 {
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)- K' S6 v0 Z2 t
- {
" w% g/ K- [2 Z7 {2 ]. l. B- w - u8 t,temp;, b1 R; A& ~" v! X8 C
- u8 enshow=0;
1 C2 n- [4 N/ t+ ~9 L: Y$ M0 P - for(t=0;t<len;t++)
" C0 S7 U5 N2 @9 F - {
- Y9 \4 n! h5 [; |+ U - temp=(num/oled_pow(10,len-t-1))%10;
J4 f3 j% y; D - if(enshow==0&&t<(len-1))/ m' c6 H9 q! H7 |
- {
F% N# w. b! ~" P9 C - if(temp==0)* M) S( Y, W6 L* u& E& E& c6 p3 ^# _
- {6 Q7 Y# E2 C4 O& _+ g/ j6 Y: Q, Y& `
- OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
4 `9 O( d7 ]0 A3 [1 W8 y8 \: o" M - continue;
% y9 Y3 K' Q! Q3 A/ R a - }else enshow=1;
$ M: ^( z( X- N Z7 }. B - 5 g: K% K$ ^6 i* J) ?8 K
- }
6 e3 \6 E3 h# a+ k0 M! h) `" @# ? - OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 7 e0 D8 {: L, U# k
- }! M- D2 ? h" t/ p5 Q8 V# L
- }
# R+ H7 A6 w5 ~; |8 J, X. R: r# } - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size): f- G) Q1 a! E; J% ]; E
- {: s. W! m. T# u" ^
- unsigned char j=0;
H9 }) n8 m5 ^ b' l" g - while (chr[j]!='\0')
+ k* [% P Z; b" m& E5 Q5 e, P4 j0 \ - { OLED_ShowChar(x,y,chr[j],Char_Size);
! h/ n% s& P8 m1 f9 n - x+=8;. |, Z) s4 i% D4 F8 I+ _
- if(x>120){x=0;y+=2;}% S- k8 K, C- R* R8 d5 b
- j++;
. V3 h5 x0 W" [, r `+ { - } S3 Z) l; h9 t" h
- }' |8 V, Y* T I, ]7 P& ?& m0 z" t6 `. L
- + o) B* H! M% U
- void OLED_ShowCHinese(u8 x,u8 y,u8 no)$ Q' I+ @, p+ d4 R( q0 z
- {
. w% E p- Y i0 U9 y' K- ~ - u8 t,adder=0;9 C2 P5 K: W+ i9 @
- OLED_Set_Pos(x,y);
# y3 y2 H$ E' {. o7 M6 K" ]: E, R - for(t=0;t<16;t++)
Y6 x! T( z# M$ I9 v - {
* G4 z9 U0 x8 [, k - OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);5 W% l* ~: W W7 `' G
- adder+=1;
3 |7 r; \, o2 l. u* W& Z% L - } / Q0 J' q5 W1 L4 y& S- j0 e
- OLED_Set_Pos(x,y+1);
; s) o _$ [5 w" V: ~; u - for(t=0;t<16;t++)
5 o5 Z6 C. w$ h" ?3 X& o6 a) l - { V" q+ b; E. l0 P @" v
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);. ]0 ~4 g3 \$ y$ r1 e" a4 M- ]
- adder+=1;
( M6 M& [8 O2 v4 U - } ; L, y! W! A6 R2 R0 f) E( T' R8 `
- }: _4 [: S* T. J2 B& J+ T
, \4 p1 i! _6 n; [3 I6 c- 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
- { & H1 q7 G3 m6 u6 g
- unsigned int j=0;2 I, `1 e- Z( c
- unsigned char x,y;
# h7 w1 a/ g* D: a+ e! ~ - 6 n2 e! g7 s5 y6 |2 W
- if(y1%8==0) y=y1/8;
' t I$ C: k( _- s - else y=y1/8+1;% a M, g+ T/ D4 W; R* ?
- for(y=y0;y<y1;y++)# O) A% o2 [, Z8 l& D; q" i) d. X
- {
" u) \7 Z7 B" B - OLED_Set_Pos(x0,y);
4 T" b8 L( E" f% ]! d5 n - for(x=x0;x<x1;x++)
- C( M2 u7 X5 s2 g, N! f - {
+ ] x; v# O7 u. [ - OLED_WR_Byte(BMP[j++],OLED_DATA);
' N4 [, F3 i9 `2 ? E - }8 I2 u2 v" c! {: j
- }
7 Q+ F) k) G4 D9 d; n( @; K9 i; N3 T - } * f& ~; I- w, @
- * T! I2 ~5 h0 f& n5 N/ f
- void OLED_Init(void)
5 Y- Y' z, c! Y( b - { # k7 ~# V8 p5 u& w+ t
- GPIO_InitTypeDef GPIO_InitStructure;
$ O+ s) G4 J: { -
! Q+ |# y/ S2 ?8 A1 U+ j - OLED_GPIO_CLK_ENABLE(); ' F; U1 m: p: z; {* S+ f
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9; " f% l1 R* {! G1 q7 R7 [
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
F* T% h: p. b) p, u! g - GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
4 {' T2 @9 o4 m0 q - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); V8 k# I+ W) h, C0 A" C' I6 P
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);8 ?& t4 u* ?9 A, `/ I
- HAL_Delay(200);0 Y% P- L2 l9 e
- OLED_WR_Byte(0xAE,OLED_CMD);
3 {" j! N4 [" u- Y4 E - //display off
. M7 b- O# f" W( c; n- ^ - OLED_WR_Byte(0x00,OLED_CMD);//---set low column address. S2 F, J2 _' f i; O
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address3 k( A; q p. g0 E/ {
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address / W# V. j' m2 k. \, d4 [. X
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address- Z8 |6 C; ?4 i- k$ u
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
J9 L6 q" y" i* U6 q( t - OLED_WR_Byte(0xFF,OLED_CMD);//--128
' ~7 b+ B7 X: x; z, R8 D* s( k. |2 D; K - OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 4 m: X. D' l/ H" [4 `$ K( U% x
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse) u6 G7 L3 D/ N& k$ |& v8 k# m8 @ C9 U, N
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
8 e+ w4 P6 Q5 ]5 L - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
- j( |& h) Q/ v0 q) X" G - OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction) m! r1 ]+ F" G; ^6 Y' V
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
0 `3 p2 c- B% ]! n - OLED_WR_Byte(0x00,OLED_CMD);//
* v: R- y% K$ }/ G5 H4 o" C - , S: h9 I* v1 I
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
3 Q# ^3 u c7 F' ~ - OLED_WR_Byte(0x80,OLED_CMD);//
+ t. y* s# V p2 o7 K- T# b -
5 r6 @, K' H8 P/ M9 c, B - OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off5 E' k) N1 D; r+ s/ t9 K
- OLED_WR_Byte(0x05,OLED_CMD);//
6 O$ s8 r8 M) t9 G6 v$ p1 ?" F - 0 n" M% _. H8 d" m8 B; h7 b) Z
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period$ ^( J/ L* P( j+ Y
- OLED_WR_Byte(0xF1,OLED_CMD);//8 N7 _+ e# m8 N5 \" U3 l
-
; V# u2 c; s4 ^+ L- L; } - OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion7 Z. ?) B. e* j
- OLED_WR_Byte(0x12,OLED_CMD);//2 n; U2 h4 Z u1 G, n/ ~4 I
- * |; F; b3 p" U$ s
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
# S6 z# `6 ?/ i8 P3 Q - OLED_WR_Byte(0x30,OLED_CMD);//! D/ G: s3 Z+ ^% J) i
-
! O& |* X+ v% |8 J& j - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
, A% ^9 G; z J, [7 F - OLED_WR_Byte(0x14,OLED_CMD);//% J& c" n; B$ A
- " J- g1 a' H0 B. E5 i
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
% X5 s+ D$ v: r5 {8 Z - }
复制代码- #ifndef __OLED_H- _, h. l" |( h) G) H* c
- #define __OLED_H " h2 N+ |. H' |. ~6 m
- #include "stdlib.h"& @8 r @5 T% _4 S# i
- #include "stm32g4xx_nucleo.h"
( F7 H! W: {7 K& v! @- r1 V - #define OLED_MODE 02 u$ p9 {! L! n/ J
- #define SIZE 8: A8 ^$ F4 X ~
- #define XLevelL 0x00
9 Q% v/ @9 Z) v6 [1 d. G' m - #define XLevelH 0x10
& g3 }2 X' r' m" M - #define Max_Column 1281 L: s V$ t' U0 H8 \
- #define Max_Row 64# _( F" b7 b: O% a% a, k
- #define Brightness 0xFF
9 W; Q7 \+ g/ x7 u; \ - #define X_WIDTH 128
; t8 `! W! B7 ^8 y - #define Y_WIDTH 64 & O: w. f" H9 C" h/ J! \& ?, E
- #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK8 ^: Q4 o* n; O/ \% M) O
- #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
8 M& A0 c. R7 [
% \! ^; r0 \, H8 c/ t# D- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN, C4 J; _% Z& V* h! l. S6 _* ] n
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)
4 G" o* o5 {, e# h% z
5 y" k: w4 v( R! p5 s- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES- ]% h/ F3 ^0 y1 Z
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
4 P- e, _+ M6 w- s - : ^1 e" b) S M* [* Z8 P" C) u: L
- #define OLED_CMD 0
. I2 @2 ~; b" _ - #define OLED_DATA 1+ {/ d* {+ A4 C5 K( W
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() 1 R, @- k, n: I% i: L% Y8 E
- #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()9 D, S1 c! _4 K1 X% @/ _ m
- . f! Y& r* E- K- E" ?* H
- void OLED_WR_Byte(unsigned dat,unsigned cmd); x, ^0 z9 F3 ]1 c( ^0 K
- void OLED_Display_On(void);
5 `7 ^' I1 b: C% ] - void OLED_Display_Off(void); / e) W1 L. f- D+ B
- void OLED_Init(void);
2 u9 V* _8 A' L* S - void OLED_Clear(void);
+ X4 {" ~/ p! {: [( D" u. M7 Q - void OLED_DrawPoint(u8 x,u8 y,u8 t);
- X' O4 I2 d: A. E& d - void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
. a( I2 ~+ f! U' T" F* [) i* P& \ - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);" Y+ a9 |! E0 i8 x
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); 4 H1 |5 L/ x+ S4 J9 v/ a: s
- void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
+ X, K3 z: u" h1 I0 u# z - void OLED_Set_Pos(unsigned char x, unsigned char y);; e3 l1 G& |# w. u0 g, P
- void OLED_ShowCHinese(u8 x,u8 y,u8 no); q7 s# J6 r, ?% X& n# ]$ q5 Q; s
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
" a" J4 R( R4 W- } - void Delay_50ms(unsigned int Del_50ms);
: W6 j3 [8 ] g' z. o - void Delay_1ms(unsigned int Del_1ms);
& E' a6 m* v. P' @1 X7 b" V - void fill_picture(unsigned char fill_Data);
" f/ ~! |1 |7 W0 t1 s4 X" O( u1 o2 p - void Picture(void);
' a( ~; S! F, y. R - void IIC_Start(void);3 z# u+ p4 t# d( m. W" U, z
- void IIC_Stop(void);
. h9 h q: H s# ~0 N5 C - void Write_IIC_Command(unsigned char IIC_Command);" n( P6 d" |1 K4 [
- void Write_IIC_Data(unsigned char IIC_Data);
/ }9 Z2 t. }. W0 U. {/ [ - void Write_IIC_Byte(unsigned char IIC_Byte);, r/ `: Z& H! E5 O3 i
- void Display_Battery_Level(void);& g$ _+ f) N4 @! p( D
- void IIC_Wait_Ack(void);
0 Q; o& {" Q& E2 b - #endif
复制代码- int main(void)6 Q- i& G, i* y! @, O# N
- {- k1 a) c0 d5 t0 e0 g% v
- HAL_Init();( p1 h1 v e3 m" l2 @$ D! X3 E4 _
- " K) [3 N1 b# e2 r+ Q, u% o
- OLED_Init();
/ w; d. V; X1 ^2 G0 `. s' ~ - OLED_Clear();
! a0 b, p) b, n4 a - SystemClock_Config();
7 ^8 v. b0 Q/ j( z0 M/ T - + y9 K$ Z% B9 w( u
- BSP_LED_Init(LED2);% x% {* h6 H! H8 A4 r& J0 O' B3 P
- EXTI15_10_IRQHandler_Config();, E q6 _: l! c/ R/ n4 w3 D; l
- . v) X1 y9 |7 r" v
- while(1) 6 t2 h( p1 r p$ e+ k
- {6 k/ V* @3 w! N5 f9 N
- OLED_ShowString(0,0,(unsigned char *)"STM32",16);
2 t: b6 l+ ~- e - OLED_ShowCHinese(45,0,2);//7 v e) p! @* I' Y2 W! z
- OLED_ShowCHinese(63,0,3);//
4 j* W6 L9 }6 h - OLED_ShowCHinese(81,0,4);//
6 V+ Y e# j5 l - OLED_ShowCHinese(99,0,5);//
9 v! Q' d. V+ Y$ T% G - OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
6 Z+ G$ i; @4 Q1 y4 z& E0 \ - OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
9 \' u. w; x5 E; Q7 r - }
1 U8 q; w2 C# w* g" Z8 Z* u - }- S. e# ~; w. r( W* M( { G: {) g
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
/ Q/ U9 S, {- P4 @4 w
6 x% [; M. p$ M
. K' B# R( y0 t8 I+ g* x |