国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
% C+ p3 i9 Q* U: [, v0 k& I 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
' n5 f5 o, G1 O6 U; J: }% \
: U$ n0 L& O( ?+ Q0 Q( Y5 i
部分代码如下:
! ^+ y2 n1 L2 [0 b, S0 i: Z0 s( l6 p( m( ^* c- } z6 ]1 V
- void IIC_Start()' s# ^1 _; h# F& H8 {
- {/ f0 \7 {; ~: ~1 e, k$ d) t
- 4 t3 |* [* D' b9 J% n
- OLED_SCLK_Set() ;4 Y$ V9 |% v1 E
- OLED_SDIN_Set();
/ d: u$ {- s$ w" N1 H* Q! Q9 L G! F - OLED_SDIN_Clr();
! K& E+ I, h1 X" \ - OLED_SCLK_Clr();
3 v. Z! Y# L) k - }
0 h) n3 d& B) F2 y0 o6 d( w - void IIC_Stop()/ T7 d B) B- |4 H* _# \
- {* R9 \* x9 O3 r% E
- OLED_SCLK_Set() ;8 x& i' X- f% T5 w$ J
- OLED_SDIN_Clr();9 e1 a, C3 }1 l6 U) O
- OLED_SDIN_Set();
% o6 ^1 O' Q* \* |: y - }
" W% z6 M6 u" x, L( F - void IIC_Wait_Ack()
9 v3 z/ U$ q+ M4 M! ~9 u - {
! G2 P. G/ ~3 I/ j7 }: M7 { - OLED_SCLK_Set() ; N% u* z& ^7 u* ` o Q+ V" @6 D: V
- OLED_SCLK_Clr();! |, Q7 ~3 \8 }& v% \! ~
- }. P) l2 Y& N6 z( ?( M
- void Write_IIC_Byte(unsigned char IIC_Byte)2 r$ P! i: g2 `7 {) ]9 i$ {( c6 [
- {1 k1 a5 i0 l& @& I# h2 [6 ^
- unsigned char i;
2 L7 Y; E# S8 C/ S J6 m2 M' n - unsigned char m,da;
4 }' @: q8 P0 x3 z9 n& Q0 { - da=IIC_Byte;+ ^# W3 L8 J G" x \
- OLED_SCLK_Clr();* y2 c c1 s- U6 h+ c; L9 ?' Z
- for(i=0;i<8;i++)
% G& }6 a- m- N2 a; Z0 d$ j - {7 F( i; |9 Q5 q7 ]
- m=da;
, l8 E7 n2 r5 T& c! O8 |& a6 q - m=m&0x80;
) s3 D$ }4 ^& U1 }' {2 X - if(m==0x80)% z8 r2 f, S! f" X/ z5 M2 h4 K
- {OLED_SDIN_Set();}: e; p3 k0 f$ v& I5 T' x
- else OLED_SDIN_Clr();6 n: u1 E. U& S6 |* j. x
- da=da<<1;( M$ B4 M, i) m0 \ Q. y
- OLED_SCLK_Set();
2 K K2 c2 [/ D5 o: L/ C6 I3 j - OLED_SCLK_Clr();
# G4 _+ y' d* }0 B5 ], i - }
! i; V' {$ j# Z - }
. `8 ~! d' b( V" Z3 ]) a* f - void Write_IIC_Command(unsigned char IIC_Command)
) H* ]8 x1 u: a! M2 D2 i- [7 ~* K - {
. m9 N7 a7 G: c) _" u$ I: ] - IIC_Start();
{' \# g# h" @, i( K - Write_IIC_Byte(0x78); : q5 ^4 l6 J9 }; Y* j7 T
- IIC_Wait_Ack();
7 t' F. b0 }; v7 v, I) R" x% W - Write_IIC_Byte(0x00);
4 Y( F: r' Y+ i* X) j3 ~ - IIC_Wait_Ack(); 0 z6 C) n* I. Z. |: B" R7 s
- Write_IIC_Byte(IIC_Command);
$ z* {& p. G5 w, | - IIC_Wait_Ack();
* k9 h- v9 I7 v. b- s3 w: [ - IIC_Stop();
0 Y9 e% U0 ?7 J( {# i" Y1 u. b - }/ l) I! P3 I- f9 \
- void Write_IIC_Data(unsigned char IIC_Data)
" m0 r- V$ E" Z: } - {
7 j3 T6 u7 Q' s' i1 N2 {- U - IIC_Start();! a: {1 ~# @ ~3 a
- Write_IIC_Byte(0x78);
6 H& f2 w8 X6 q' F - IIC_Wait_Ack(); $ E+ [! X8 }/ i8 ] O3 A5 T
- Write_IIC_Byte(0x40);" Y2 [0 H5 G5 e& V" e E$ m' f
- IIC_Wait_Ack();
# Z1 g. g& `) S7 t1 c - Write_IIC_Byte(IIC_Data);" j* H) n9 h* l! `# [! Q# K
- IIC_Wait_Ack();
0 O2 H3 [" |; Q" O' k3 j3 w - IIC_Stop();# R$ L) ]) d2 G
- }
2 G6 V5 s" c3 d' `; i% U: S( q - void OLED_WR_Byte(unsigned dat,unsigned cmd)9 ^3 c* y) l$ X9 C, D: e
- {
. [! m1 t, J8 ` E - if(cmd)3 \ g! l4 Y: w
- {
! L- C& y/ z3 w8 b7 k% c5 C6 r- ?1 D - Write_IIC_Data(dat);
7 ]) J( |9 g: }# s9 u$ u& r1 [ - }! |5 e0 J% Z9 v) b, D
- else
/ V, D1 N, z5 S9 n0 A - {1 ]% o6 H8 B1 |% R. N
- Write_IIC_Command(dat); 3 l) L' [, _% H8 f9 w9 I5 f: c3 h% l
- }
9 } P; }1 }: W' W9 V4 _ t - }- p& ?& M& P/ a* O! ~
- void OLED_Display_On(void)+ g- h1 B/ U+ Z) } }2 b9 i5 ^
- {
, J, [2 c/ S% F# ? - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
: j5 ~9 o4 Q9 W6 \8 @; A8 p+ Q - OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
2 t/ j: l+ z& r) f, S# r+ n - OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
$ O5 }) |6 ^# H5 m - }
& f8 R' W9 T" o* Y5 K. T( N& f - void OLED_Display_Off(void)
0 j+ m3 b- B+ n' @3 A- C1 K/ e. U - {6 v- U# ^$ @+ u3 @' Y
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
6 E6 a' }. V; ~% `' n - OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF
% J& {) g6 k1 K- _1 P+ J - OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF' C) U$ Q) W' n! n' w% Q
- }
复制代码- void OLED_Clear(void) / u! q5 ?- o% N+ @' T
- {
/ ~$ {5 I6 z- |$ Y7 D0 h& h - u8 i,n;
, A; e! ^, P) n$ H) Q) A/ [ - for(i=0;i<8;i++) $ o- p# `+ l* \7 I! d* T* C) F; m$ Q
- { + b/ r) A, z( N
- OLED_WR_Byte (0xb0+i,OLED_CMD);
- z7 `; J5 Z3 k - OLED_WR_Byte (0x00,OLED_CMD);
5 q# G# j9 T6 X2 M8 R7 e+ F: z* y% s - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);
3 \( {1 }4 a( H- h! F0 E! p$ V% ~9 A - } 1 [+ n3 n" A& ?5 k% D, D
- }
7 O: I* y6 z$ @" ~ - void OLED_On(void) 4 { R! m! j s2 {/ l
- {
$ f6 T. t% v! g! I) [ - u8 i,n;
; r5 F* h1 ?% f T& ^ - for(i=0;i<8;i++) 3 l3 M$ f( R" }5 F4 L) H* T
- {
3 t" d2 }8 X$ }2 ]. [ - OLED_WR_Byte (0xb0+i,OLED_CMD);# g9 p9 W7 I) I; ^7 P' W
- OLED_WR_Byte (0x00,OLED_CMD);
A% {# K3 f" G9 M - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); % S$ E) ]6 A6 \7 C8 Q; R# ]* U
- }
7 Q7 d( c. x+ U. d* E0 f - }! ?/ }0 n: b' }. D& F! N
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)$ c8 ^/ ?5 F- g5 F+ G
- {
" G6 j7 h% n& Y' Q+ v - unsigned char c=0,i=0; 1 G; t3 g3 _9 ~+ r0 s/ T. L$ d
- c=chr-' ';
3 l9 Z: B T6 O/ p - if(x>Max_Column-1){x=0;y=y+2;}' m! v; F" s# a# V
- if(Char_Size ==16)
, h' x' e5 z2 ~5 Y3 D' ` - {4 y- ]) ^( m9 p. m0 n7 k! f
- OLED_Set_Pos(x,y); 9 X& R0 T& T% ?) ?$ H' E g- ^- Y3 N
- for(i=0;i<8;i++)
; z+ V, u& C. g+ S( r - OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);1 b; U2 k+ \# l" C$ U0 r) Z/ }
- OLED_Set_Pos(x,y+1);
; ~: \5 k0 _! z4 I6 W - for(i=0;i<8;i++)
; R, l7 |, [. [ - OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);* E: ?; s& B! z% I% g
- }
6 n; @! s/ ~" X/ s - else {
& A' }1 c' R8 H' o! i2 q& H - OLED_Set_Pos(x,y);
1 P# ?; \3 D: A: h# f - for(i=0;i<6;i++)
! t# n% ~3 F- z0 D+ h - OLED_WR_Byte(F6x8[c][i],OLED_DATA);
# k e/ G6 A" ^5 m - }5 h$ Z# n3 @% ]+ V( {% ` K9 ~
- }
5 B [) H+ p$ v' H- l' } - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
U; r& d4 m$ B4 \5 v - {
; z0 h, W& A) X& { - u8 t,temp;
0 Q2 C S2 ]% @ - u8 enshow=0;
) z/ `, Q' ^; w: ~ - for(t=0;t<len;t++)) n0 `4 `) M* ?. O/ Z! ^( |3 w
- {# u0 Q+ k2 \: `/ E
- temp=(num/oled_pow(10,len-t-1))%10;# V7 a2 n6 I# Q" j3 J q
- if(enshow==0&&t<(len-1))) u2 L7 r+ N. i; D7 \
- {, E- L' }* i9 Y( j: L9 d/ H
- if(temp==0)
6 d( C5 E6 D5 X - {
9 K7 N c- I' }7 t9 L, ~ - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
9 `* H# C. ]; o. \( ~' l9 ^# ` - continue;1 m! ~9 U [( ?% Q9 j3 S9 S
- }else enshow=1; % e# T8 l- S& P, D
-
: ~4 t$ h: _. l) [3 @0 ^ - }
3 S1 {8 V$ N3 e" N8 S - OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
Y6 U: d7 c0 y+ L9 c0 v - }
% l& e7 e" t5 O( Y4 U' j - }
0 S1 S/ Q7 d5 a, b. ]8 S - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
) _- \: U9 S5 Z- c - {* N' J: S( c9 E0 y
- unsigned char j=0;
( }* e) X. }8 c! y2 @8 O - while (chr[j]!='\0')
, c0 G8 Q1 h r/ z, w& Y6 ? - { OLED_ShowChar(x,y,chr[j],Char_Size);
* \$ z5 {6 q9 y: b - x+=8;
# L( l( c7 q5 l+ G - if(x>120){x=0;y+=2;}
: K/ r& h7 x+ R9 `: C+ f - j++;
1 r3 U6 Q! L1 r; L7 g, c" N - }/ u- O0 e# u) c+ F5 R2 s
- }4 ^% e: |' ~0 K( T
- % m! ^' {! Y6 v) m: Y
- void OLED_ShowCHinese(u8 x,u8 y,u8 no)9 k8 t, ^" J* _- h5 n& F9 R
- {
( C4 u+ k3 u6 t" H" H - u8 t,adder=0;
' w9 s1 u' ^; ^% S# @ - OLED_Set_Pos(x,y); ) g1 d; ^% v p8 n1 N e6 e
- for(t=0;t<16;t++)9 t1 P- n2 i) u6 L9 A
- {; H& e, R8 g: g0 ~: v
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
# p& k/ N8 j, U+ `* a - adder+=1;2 `! X5 n& ] E- X$ N
- } & A2 e& j; s" {4 [: c
- OLED_Set_Pos(x,y+1);
/ [7 V4 g$ @ T6 F' p - for(t=0;t<16;t++)
6 m& b" u+ K8 c. B9 Y7 y - { ! d! V; f& x4 L" V$ x4 a
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);/ D1 k5 Y# H3 V; s3 ]
- adder+=1;
, _2 \; f. N4 q. b: f# A - } ! W+ }, e- Q* P' W* s4 ?! x. ?
- }
2 @* r2 X: n0 o
3 [. C! y2 `( l3 ]$ s# A- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
2 g! _8 {. |: }. ?: O& S - {
- h5 t5 M J& E; `3 O1 ~ - unsigned int j=0;
& }. q( r4 t9 M0 o& [; f) g - unsigned char x,y;, G% S' Y# S: ]3 X6 U
-
% z. L3 M1 d/ Q% M8 ?1 `0 b. q - if(y1%8==0) y=y1/8; s6 c/ x v! ~3 t' O! r9 J
- else y=y1/8+1;
/ N! W* X, K6 E - for(y=y0;y<y1;y++)/ Q9 m! `1 u. s$ G
- {
# h% k! I8 P' m$ I - OLED_Set_Pos(x0,y);. j* U# j; Y: X
- for(x=x0;x<x1;x++)6 k/ d9 _$ `9 C6 ^
- {
4 x4 Y. t, k* i f5 o3 k- e2 C - OLED_WR_Byte(BMP[j++],OLED_DATA); / @ L5 F# }$ A! m" H* z
- }
. @9 X+ S- f. `5 @ - }
4 r2 ~/ w& m& i' B s - }
! U. e+ N6 a0 w _. r0 u3 w9 D& Z
3 w6 S0 S' N) D) ^2 b6 y- void OLED_Init(void)
+ D( O& ?7 ?8 n' m$ M: c" G2 h A - {
6 d4 ]4 p' v/ J2 y* K5 ?7 | - GPIO_InitTypeDef GPIO_InitStructure;
& C) W! C/ u0 Z! h( ` -
# I! I) _; ^/ b4 H& }3 Y8 ~7 }4 a - OLED_GPIO_CLK_ENABLE(); ' @& s1 ^4 I5 E! n
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9; & X9 C) C4 }1 R! k0 Z* C
- GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
8 `! x! W& Z d) ?' [, o9 ^ - GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
. V1 d+ y6 c V& }3 e. I m - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); - r" _; M- f/ A: |, w% c
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
( J) J) c( n, R' L% O - HAL_Delay(200);/ }2 h: J8 L% X' S. h* e5 o
- OLED_WR_Byte(0xAE,OLED_CMD);
+ M4 N4 `/ M' Q1 a% o+ h - //display off
2 z9 j2 S1 ^ j! b9 V - OLED_WR_Byte(0x00,OLED_CMD);//---set low column address& H) j: m$ W' [! o: @
- OLED_WR_Byte(0x10,OLED_CMD);//---set high column address
. ?/ V& w( @. Z/ K( e- Q2 [- j8 L3 T% C - OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
2 J5 g `0 t. M0 m; H5 f - OLED_WR_Byte(0xB0,OLED_CMD);//--set page address
4 V$ E5 f; p$ E! S9 t0 { - OLED_WR_Byte(0x81,OLED_CMD); // contract control* Q; f# E, a, |
- OLED_WR_Byte(0xFF,OLED_CMD);//--128
1 [4 j; S# m$ u - OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 0 [; l8 Q- k( i. F6 v( |6 l
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse( F' h( R, K9 A
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
2 Q4 M% \7 s" r8 C5 [ - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty% U+ y; V6 F' t( t2 b' n0 ~& o2 F
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
( R$ T+ [! N! s - OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
0 P* B0 o3 {, x! y' g! M4 D7 q - OLED_WR_Byte(0x00,OLED_CMD);//9 {: o; w0 j/ r8 M0 _
- / h( o3 G$ e w0 @, D* B" X) H) P
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
" E+ R' T/ I0 R, Z3 G - OLED_WR_Byte(0x80,OLED_CMD);//
* t3 ]- Z- l" n4 D - 3 Z) |* u$ J) x% |. [
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off& u, W; F+ u$ G0 r* w% p. p
- OLED_WR_Byte(0x05,OLED_CMD);//
7 r! N+ R: c: Y7 o: f& [, v' ~ -
, f9 I" f6 ^/ {' f$ A0 U - OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
0 @2 J7 c! n6 h: s# Q1 I - OLED_WR_Byte(0xF1,OLED_CMD);//
( C7 Y# M) @+ K9 m2 N+ C -
, ^' M% r6 Q+ w( `2 u L. V! ? - OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion% z0 m6 @7 _, ]! L
- OLED_WR_Byte(0x12,OLED_CMD);//5 ^ R7 O5 _3 `9 d0 x Y
- 4 a+ X: p5 v: s# ?0 ~; s
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
( {7 H, J( l J2 ^7 `# [ - OLED_WR_Byte(0x30,OLED_CMD);//+ E4 I o/ D @( H, q% D
-
: f: ]. n+ I' m* Z6 Y* F% U' D - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable7 R7 h: L% c/ C' \9 { \ ~4 q( b
- OLED_WR_Byte(0x14,OLED_CMD);//. ~7 F) P+ C- v, F- [' e
-
7 I8 l- |. x8 V% K4 e* x4 w. Y - OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel0 z9 c0 P( W# f0 ?4 K4 o$ f3 n
- }
复制代码- #ifndef __OLED_H
( l: f' O' Z, e7 |& d8 D - #define __OLED_H
0 J) K P0 B# j0 x: o3 H - #include "stdlib.h"; ]$ k% N, z0 I
- #include "stm32g4xx_nucleo.h"/ E: E* d. l' r/ }4 [% w
- #define OLED_MODE 0: |# C0 o) P; `0 \2 d
- #define SIZE 8
& J. x+ M( O, C' h - #define XLevelL 0x00
/ k. _* A% w" d - #define XLevelH 0x10
7 n T/ Z/ Y$ [) F! Y& x/ M" l% e: B$ Q - #define Max_Column 128
. Z# M! G8 a# b. ~ - #define Max_Row 64 }2 w0 c8 D% N5 X; g$ w
- #define Brightness 0xFF - [* U, r! ?: l* @2 J/ }5 j2 N! C; q$ e
- #define X_WIDTH 1282 {: A! ?: O& t
- #define Y_WIDTH 64
& @4 l D" V3 t' D; A" I) |/ b3 S - #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
* Q6 j& I. @6 T3 m - #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
S( x' k0 N. y8 _) ?
7 I5 @3 L' J2 D2 Z" }2 a/ G- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN5 Y; ^- N5 S- h' F+ j+ D
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET) ~3 z# @. c* v- h2 v, d! J
# D0 d5 X/ m4 J- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ i$ ]1 n Y$ ?, B( ^8 B
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)
3 ] F# j2 C& t- g0 r$ z - R- W: E+ R" r1 k
- #define OLED_CMD 0
* ]6 H: i7 b- A( U/ T7 o - #define OLED_DATA 1# v9 S0 ` c+ u5 i
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
! W9 t6 P* O& I' Y - #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()' T) U0 ~# T# W+ x
/ i' |6 U5 [; ]" U- void OLED_WR_Byte(unsigned dat,unsigned cmd);
0 |: X% s' l6 k, A - void OLED_Display_On(void);
! F4 a- s6 K$ L$ d7 r* L9 N - void OLED_Display_Off(void);
8 U4 q5 z# K2 q/ v" k+ C, d - void OLED_Init(void);6 I3 w6 E6 O5 q8 z% [
- void OLED_Clear(void);! }' y& F) K4 m5 s" `
- void OLED_DrawPoint(u8 x,u8 y,u8 t);! P: q/ H( c: K! z2 I" \
- void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);( R# @! m: e+ ]' G% @' Y6 x! C" Z
- void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
! K: D/ c, ^8 K$ J - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); / _8 ]; L5 k+ B; v7 ^1 [8 k
- void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); 8 p: f( F" L) F( a; H5 _
- void OLED_Set_Pos(unsigned char x, unsigned char y);
! B7 v N9 f, z; g - void OLED_ShowCHinese(u8 x,u8 y,u8 no); P" h( S: q( T: u, ^ p1 W- ^
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
3 t. w+ T1 o Z3 a$ P - void Delay_50ms(unsigned int Del_50ms);
7 P. R q+ z* g' x6 X - void Delay_1ms(unsigned int Del_1ms);+ ?- }: _+ O- p! @. y c* N0 `8 V# j
- void fill_picture(unsigned char fill_Data);
# O5 z# f) Z1 ~ - void Picture(void);' `; C' j7 a5 w6 G
- void IIC_Start(void);
, M1 X; w1 [ B - void IIC_Stop(void);
6 g5 R: I& D7 D. Z b - void Write_IIC_Command(unsigned char IIC_Command);' e9 ~& H- }: [: {5 _
- void Write_IIC_Data(unsigned char IIC_Data);
: B& r% g" F' _) h" r' b" i - void Write_IIC_Byte(unsigned char IIC_Byte);# F( t/ S. y8 ]# g! o) x
- void Display_Battery_Level(void);& J4 P( p+ y& ]2 c
- void IIC_Wait_Ack(void);
5 f) ^8 ]( V7 g% G/ n+ E - #endif
复制代码- int main(void)
+ `. g7 L# J# p. b% V# M& n6 X. r3 w - {2 ^2 K9 j! F2 h1 u3 g+ j$ G
- HAL_Init();* H5 m3 w, D" h# o9 O* t% b
- , H2 H4 u [$ `, f7 m+ X
- OLED_Init();
6 {" y' Q6 B# ]( U& v/ [/ j* Q - OLED_Clear(); ! k. z+ `; k% _2 k R- S
- SystemClock_Config();
- m2 H) {- }# h3 A2 G - ! q( F( S$ Q! ^% O
- BSP_LED_Init(LED2);' F A, ~: D" l; e4 N/ ~+ V0 y
- EXTI15_10_IRQHandler_Config();' P: x- m8 {( Q* c
- q2 m9 ]) |& w" W( B1 m- while(1)
5 `! J+ F& ]0 g$ t9 D) F - {
; z* |- D9 f j6 { - OLED_ShowString(0,0,(unsigned char *)"STM32",16);4 A F1 V) w# b6 |, ^8 _2 ]' Y) v
- OLED_ShowCHinese(45,0,2);//
0 b) v. _1 R8 m0 T - OLED_ShowCHinese(63,0,3);//& O! i) Q8 z l# a3 \2 f) A
- OLED_ShowCHinese(81,0,4);//
% o8 \7 _" j- O4 {& d0 ~ - OLED_ShowCHinese(99,0,5);//
3 C/ N& C8 _* r: f! s7 u2 ^' A, ~% c4 r& d - OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
, `% y6 u J' ]- S Z6 h J( R! @/ S ? - OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
" r1 `% }' A4 X+ M/ W% y$ r" T1 \ - } ) X- ~) n! z5 L# v0 y# M
- }+ i9 J3 W* q; s5 I
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
9 Y. C7 [3 q1 p
1 |# z6 ~/ a+ U( a
+ _1 v2 q3 `- s+ J3 s |