国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
1 b1 a, [0 J E4 Y 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
8 k) x4 V8 {% |4 Y+ }& g
0 M7 `* m( ]+ B, Y
部分代码如下:# ?, Y* l. e% R# z
% [8 n: C3 |0 G3 M) _7 }
- void IIC_Start()9 Z4 o+ M- U4 W& w- R
- {. Q# u: |: P+ p, Y$ @1 w0 Y
$ @. `/ ?0 ]' @+ X8 \1 A6 u( }$ _; D- OLED_SCLK_Set() ;
0 F5 |* `1 F& h s6 H: r - OLED_SDIN_Set();; E! O9 [. y x; x4 z6 v5 p% A1 H8 U
- OLED_SDIN_Clr();& d0 M" X% S2 o7 b
- OLED_SCLK_Clr(); J: r+ }! B- H$ r ^
- }
1 I5 ^- h) u9 Y# }0 U+ i+ j - void IIC_Stop(). [1 A5 `/ s) G+ p0 r1 h! U
- {2 t8 Y( L( m9 e# t2 d1 N0 y+ }
- OLED_SCLK_Set() ;' m$ ^6 A' I6 k( {
- OLED_SDIN_Clr();
8 s6 o+ D/ U1 R; U& T6 S - OLED_SDIN_Set();
: c }# v6 {) K1 b - }' v; t; y) X* \( F6 ]
- void IIC_Wait_Ack()6 m4 s. f! l% ^+ T, \9 n8 W' Y
- {
" j) G: H5 l7 z6 T+ a3 m0 i. e6 m - OLED_SCLK_Set() ;, x/ w6 |2 H ?! ]+ c( z* s
- OLED_SCLK_Clr();
% e& h" l2 B! P% A& X0 e" S& U6 S - }
7 ]0 N( g; u9 a, N, d C1 z - void Write_IIC_Byte(unsigned char IIC_Byte)
a7 ~: W' M/ U/ Z# V: U5 M& v - {
% ^6 d3 [/ @' a3 z- u8 ? - unsigned char i;4 C0 T# X' w' H; Y6 `9 C8 m9 v
- unsigned char m,da;. g+ C: F2 z& L8 Y( \* Y' ^" _
- da=IIC_Byte;( m4 W! ^ g0 f* L: M% y
- OLED_SCLK_Clr();0 V8 n. a9 I5 R3 f2 m7 ?4 _/ u1 {
- for(i=0;i<8;i++)
2 p8 J. X5 d4 z" L4 N: y+ U0 E- ` - {
0 i: C( k N3 R% M1 Y7 ^, N- V - m=da;/ e" b+ e0 e/ }# J' d5 G
- m=m&0x80;$ r4 }3 l6 x& X: B) p7 M
- if(m==0x80)+ E8 Z# A7 D- G. [$ A" s( b7 [" ^% M
- {OLED_SDIN_Set();}& j, E$ l& e2 g* m5 V8 ^- T+ {" I
- else OLED_SDIN_Clr();
! j/ Q% s0 S2 v/ R7 V - da=da<<1;
+ V7 C z6 p+ D. Y - OLED_SCLK_Set();
# _& [ U. x4 X& e" ~4 D - OLED_SCLK_Clr();
( v& w; C9 O" o- @) L - }% `" H( h: o7 q" v2 r' P
- }
! \, {4 @, ~; s( |7 j1 D - void Write_IIC_Command(unsigned char IIC_Command)
1 Y6 Q! k" j9 |* u) C+ K+ b: f - {0 k( t% N3 B/ |
- IIC_Start();
, c' J0 | M2 f: S - Write_IIC_Byte(0x78); * Q8 f/ H, f% o. H, m
- IIC_Wait_Ack();
$ h; V+ O2 }! I& O% N$ x3 { - Write_IIC_Byte(0x00);
! E8 i& _/ f/ d* W - IIC_Wait_Ack(); . w2 ~" a, ]) V% ]( Y; S7 Y* G3 z
- Write_IIC_Byte(IIC_Command);
, q6 B4 i, B; _, C3 m9 O' C - IIC_Wait_Ack(); & o' X. u+ v2 B, [. W1 |1 } W
- IIC_Stop();0 i+ Z, X; V. ]6 l: [1 c: e
- }
( Z. w. @- s5 Y, Q# m - void Write_IIC_Data(unsigned char IIC_Data)
# Y+ {, F4 T" X+ u2 B - {
3 V2 N! P' q. [+ `4 b - IIC_Start();- n8 Z: I- X7 W t7 V( n0 }/ i
- Write_IIC_Byte(0x78);' G1 J6 c1 H- Z8 S1 K
- IIC_Wait_Ack();
' E9 p0 a* Z- E - Write_IIC_Byte(0x40);
. ~- Y( w: J# c! a( g* D+ X - IIC_Wait_Ack();
" ?" M* z- S$ Y* W - Write_IIC_Byte(IIC_Data);
3 w4 O) S+ f9 O4 F; V - IIC_Wait_Ack();
. h, ^" z- p8 B$ V6 v9 a% ` - IIC_Stop();
& n2 w h. m# ^1 K0 D5 ? - }
# }5 o- e) h- a q - void OLED_WR_Byte(unsigned dat,unsigned cmd)# `6 ~5 Q% ^$ `4 c
- {
2 N9 X# ~# O r, B$ S - if(cmd)- r& ]8 [- |/ S3 H. |. `1 q! e
- {# b5 q4 B" |# P2 Y. T* y" C3 |. F
- Write_IIC_Data(dat);
K+ {0 l6 Q8 N: c* E0 W - }
% c1 c2 m) C9 T+ s9 _' U2 R( V - else
9 ]9 g d Z7 v - {; Z* W a, |- R" d( P& v3 k# u
- Write_IIC_Command(dat);
; k4 q+ o* O5 z4 s! @ g4 J - }
% `8 |& c9 f# u - }
& V2 V5 Y0 |" j1 Z/ L& {/ \ - void OLED_Display_On(void)9 `& M* q. `- W4 G4 ?( z. B a) F
- {
! X+ f' `5 i# ?* g+ a - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC7 t2 J/ d1 d4 r8 q7 c
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON: N3 c3 p- M* v) n
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON
$ J1 y+ H0 P* X; _+ Z# _1 u' ^ - }
! U5 c; {: D$ `: U; H% R% r" G) ` - void OLED_Display_Off(void)& K @8 B/ o; e, `) g+ M: j$ Q& Z/ Z5 @
- {# [5 ` s# O% E; j) T
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC5 c# h: W7 B3 O
- OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF7 ~! s3 l3 f0 R( d$ k9 s
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF
" W9 S) o% P- O. p - }
复制代码- void OLED_Clear(void)
+ a: Z$ m- n2 E9 k8 Y - {
: I' ]5 u3 O$ f2 d8 w. ^& f& I$ u - u8 i,n;
3 i* w: I6 V" R# N - for(i=0;i<8;i++)
- p" _8 U5 |7 E# Q% Z) E+ w - {
# R) C; X- B2 z$ @ - OLED_WR_Byte (0xb0+i,OLED_CMD);
5 b3 A6 |( Z6 ]/ @3 \ - OLED_WR_Byte (0x00,OLED_CMD);5 q* w+ a& `' n5 w6 k/ g' l, K
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); / i7 w) T6 r2 h
- }
5 f* H8 @$ h+ x& m( U% x- N3 w! \ - }2 u4 X; ^4 c# O1 e' C; G
- void OLED_On(void)
+ ^, i; d: m% u" p - {
! J( m& W) a$ @0 n7 ]7 p - u8 i,n; 2 [& b; f: V8 ~# R; n
- for(i=0;i<8;i++)
* K* K' Z8 O1 y; v - {
/ F4 N& |& G9 [1 v- _3 i - OLED_WR_Byte (0xb0+i,OLED_CMD);
' k P- y, f9 H P; Y - OLED_WR_Byte (0x00,OLED_CMD);
' `6 Q5 y+ Y5 E) x3 U- L - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);
- b$ m. _7 C% N& M - }
( S2 v; s) {7 E* } - }
6 _% y& Q5 ?& g2 L: j - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)- [4 V3 V$ {, n- C( G; l
- { 1 E |4 o q4 @# ^8 L+ J! Y6 k4 c
- unsigned char c=0,i=0; g: N! s! L) A
- c=chr-' ';# d% P% T8 K7 J; H2 k' ]
- if(x>Max_Column-1){x=0;y=y+2;}9 ?& r8 y# V6 }- g% f! R" _+ G( @- F5 G
- if(Char_Size ==16)) [! L8 Z; i1 [2 K3 Q! A
- {1 T! u# o) I/ d" l( R! G
- OLED_Set_Pos(x,y);
1 _7 O1 @' Y0 S9 N- e - for(i=0;i<8;i++)6 s$ T3 d/ t. T/ [: m
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);
) ?! ?3 q- g4 C' T( A+ c. P - OLED_Set_Pos(x,y+1);" z: i' d! b ?) ~
- for(i=0;i<8;i++)
! c' w) }* T* D( O0 A7 b - OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
$ ]/ |/ J& b+ {3 e, Z - }
* F0 C4 c0 e- m5 H5 B# @% c) Y - else {
& l y* h& Q" L4 p2 T - OLED_Set_Pos(x,y);
0 k$ ~# c) I/ Y1 B3 ~ - for(i=0;i<6;i++)) D) v! a, n: P$ Z; B
- OLED_WR_Byte(F6x8[c][i],OLED_DATA); 9 T& N/ ?. C& l
- }
0 s1 [0 N* ~3 ?' K7 v - }3 X, F, B9 g+ R9 R& h8 m" A
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)
c9 Z& b9 ]* e+ w- @ - {
$ X3 }# q1 ?0 B# b! ] - u8 t,temp;
$ M; t( _/ }: @$ z* c9 a' @ - u8 enshow=0; 4 d' X) o( d( g; q1 b
- for(t=0;t<len;t++)
7 t& c9 k, {: ^: {' a: a! f - {
) ?3 r/ o- {9 y, I( Q* G; m - temp=(num/oled_pow(10,len-t-1))%10;4 V2 w |" L( }! K( p/ T
- if(enshow==0&&t<(len-1))% ]& _: F" B! D
- {
& i* D$ g0 V# L0 L5 K; a& A% l' T - if(temp==0)
; B( w- f6 O8 I0 C$ r- G; J - {
$ \' }# y- n* e9 v/ ?; _: H8 H - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
; N5 T7 D D' N8 Y% q- ] - continue;
+ L L- _8 h- W$ ^, O - }else enshow=1; 7 [2 J5 r z) c9 F+ r
-
M) X/ | v5 {, G1 { - }6 Z$ t( U( ^, ~- z
- OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
4 |- p$ K3 J! I" [$ v$ v - }
( b- |8 j9 l q$ W" U ] - }
. }% n6 q% O: H X; O5 c - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)1 w) h7 ^0 G- g8 f3 T+ g5 I0 e
- {. U3 x/ n- ~9 [
- unsigned char j=0;
# T9 B$ X5 e6 x/ u - while (chr[j]!='\0')6 B: i2 D2 F _: s, }) a. u' c
- { OLED_ShowChar(x,y,chr[j],Char_Size);9 S0 n0 \7 N# ~4 t0 O
- x+=8;
( C) I: ?2 h m! K2 W& L4 k - if(x>120){x=0;y+=2;}
% {) z( _' N2 Y# U4 d$ h - j++;
' l3 c# m5 ^' Y9 ] - }5 S# f: b; g4 a- M: U) j
- }3 h! _9 C/ l6 g0 n
% \# _7 b9 @, X4 }4 S3 h# g- void OLED_ShowCHinese(u8 x,u8 y,u8 no)) b+ A' t# H* O7 ] L# d
- { # h" e( G5 i. k: q+ @7 N4 H
- u8 t,adder=0;
1 ^& B/ Q( k' G0 D# { - OLED_Set_Pos(x,y); 3 {6 c6 y7 l- e5 D( v
- for(t=0;t<16;t++)
! r# w1 C1 g2 B - {
* b. f, U8 X3 `2 y$ Q- f8 k - OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);& |* I0 _" P$ O$ m
- adder+=1;; S. K3 F, x$ F, @) v
- } 0 P/ S3 p: |( B) w
- OLED_Set_Pos(x,y+1); , i. j6 |8 t, D; q9 \4 J$ Y$ d/ y
- for(t=0;t<16;t++)' s8 `$ D' o9 @8 e) j( [) R
- {
; L( B$ t6 V5 F) [ - OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);; m5 ?/ H5 I# x, }
- adder+=1;
x/ N. i$ e* l - }
; Q" E* o, Y% _ - }% }# e. ?: X6 \
( ~4 |3 ]: W) _. E+ w$ I% Y- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])2 m6 u1 N2 T' O- {' o: f* T( {
- { * y7 e: x$ ~8 X) V ^
- unsigned int j=0;
! l' z8 R; N' P. K* j' x - unsigned char x,y;. Z9 T+ q. o+ S3 c- y- M/ ~' r0 r
-
) N2 d. n4 Q# f5 B9 O# w - if(y1%8==0) y=y1/8;
+ u* F" y- B: Z, X! i; s - else y=y1/8+1;
7 u/ X! `9 ]" P, g, } - for(y=y0;y<y1;y++)* b# e) ]% E$ \3 @0 T/ b% o
- {
! `; G4 \; c" |( A/ s3 N6 H' b% Z - OLED_Set_Pos(x0,y);$ r/ ]8 `5 d4 o+ U
- for(x=x0;x<x1;x++)
+ ?% P6 y' l- H6 t - {
% K4 A6 n$ L2 C - OLED_WR_Byte(BMP[j++],OLED_DATA); # P$ s" `# x$ y5 `, D% D
- }
5 G# x4 o8 L9 _) r - }
% `. a& A* o! G6 f- H& }/ K - }
- N- R: F( P/ c! @ - 7 k: _+ F) k5 u2 z
- void OLED_Init(void)
3 [1 V9 G5 `: H, Z0 _- S - {
% ~( v! n' i. q; s - GPIO_InitTypeDef GPIO_InitStructure;
8 \* ~- X5 M, @7 Y* _: ] - ! {: o1 T: E2 }: _' m7 Q7 Q
- OLED_GPIO_CLK_ENABLE();
. g# c3 f9 D5 Y0 ~* i2 y; h- t - GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;
! c# I2 {% w& }8 f0 C) X - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;0 c: G( K k; A! o
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;& }' V* Z+ I3 b% g, |# [9 A. ^
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); 1 S% S. x. C/ X6 |6 B( ]/ }4 o
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
6 Z; p/ P0 Z1 G/ W. g& e - HAL_Delay(200);0 k0 r& W+ C: [0 n) I
- OLED_WR_Byte(0xAE,OLED_CMD);- Q3 O& K' F( y- }
- //display off2 f" ^. A# V) Q2 u
- OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
7 x: E- b0 C" [! @ - OLED_WR_Byte(0x10,OLED_CMD);//---set high column address( Q) @% L( s5 ]/ ?
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address 1 m. Q( Y1 d' j+ w' ?
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address. k0 u8 H0 H; `! L% A5 G- V8 x) ^
- OLED_WR_Byte(0x81,OLED_CMD); // contract control2 w0 Q2 Z0 r% o# P. M
- OLED_WR_Byte(0xFF,OLED_CMD);//--128 ) x% @$ L+ I' L% Z! n
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap 0 C& s4 o/ W8 a/ L3 B
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse+ I) z& u2 V& Y a' e+ ?- w
- OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
& d# M# }) u$ Y - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty3 n6 u1 J/ Q0 N) [
- OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction4 C R+ [& L; w5 y @9 H9 P. |
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset" S7 ]+ i; h* m
- OLED_WR_Byte(0x00,OLED_CMD);//
* C/ l8 b8 O# o -
% u; _/ H7 R8 `) J5 ?( E/ Z - OLED_WR_Byte(0xD5,OLED_CMD);//set osc division; f. ?9 i& I- ^1 ~6 j
- OLED_WR_Byte(0x80,OLED_CMD);/// R g6 q( E) p7 s4 M5 m( g4 e
-
9 X! R0 o0 d4 d' q5 C - OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
, ]8 w4 l6 K4 |6 F - OLED_WR_Byte(0x05,OLED_CMD);//
3 }2 T }9 i8 X( k& H - 0 }) s# X& y* I: O
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period4 E7 Q3 G/ A' g7 U( D- p5 |$ ?
- OLED_WR_Byte(0xF1,OLED_CMD);//
' s7 E1 o3 S( s+ G( v7 s - ( O6 F. j6 y: C/ ~
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion$ j' H% ]& H" V; M
- OLED_WR_Byte(0x12,OLED_CMD);//3 `* U' s) W3 u5 A$ e3 \% F; Q: {
- / L7 o- N- R* b7 X' x! W- z
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
+ T$ c7 L ]; t% w# X) f0 R - OLED_WR_Byte(0x30,OLED_CMD);//
q5 Y- [. k5 L! E2 J+ j -
. g7 e+ l- k2 s - OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable
/ z& r$ {6 J' y. H1 J% i) j - OLED_WR_Byte(0x14,OLED_CMD);//* Q2 j1 A- \& c9 ?) m
- , Q `, m- a+ n. I
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
' L2 V: C: b, r) B# i - }
复制代码- #ifndef __OLED_H: m, s' x0 Z: Y# k5 e M! K! K9 x1 l
- #define __OLED_H
' p. s$ ?0 H- r1 v# | - #include "stdlib.h"
a: ?0 g$ b+ w4 i - #include "stm32g4xx_nucleo.h"
$ ^- L3 F1 `% x& w$ t( K& j7 } - #define OLED_MODE 00 S2 o- f' _" r1 p/ V* s
- #define SIZE 82 M: ]" m) b4 S- M
- #define XLevelL 0x00
/ |% W( m6 D) w7 L2 l& l2 H5 N - #define XLevelH 0x10/ p& q& m6 r( ^5 e" ^ S% T0 P
- #define Max_Column 1281 `" X* x; u* T- h8 r a
- #define Max_Row 64( [& g1 B Q ?/ N
- #define Brightness 0xFF
1 M3 _0 E0 v# [! M- ] - #define X_WIDTH 128, C6 _, L: ^; @8 w! u' t( F
- #define Y_WIDTH 64
9 ~, y& t* K* a2 w" ` - #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK K: j5 [( k* B3 P
- #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)# `& }. `! K$ j$ i7 o/ N# z
; x2 w( P+ b [; Z" l( z- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN! g1 g q1 Y# T: m( d/ f+ ^; z2 _) Q
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)% j1 L( y% w- G: t4 T! B# z. Y
5 G# b0 x( d9 B- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ X) q& ?3 t, ^7 ^' |' v1 a5 Z
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)5 Y, N" E2 M: F/ D3 a, }# X3 x
-
8 s" x( c* v5 y6 W2 |5 c* \) M) b+ ~ - #define OLED_CMD 0
. [7 n2 R. \( `" R8 M: D+ R$ E4 X% L - #define OLED_DATA 1
. H5 T- `6 q: P) T4 _! i - #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() + j- E3 q. ^- Q
- #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
9 C+ ~) i5 d% m, y& n! o - 3 i4 R* |2 F+ Y2 J
- void OLED_WR_Byte(unsigned dat,unsigned cmd);
& }. K- G# q! w - void OLED_Display_On(void);( e* [+ D0 M" ^* j6 O! d5 Y
- void OLED_Display_Off(void);
$ s6 G2 c2 C/ U - void OLED_Init(void);
& L1 I1 f5 T0 D% t - void OLED_Clear(void);
+ L' x% L& ?' H4 a7 f! D' |* | - void OLED_DrawPoint(u8 x,u8 y,u8 t);
* [9 x) Z( N7 j7 `! S1 }. t, D6 \ - void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
# }$ r4 e; T0 Q& M" x% q( ~ - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
2 N5 F5 j' {0 ~& B! g" @. Z/ e2 w. m - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); # b# t* {1 p; d+ F6 {3 w2 F
- void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
. T# f2 u$ }3 X7 s6 f - void OLED_Set_Pos(unsigned char x, unsigned char y);$ a# o5 y7 L# W0 G
- void OLED_ShowCHinese(u8 x,u8 y,u8 no);
0 R& Y) b- X, T7 ^' U9 ^* e P( _ - void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
c' p6 {9 A2 A& r( b3 |2 D - void Delay_50ms(unsigned int Del_50ms);
5 b6 c. }) `5 P- x" N - void Delay_1ms(unsigned int Del_1ms); N2 K& Q1 b" C F9 u
- void fill_picture(unsigned char fill_Data);
& G* N. D% }7 `+ R S* Q+ a - void Picture(void);$ c0 ~. v* u1 ]7 j
- void IIC_Start(void);
0 C& i! {2 k+ N- G5 }! q5 } - void IIC_Stop(void);
& F0 z# p9 V* `( h2 j - void Write_IIC_Command(unsigned char IIC_Command);
" K: z& W/ h- h& J" p2 h0 S! I - void Write_IIC_Data(unsigned char IIC_Data);
; ~3 E/ Z6 Q6 `5 d - void Write_IIC_Byte(unsigned char IIC_Byte);
. f* j; Q/ T" f% e! f - void Display_Battery_Level(void);* J+ D+ n* P: W5 A6 q
- void IIC_Wait_Ack(void);
- l) V& l) f* \ - #endif
复制代码- int main(void)
0 ] Y5 h; a2 d - {0 B+ C& q$ u5 U1 C; T
- HAL_Init();$ W9 Z7 z1 q. _
$ C! o$ z- p4 e. i/ X4 o- OLED_Init();1 `5 m( ]' F/ b0 h8 y8 Z
- OLED_Clear(); 2 m* t0 \3 } F" i! B
- SystemClock_Config();
% x9 l# O: k8 R! w. m! f
0 N1 x0 ~3 V! L' ?' a$ E* {5 R- BSP_LED_Init(LED2);
3 o3 d: A# O& C, J, l, S. e - EXTI15_10_IRQHandler_Config();( a; Q- q9 Y5 p3 w5 m; ]4 @) p
- _5 k% W5 V2 N+ M3 L- while(1) 3 Z# }( B8 k$ }# x+ T4 r# o& K2 _$ e s
- {
) n' B6 v) ~- O) i) W- M/ m. ` - OLED_ShowString(0,0,(unsigned char *)"STM32",16);& N, n/ L0 G; S# I& L3 D ^9 R5 w
- OLED_ShowCHinese(45,0,2);//. q9 W2 ]9 j1 \/ `+ d9 G( W, r
- OLED_ShowCHinese(63,0,3);//) c7 H" \/ N4 ~) C( s& g- P
- OLED_ShowCHinese(81,0,4);//
0 g; K# b( I$ e7 C1 ~& X - OLED_ShowCHinese(99,0,5);//
# {- r- z, y8 E" N- K% u - OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
7 t3 r3 z* D* ]- {, V - OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);0 n; s2 y6 f+ _
- }
1 a9 \2 x$ M! O - }$ k q! e. b9 S0 o! a
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
9 [: z$ I4 L; \4 k- R A, }
% O' y; d" l9 d& x7 x/ m
2 K5 S" q) i! n9 l2 R9 u" J- u
|