国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
0 p; |4 a! d: N v, q 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB93 e: p% c; K: a
1 I W) @9 c- l/ d4 a 部分代码如下:& }/ L9 C/ b# Z* G- Y4 g( z* M
0 q' @, o! o4 a
- void IIC_Start()
6 P( S6 x! w' u: { - {; o; D2 M7 w7 S( k
4 g; e9 z3 c: c9 s- OLED_SCLK_Set() ;
4 U$ {2 r7 N5 C7 n! M: r - OLED_SDIN_Set();
1 a& b+ G) z1 _: M8 Z# d; l - OLED_SDIN_Clr();/ Q; x7 s5 p9 \; T H/ k
- OLED_SCLK_Clr();
1 b' u3 ?( ]& b' V - }! T5 r& k. b3 |% d/ Q
- void IIC_Stop()
) \9 p& h5 R6 J - {( I. F6 z1 a/ l/ R" r
- OLED_SCLK_Set() ;
7 h6 V( v3 g# w - OLED_SDIN_Clr();" X; P0 `: o8 ^9 X! C! J% U* S
- OLED_SDIN_Set();
6 e4 Y! `5 Z* U" l/ p i! b* y - }
0 f1 v2 |8 ~% G, \( y - void IIC_Wait_Ack()
, A5 h" a# g: A N8 L - {
4 x* C4 u/ N/ C+ E4 B( y& ] - OLED_SCLK_Set() ;2 D/ x3 x) h3 M8 @: A
- OLED_SCLK_Clr();7 I% ?+ ?5 k' Q9 o3 f: [5 M: }
- }
9 E d; x. L$ \0 [ - void Write_IIC_Byte(unsigned char IIC_Byte)
7 a$ N& p8 \8 P7 } - {6 G2 L8 ~* F) |5 d; h4 I
- unsigned char i;
* J. P# S* H' H4 ~ - unsigned char m,da;
) N- g! g) `, T' p3 V/ n: F - da=IIC_Byte;7 ^ p4 d% {. G. Z9 H& T2 B) m
- OLED_SCLK_Clr();
5 [3 Y8 q. }& L# {1 w( ^ - for(i=0;i<8;i++)
2 ~- z) T5 f/ r - {
6 s# c% S, j; H# R; ? - m=da;( l; l( d6 Y' o0 e7 o0 k. y
- m=m&0x80;
, C7 H; Q1 O& X" X3 ?8 w P - if(m==0x80)4 R# p- W6 g J+ B5 b) @
- {OLED_SDIN_Set();}! G8 @0 Z; b& b7 `
- else OLED_SDIN_Clr();- L. E5 O' }5 b( Z
- da=da<<1;1 c- B- n' ~6 ?, j+ X3 Z* E3 K
- OLED_SCLK_Set();* C9 {0 {2 N* q8 n: y- h
- OLED_SCLK_Clr();
; W b D1 T, M/ G2 c - }
! P: Y7 F4 B# s2 W - }
, R9 A$ |& H9 t* H - void Write_IIC_Command(unsigned char IIC_Command)
2 ^" t& }% C# `% Y( a( i' T$ ?( h- e - {8 J* W0 C9 V. L6 J; c* N
- IIC_Start();! r' ?) H& ~ U# w8 }
- Write_IIC_Byte(0x78); : }* n* y8 o. z3 M
- IIC_Wait_Ack(); , x* A5 j6 N+ M( q t1 M
- Write_IIC_Byte(0x00); # E! X9 K: H7 h# }! R+ Z' A
- IIC_Wait_Ack();
1 B6 K5 ^. _! G0 M - Write_IIC_Byte(IIC_Command); " y' q2 p" ?2 l/ j0 l; D: I
- IIC_Wait_Ack();
' w7 o0 V' S1 ` [( J: U7 ` - IIC_Stop();
$ a9 N- A6 s7 [8 B3 [0 N - }. n- x2 I. c/ t e$ O
- void Write_IIC_Data(unsigned char IIC_Data)
# M% x, m$ S0 @ h, @% c - {
5 Z4 S2 l8 U+ G6 P0 z* q8 ~. k - IIC_Start();: j4 z& t; R9 k* s
- Write_IIC_Byte(0x78);# d% o* V" C5 k3 m7 C, l
- IIC_Wait_Ack();
; X, ~) n9 W; J - Write_IIC_Byte(0x40);
& G4 t1 r8 e. p1 r+ T5 K) U - IIC_Wait_Ack(); 0 H- U( U d+ ` I" E4 e
- Write_IIC_Byte(IIC_Data);/ @4 }8 W ?# L, C
- IIC_Wait_Ack(); : z! ]* K% S- E' @* T
- IIC_Stop();
4 X9 }! [- q. ^% K- c - }6 _/ ^8 b7 K( ]4 }: Z$ V$ S
- void OLED_WR_Byte(unsigned dat,unsigned cmd)
2 ^! R/ B. b: S/ c9 `3 U - {
- i; w4 K+ T& B* { - if(cmd)
: H4 u$ n4 S& ^: _9 h- l# S - {& {. |+ M0 N' |/ A6 L9 k
- Write_IIC_Data(dat);! N5 @8 N& S/ w, `- J
- }
y; f0 I! G% | - else8 t7 O! n% z3 @: V2 M' \8 c
- {4 H" B7 K/ V6 {6 i6 L
- Write_IIC_Command(dat); 9 f2 Y: R+ @$ H8 E3 _$ ^- `
- }. z, q6 C2 f* {( T7 R% A
- }, B0 t8 T8 M" N6 ?$ P* W0 G
- void OLED_Display_On(void)3 k" K/ z E. M7 Q/ d" R
- {
8 N4 i# u- o$ q# b - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC7 ]1 Y3 N; |$ j1 o# U
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON; G2 h4 i5 i/ M6 r1 y" Y
- OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON9 m) Q3 r6 ^/ M: g$ [
- }
( n9 f# R. O- x* U5 V, l/ M2 C - void OLED_Display_Off(void)7 c1 S/ \5 V, I+ a g3 K8 v) U
- {
) r" L! H7 A* _" |8 y+ f- P, v9 P - OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC8 j1 l' |0 m8 W g4 v0 Q& b' V2 ]
- OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF- F" H8 e v0 t" O! |
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF8 {2 q+ I4 p0 _8 V- e% B
- }
复制代码- void OLED_Clear(void) 5 y/ j# T% G8 Z O: l$ V" M. L/ G
- {
4 K3 {2 N6 d$ L4 L& e2 v/ ? - u8 i,n; * G7 `* s2 {; R j3 F
- for(i=0;i<8;i++) 2 g* |) B# y' O2 k6 t
- { ' i* w2 W3 F: g( z8 G- W
- OLED_WR_Byte (0xb0+i,OLED_CMD);+ |7 l/ d& T; {/ e4 f- r1 }) G$ O
- OLED_WR_Byte (0x00,OLED_CMD);: _$ W J# v. i/ N
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 3 K5 a7 t; v# [, U7 ]$ f9 t
- }
# L* d! n% V8 c1 U - }
% |) X9 h3 c$ S; s' G' C8 m. u - void OLED_On(void) 7 V& S; w$ A0 B! h& f% z
- { 4 T6 B1 F' A) R2 P% x _" y0 J
- u8 i,n; f% {& G! s: a I5 m4 Y# ~( Y
- for(i=0;i<8;i++) : U/ T8 e$ ?+ O" l5 J4 k7 [5 }, }
- { ' B$ X6 e+ l- @ e" C2 ?* x
- OLED_WR_Byte (0xb0+i,OLED_CMD);
+ K% k( S* S* ^ - OLED_WR_Byte (0x00,OLED_CMD); - Z& a8 q% O+ m9 Z! l
- OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 0 ?$ V/ x3 _& h- V# I& H
- }
* o! r, `8 H) w( ^+ d7 s - }
0 j& ^" [' _3 B, S2 X - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)( J4 U( c, E1 H+ f
- {
* ~+ N- T/ P2 a: B - unsigned char c=0,i=0;
( i S3 `! C* O) W0 l. u; C - c=chr-' ';' l' w2 h) W' ^1 E0 y$ x" X E
- if(x>Max_Column-1){x=0;y=y+2;}- t; Y. h3 K7 l" g& D# ^7 Y* r9 L' w
- if(Char_Size ==16); m/ O8 X. ?4 m
- {# I$ e% p- d, Z' p; G; m
- OLED_Set_Pos(x,y); + b& ]% q3 Z0 n4 F$ R
- for(i=0;i<8;i++)8 ]8 h: p6 Z5 E# \# l6 n. G9 ]
- OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);: I E# K& b$ b P9 {/ }
- OLED_Set_Pos(x,y+1);; n* h' a X9 H
- for(i=0;i<8;i++)
% [5 |4 v- Q) Q) B7 n - OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);
: ?# {, ?4 ]" W' [# n5 Z - }0 d; z& u7 Z) }7 i" V1 @4 S; q3 r
- else {
" B: S2 _2 Y: c; A [ - OLED_Set_Pos(x,y);+ ?. B/ W- w2 B n/ M# [
- for(i=0;i<6;i++)
) x: n9 _4 S l7 y# I7 J$ ] - OLED_WR_Byte(F6x8[c][i],OLED_DATA);
! Y9 Z. B2 k9 `% e5 ]- P" U/ u' { - }/ I$ g% {5 j4 @ N$ h; T
- }
7 ]- F% q% m( O) r8 B1 r - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)2 s/ f" S# f( x2 E
- {
1 r2 l$ U4 w, f/ ~! }6 }8 K: C - u8 t,temp;: ^6 |7 @' a& D4 F# V& m! S" z
- u8 enshow=0; # r& c4 T* [1 D. G3 S) X9 J
- for(t=0;t<len;t++)8 b- I/ z$ X# S1 y# X; h/ i, B
- {
6 B! D$ x1 X4 m7 V - temp=(num/oled_pow(10,len-t-1))%10;3 u* W# x1 e6 Y# o0 U" F
- if(enshow==0&&t<(len-1)); r" ]8 ?1 Q& u+ j
- {
( {( B: I% J" b: b - if(temp==0)5 a w& N$ e* X4 n- p U
- {
* `7 R2 c! q j4 d - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);2 l) a3 Y6 `/ ~& ?
- continue;; ]" Y5 `! y; n( ~
- }else enshow=1; V7 x1 F% ~3 B3 Y
- ' G) K" f" K" f- f& H7 ^1 }/ ?
- }
* [; L& R [/ ?6 M8 ?6 f# }1 { - OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2); 5 I6 _+ T" E* h6 l
- }
( X: `! ]- K5 r( z) e - }
/ {% }: I# g" I# T/ I6 W+ [& F+ [ - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
% n9 Q5 j& q2 L+ h. U7 j& i( H6 V - {2 z/ i' `( F; n \
- unsigned char j=0;
7 D; k/ y+ }6 i, m( I - while (chr[j]!='\0')
0 j, E1 a# [# m7 J" R - { OLED_ShowChar(x,y,chr[j],Char_Size);7 f4 S' ~7 C4 `1 u
- x+=8;4 W1 h" p( g$ g7 D! i! l
- if(x>120){x=0;y+=2;}
9 N1 w6 J* R% ^+ o) y& d0 ^ - j++;
0 v1 ^8 W2 o& Z0 b# u N - }
]) @2 T# \% E4 h, U, a - }
4 K8 [8 Z4 S: u: S, i0 ^1 w
( X+ B" ` }9 u, k; R( `: F- void OLED_ShowCHinese(u8 x,u8 y,u8 no)$ U% y& }" p3 c: {. L
- { 8 t1 w5 C5 U. D6 ?- V' A# e
- u8 t,adder=0;" i% k8 ~3 ]* f
- OLED_Set_Pos(x,y); 1 E- ?' K" b9 ~
- for(t=0;t<16;t++)$ b/ r; h: Q) ?: S/ O' d
- {- P% \; }! r1 A0 J! i
- OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
5 O: f" |0 K' w - adder+=1;( d) R, j4 R- u7 G+ B" X) c! z
- } 2 F; ~- s' T3 @; g R
- OLED_Set_Pos(x,y+1); 2 u; y# _4 w8 P v. j: U+ o
- for(t=0;t<16;t++)! p3 A& C% U: r1 ^( b8 b
- { + f* k6 Y1 S0 W s1 A
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);7 p- ?& M, t' d1 W
- adder+=1;
0 s U% H+ \" @2 R1 M1 D3 n - }
1 @8 D) Q8 G7 {& g! G& t$ D - }
/ g8 A _3 y9 q; _
% B2 s/ J3 O4 L1 a: _2 z- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])
+ X o. S' Y) Q0 E3 s3 _ - { ; |6 K" B: p0 z# y
- unsigned int j=0;
! y6 [6 j4 J, t* B8 i) `0 K: s - unsigned char x,y;2 q* n0 w8 A" H; I3 Z: m
-
; K. x5 B5 f' }% m& v - if(y1%8==0) y=y1/8;
0 n9 {/ V/ i, l3 J/ V - else y=y1/8+1;
7 p1 a+ k" c0 O2 O& R5 D+ ? - for(y=y0;y<y1;y++)
9 j+ ?4 U8 o- b4 n - {- i4 L, N/ M0 V/ l0 F
- OLED_Set_Pos(x0,y);
2 o8 i% i6 y& e - for(x=x0;x<x1;x++)
" N1 R4 Z) u1 e: s- A5 v - { ) S0 A. e) A1 q! z& p6 g. P* h D0 k1 i: ?
- OLED_WR_Byte(BMP[j++],OLED_DATA); $ S9 Q. Z# U. O, T, B: X c7 {
- }
" F1 A( D+ g" {+ j: K( w - }
6 Y% r _; ~- \( U - } & v6 I5 N; |& Q, \9 \ D# j4 \
- s6 o8 w n5 R
- void OLED_Init(void)
$ Y4 S E2 J7 [& M+ \ - {
q. s- @+ q$ j* z - GPIO_InitTypeDef GPIO_InitStructure;
% |2 _3 n2 ^+ m8 m - - M+ L: t( w _# P ^3 P z) f) a4 P
- OLED_GPIO_CLK_ENABLE(); 6 |3 h" J5 S0 P1 O5 C- _ N+ z
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;
8 Z" Z Y# W* ^1 [5 A# }+ k6 q' m - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
- a8 D* C8 \: o. i - GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
$ c/ i: o9 N$ m! U3 C - HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); * y+ n5 k l" J+ q
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);
8 K" K( `+ J: e& r - HAL_Delay(200);( q" E/ `" Z0 s% ]
- OLED_WR_Byte(0xAE,OLED_CMD);; H/ B8 h6 W4 D0 P, ^
- //display off5 [+ T2 k! s# [" Q1 c: v0 B3 y& g9 v
- OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
' z7 C' Y ~! V5 B. _ - OLED_WR_Byte(0x10,OLED_CMD);//---set high column address; i2 i: d _7 A
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address ( M3 `. l# y" P E! W2 u
- OLED_WR_Byte(0xB0,OLED_CMD);//--set page address6 h& x4 e3 _/ Z$ L6 W
- OLED_WR_Byte(0x81,OLED_CMD); // contract control
8 b0 t9 W* f9 \# c3 @# i9 b- a - OLED_WR_Byte(0xFF,OLED_CMD);//--128 ( Y1 e, Q$ V4 W- @6 W$ P* N
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap
/ Z; W2 x5 `$ J7 E5 k; c - OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
/ Q4 x' g w" a - OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)* a( M" Q5 I5 |7 @' y
- OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
5 Z U, j6 d. t' J4 ?+ W' X/ C - OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction! _# X7 m l$ P1 f* J
- OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
4 n% c2 d: v6 n" l* [ - OLED_WR_Byte(0x00,OLED_CMD);//, P1 z- D1 u6 R
- ! `0 h5 u% R: i5 B9 @8 N
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division3 k# i) o! c. g. @6 x* }, _3 t6 Y
- OLED_WR_Byte(0x80,OLED_CMD);//
$ l' c9 v) d3 y4 _+ Z# m' S) M' p - ! _; u# ~) A9 F
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off
( ]9 x! w- F$ y8 v - OLED_WR_Byte(0x05,OLED_CMD);//; c2 G0 _0 ?( C5 B9 G% T
-
/ j. A( r# U" J0 h - OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period
- T% m/ z1 N m( ?3 q - OLED_WR_Byte(0xF1,OLED_CMD);//6 D5 u E/ E) a
- 8 m. M/ l& j- s1 j' E: h
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion& q1 ^' [& u# e, ]$ s* u1 n* n9 Q* [
- OLED_WR_Byte(0x12,OLED_CMD);//
5 b: @5 L0 R4 j& s -
+ q' W' e) g8 k2 P - OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh
) {) V+ ^1 u+ N. a% W: h - OLED_WR_Byte(0x30,OLED_CMD);//2 V f! u' _* N/ W" ?6 I
- ! }8 M2 S8 \% z9 c. _6 o- e* [
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable D1 N* Z+ z" y! l
- OLED_WR_Byte(0x14,OLED_CMD);//
! Y) H4 _# r' w. D. t j4 b - 7 f; J" K( r- r$ h4 q$ |4 `3 U
- OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
' V; b/ i. U& {( {- b# R0 `) g - }
复制代码- #ifndef __OLED_H
1 ~& f# o+ E( \/ _9 J4 p0 ~" J - #define __OLED_H . c7 D' Y! h! d6 z
- #include "stdlib.h"0 f5 d: Y: M0 V( b9 o! Y% I
- #include "stm32g4xx_nucleo.h"
5 P2 l+ F) Y3 i: M0 Y5 C. y S - #define OLED_MODE 06 G% w! U/ q4 X3 _
- #define SIZE 8: F C( @3 |5 j
- #define XLevelL 0x00. Q) F+ r) {, K
- #define XLevelH 0x10
/ ]& l2 x* b6 [: S - #define Max_Column 128- q2 r/ W( Y$ R- ~
- #define Max_Row 643 R- J& y" J0 v! b/ z
- #define Brightness 0xFF 4 j) U" q. j4 _
- #define X_WIDTH 128
( p+ g$ S2 n8 U, t, C - #define Y_WIDTH 64 7 x+ a, ^4 e! H- D
- #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK
; \1 o& G; x% z; l4 [) s) K9 I9 h9 ? - #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)
: w) M1 X2 E9 L! F7 t" }1 I7 q- E
2 ]+ G0 S8 J2 H4 X9 a; x' Y- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN% s$ {/ G6 r2 G/ Q# y# ?
- #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)/ _7 ^& W$ v, x2 R) V1 F" h
3 z0 s5 s- e1 |, r' }- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES) W2 A" T" ]. A5 t3 ^1 j+ S
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11), ~) A: p8 H1 B/ D! n8 K8 g( t6 n# g
- 1 c) b6 j. k: @
- #define OLED_CMD 0. N9 U9 F& e! B' m4 [4 b) u; q
- #define OLED_DATA 1
) R& ]7 n2 G# N5 _: H( ?7 C - #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
$ f7 J% O6 ~7 Y! p6 o! P9 n Z - #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE(); m2 H4 Z q; L
- 0 I* _5 k9 H2 h- ?3 h
- void OLED_WR_Byte(unsigned dat,unsigned cmd);
; f3 Q, V7 P" \# Z% ^ - void OLED_Display_On(void);
3 j" [; k" |4 A+ p8 x' ]4 g; c - void OLED_Display_Off(void);
7 d7 a ^- `: Q' W/ a - void OLED_Init(void);
7 y6 ~, V% m. K* Z4 D - void OLED_Clear(void);
! q2 c* L( y+ Z' i$ S6 Y - void OLED_DrawPoint(u8 x,u8 y,u8 t);+ r2 f0 u) r' q% L Z7 a! w! y6 M
- void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
7 l7 j: S+ {; ]# t+ R+ J3 U2 v - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
9 ]) x5 ~4 p' d$ Q - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
. Z* p, O8 L! i: t ^ - void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size); # Q) ]! y# s' C
- void OLED_Set_Pos(unsigned char x, unsigned char y);" q: t; p+ f1 k
- void OLED_ShowCHinese(u8 x,u8 y,u8 no);, P" `( G& ~1 ]3 |$ e; t, j, {
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
) ~/ t2 I2 R9 B6 W- N - void Delay_50ms(unsigned int Del_50ms);
, A' d0 e' s. z( x) \, F- T0 j - void Delay_1ms(unsigned int Del_1ms);1 U/ @* \ l' P, n
- void fill_picture(unsigned char fill_Data);
* g- Q0 ?' @* p4 r9 P) q1 ] - void Picture(void);
* x6 a* o! `+ B - void IIC_Start(void);5 ?8 K" j n! x; n( u) [0 t1 S
- void IIC_Stop(void);
/ y0 f% h( W/ k9 r3 O: |- S - void Write_IIC_Command(unsigned char IIC_Command);
3 C6 x+ m* s' g. O# y. }2 t3 t) } - void Write_IIC_Data(unsigned char IIC_Data);5 t6 d9 T/ X: c
- void Write_IIC_Byte(unsigned char IIC_Byte);% l% e) f2 U" \% a2 @/ l
- void Display_Battery_Level(void);
, _3 b5 P7 `6 N9 H0 u! N7 x; ^ - void IIC_Wait_Ack(void);. [+ O4 |: c" E( ^3 i
- #endif
复制代码- int main(void), y5 _6 ~; O7 c' K" X4 m& @ }
- {% Q- O$ x# X9 Q3 r3 H; E
- HAL_Init();
: w7 B& k7 i6 u! _" O0 D0 M) m - # ?8 ?2 N, m0 [6 }/ s
- OLED_Init();
2 @1 i0 w9 U1 ` - OLED_Clear();
! t& z# w+ R$ g( s2 E, G, U - SystemClock_Config();" V& p' | T0 C$ o( L7 ]
0 q$ }* A/ u5 ~3 Q- a) O; J w- BSP_LED_Init(LED2);+ B0 {# l0 G! [% ^; U# @6 P) c! Q m
- EXTI15_10_IRQHandler_Config();
" I* [; a3 Z* W5 W7 H2 m5 |
5 \& I- j# I9 |, T- while(1) b' H! a; ]; }
- {
Q X& B, [4 U, w2 C* N! g - OLED_ShowString(0,0,(unsigned char *)"STM32",16);
" d9 |( V: Z9 Y, S" W( Z0 K - OLED_ShowCHinese(45,0,2);//
2 D' \1 K& _3 ] - OLED_ShowCHinese(63,0,3);//
" E& c8 r: L! s: g9 C - OLED_ShowCHinese(81,0,4);//9 a- @: O" L6 J# J! [% |5 d
- OLED_ShowCHinese(99,0,5);//2 u0 U& u* k8 A5 Q, i _ X4 j3 M5 k6 `
- OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
B% `6 j% b9 l9 L( v4 H - OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);
' n& [: Y j7 ~+ s - } & l2 G* Q h- K! ]0 U
- }4 K7 d$ r1 M. m
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
$ ^4 @9 E6 m3 ?( }( q+ C/ u1 h
S0 B5 o2 V$ m% h, i5 G7 Q- y3 y+ ^, a3 y5 W& i
|