国庆假期即将结束,回顾这些天的休息调整,今天拿出来STM32G4 NUCLEO G431RB板子,结合之前工程资料,点点OLED屏。之前发了提问贴,谢谢各位网友的鼎力相助,Keil在线下载提示内部命令错误是Keil版本的原因导致,所以重新安装了5.28的版本,并安装了板极间支持包,底层标准接口动态库,然后很顺利的就实现了在线下载、调试。本来原计划9月份下旬点亮手中的OLED屏的,但是手头的OLED模块不知道什么原因,一接通G4NUCLEO31RB的VCC,模块的屏与FPC连接的地方烫手,然后拿到其他开发板上验证,确定是OLED模块已经短路破损,然后在淘宝上淘了一块OLED模块,今天拿出来来调试调试这个模块。
N7 m* C& y1 I# {+ l7 c" O4 l4 V 模块是采用IIC的接口,所以结合基于STM2G431RB的原理图,将SCL连接上GPIOB8,SDA连接上GPIOB9
- @1 m: P# o* ]2 Z8 F$ h7 T1 L
' }6 ~6 Q n9 O7 E7 _$ c* d
部分代码如下:2 w5 H' e. I9 b; b! q
; ^% p& Q: e- n- e7 f* O0 y; I7 Q! Y- void IIC_Start()( q/ D3 G* \ l+ j0 _1 r5 D2 l; h
- {
7 q' ?0 F3 m4 \, H, X
0 k4 {& N3 t, G. x- OLED_SCLK_Set() ;
1 L0 f' k+ e. Q& R' e - OLED_SDIN_Set();
# b: ~) d' Q% W7 e6 ~8 V2 Y - OLED_SDIN_Clr();
# A" `7 S/ G Q7 x+ I5 y) q5 _4 E( c6 b - OLED_SCLK_Clr();
/ ^% m* X* Z3 N7 P" j - }3 N& X( r# |' @- f8 E
- void IIC_Stop()
9 I. c0 \3 g5 k. v1 c( b# x - {
# }/ m0 O' g8 ?& u$ ` - OLED_SCLK_Set() ;" s4 Q+ {! Q5 i2 w
- OLED_SDIN_Clr();
: O0 |3 [# Z* E8 n* D6 z% ?% [; D - OLED_SDIN_Set();! U8 c3 Z. n+ D l* {9 l8 l& f
- }
9 T, f1 w$ C3 N. \% d - void IIC_Wait_Ack()
* H! }7 Q; k$ K' @8 U* A+ C, i - {' V) b/ ?& j6 O
- OLED_SCLK_Set() ;
' Q' D. {* p: ^ - OLED_SCLK_Clr();
. T# J/ R! f5 ?* } - }
T9 n4 O; ^% f6 k2 y - void Write_IIC_Byte(unsigned char IIC_Byte); Y4 ]! q* z6 W6 _9 |2 N1 Z2 ?
- {
- f& X1 L' U) Y - unsigned char i;
6 P K+ e: h. |) P+ m* f7 O0 i - unsigned char m,da;3 d! a" K1 F8 ^+ A0 K5 M; D
- da=IIC_Byte;
! M; U! G/ D: m - OLED_SCLK_Clr();
7 b( |, |6 o$ h p - for(i=0;i<8;i++) % s r+ J- b" b( i% ?6 S
- {7 P2 E" q4 T0 l. ] ]+ ? G' }. U; G0 \2 s
- m=da;
4 e: F/ W1 Q/ f4 W. e6 X+ s* n - m=m&0x80;
- ~1 Y( A$ w8 n- [/ b/ W - if(m==0x80)
1 X% O) s b' X# }' y - {OLED_SDIN_Set();}
5 @/ e# w& \/ k3 z; L - else OLED_SDIN_Clr();
$ ^# j& P/ b) F3 V. A+ y8 ^" A - da=da<<1;5 Y0 _+ k/ a; i0 Z* @# n4 `8 h
- OLED_SCLK_Set();) G7 N3 \& B6 z4 Z$ N
- OLED_SCLK_Clr();! S0 w# O; b, @0 {, q# f: N, B; w
- }7 S8 v9 Y6 p' i7 w, C% u
- }/ Z- T$ s" h% K/ w
- void Write_IIC_Command(unsigned char IIC_Command)9 e. F5 d4 j4 s% t! R/ h' b9 r
- {
. V& o6 ^1 U7 L3 S, U. T - IIC_Start();: G9 q, I9 w. J, D1 B
- Write_IIC_Byte(0x78);
. H! h$ E Z. m* w. l0 E# x# ^ - IIC_Wait_Ack();
5 U! L' {3 ]& C% C0 z% Y' F e; h - Write_IIC_Byte(0x00); . j- z# t( C. o: w1 i7 e0 j7 i+ T
- IIC_Wait_Ack(); % E2 k5 p( D# K# W6 ^) k* C+ l+ e
- Write_IIC_Byte(IIC_Command); 8 z0 n" O: L1 S8 W. _
- IIC_Wait_Ack();
7 G" i4 @" H; d - IIC_Stop(); O* _5 k+ y3 n( _
- }$ v& K7 T* c- V* z; N* S0 p
- void Write_IIC_Data(unsigned char IIC_Data)
7 A: b; ]& _4 P( m' _& r9 K - {
; @5 R5 Y) [9 p1 [. Q0 Z - IIC_Start();% n& |, F* u" ?# b; W/ ]& g
- Write_IIC_Byte(0x78);; N+ v6 W/ f" j" z1 T5 M9 j' X
- IIC_Wait_Ack();
* L' Y5 [3 p- e; j - Write_IIC_Byte(0x40);
* E0 b5 K% G% Y/ z- c w - IIC_Wait_Ack(); , s* ]8 l# M1 F9 ^* `( U3 |8 D
- Write_IIC_Byte(IIC_Data);
0 T& y: C: c3 m+ d* U _; I - IIC_Wait_Ack();
: H+ s) J6 A6 o1 | - IIC_Stop();
! D/ a D2 \! v6 p/ {+ n E - }
3 Y! a! J% S. F - void OLED_WR_Byte(unsigned dat,unsigned cmd)
) D1 h, R8 q3 F4 p) @& `. A6 G* I - {
# l7 v9 {1 l- V$ s0 X. p2 a5 Z - if(cmd)
" | ^( G! M; |/ _( Y - {
9 B. [; y4 c. G% B, ~; F - Write_IIC_Data(dat);
* O5 b; ^2 R4 S: H; Q: D - }
; `9 s6 ~2 {, ?9 f7 S - else0 t# X) v/ c4 W* _% [8 F9 z0 E. u! f
- {
: N1 C! f' h$ d" j - Write_IIC_Command(dat);
8 q+ R: C* {# m+ U: k& H6 I - }4 l! M# Q6 ?+ u+ y
- }
2 D. Q$ X! N/ r - void OLED_Display_On(void)+ l. l7 `, N: r8 _
- {( m# P1 g8 i' ]
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC# F' I, c, O, k* Z r) m2 @
- OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON
2 _* n: i# h( [: o1 U9 t& I - OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON! ~# k8 ]* o5 u# c/ j R
- } 1 y; m/ {4 z% U- a }8 y7 ~- H/ b I
- void OLED_Display_Off(void): p5 I% q3 ]' |/ B6 V5 L
- {0 r, X- u* C% Z7 d% f7 f7 i
- OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC
" K+ r: \9 J$ |" \8 E) d - OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF- Q2 l O! P/ u* K4 G2 k( q( d7 {
- OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF: V7 n% p6 {$ g/ v2 \
- }
复制代码- void OLED_Clear(void) . c1 U2 @4 i9 ~7 v! p8 ]6 y
- {
. B0 p8 H- o _3 \ - u8 i,n;
9 Q3 y2 ?/ }+ `/ [6 e$ K& Y+ T3 l - for(i=0;i<8;i++) 5 E( P/ o; v' }0 E, v @/ o3 X
- { 6 ~& i0 g) E5 |$ Z
- OLED_WR_Byte (0xb0+i,OLED_CMD);& x6 C9 [/ g I' a
- OLED_WR_Byte (0x00,OLED_CMD);
! z& ?2 X& [. D Y+ a6 R0 n - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); 9 M5 A# X8 J" y. E0 E( P
- }
; l" C3 m1 i% j ^& B( t - }
# J; r" H7 G u1 L% y! ]3 \7 P - void OLED_On(void) 5 V; v% |& r- [. O$ T1 [
- {
u" x' S9 q, i5 g2 J* R, F - u8 i,n;
- ?+ Y: _2 l# l q1 D7 y - for(i=0;i<8;i++) 5 l' @; t5 U9 A. N- n. Y; O- S4 y
- { 6 @/ {+ N& e& G: F: d2 c& w; e' @4 d
- OLED_WR_Byte (0xb0+i,OLED_CMD);/ Z. q) U) u' k* m. t: \
- OLED_WR_Byte (0x00,OLED_CMD);
/ |: Q# F: I) U/ s* \# g$ o- Q# z& i - OLED_WR_Byte (0x10,OLED_CMD); for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); " q- O2 d# z/ C
- }
* d+ F, R' B0 P5 {5 } - }
& g4 D1 ?2 e; V4 Y; w" h& N - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)4 e6 j0 p9 p( j( d& s$ F; T1 X
- { * n6 @2 u4 m3 E1 K5 s) r
- unsigned char c=0,i=0;
5 Y1 W4 Z% s2 `( c& e( q" n - c=chr-' ';
; @0 H. S$ s, f8 J% [. c. W - if(x>Max_Column-1){x=0;y=y+2;}( e; r/ t- a! `" P
- if(Char_Size ==16)- ^3 Z3 h7 F, Z7 v' }7 `: @
- {- m# F5 E& p$ t# u
- OLED_Set_Pos(x,y);
- _7 K& u% ]9 A5 L - for(i=0;i<8;i++)
$ l; ]" c3 Y2 g4 R _% i - OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);5 {1 _& @: K# h% r+ E: I
- OLED_Set_Pos(x,y+1);
! y4 X4 q8 ^ N& I; s - for(i=0;i<8;i++)" N( m: U. s8 r
- OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); t' `# S; N% U1 _) L: V3 ?0 N
- }8 C: k3 L+ R$ Y9 D. D: h( p! h0 A% |
- else { : O+ P( y2 n+ {4 O# L M+ `
- OLED_Set_Pos(x,y);6 T% `% i, h2 k2 I9 b7 O$ x
- for(i=0;i<6;i++)5 G/ L) l0 Q9 D6 j
- OLED_WR_Byte(F6x8[c][i],OLED_DATA); ; c( k& g0 H3 q/ X8 \/ j
- }2 e* t) L, u5 H6 T- ^( L! W
- }3 G, h( S6 o+ T P1 e" k
- void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)6 R1 u; f& b' k- L/ o
- {
: q1 t- W+ v4 `& }2 o' o - u8 t,temp;5 V9 G6 x; Z3 ]% `; v& N8 }
- u8 enshow=0; 8 m3 f. W& H3 N0 j
- for(t=0;t<len;t++)0 \9 X4 q6 Y7 M( [9 {
- {7 d7 R E2 |- X. ~9 j( a
- temp=(num/oled_pow(10,len-t-1))%10;
0 k) A" G x9 I, t# f) j3 v: _ - if(enshow==0&&t<(len-1)): z, P, d( r0 i% u1 y. c0 X) t
- {
5 K& V# | U# f$ z, X3 s# W% Q - if(temp==0)- m$ n: \2 Q1 ~
- {
/ c, U6 L9 q& g - OLED_ShowChar(x+(size2/2)*t,y,' ',size2);
1 j! r) v5 V. ^% J8 e3 k f; E+ H - continue;
. J. z6 h& j# R" ^) r# ~' P, s' F - }else enshow=1; 3 j; \$ C% t+ D& [+ ]+ \5 F
- % V; E1 X5 u0 B0 k& S8 O
- }4 `5 i5 |1 G7 C" o/ d3 @" G% G
- OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);
" G' L2 s- b/ ~ - }2 h5 a" U5 ?7 B) x; N! s
- }
- m! q$ L S# C' W+ x& P* F- H - void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)- C$ p7 N" u: h* \! U! y9 c: j
- {/ R* O( I( ]4 ~& g* U
- unsigned char j=0;( M' o2 v, ?7 W4 y9 P
- while (chr[j]!='\0')
- ^1 Q. r, n; |% W! ?" H( \: M6 h - { OLED_ShowChar(x,y,chr[j],Char_Size);. k# @. y( b* \, Q+ a
- x+=8;/ K3 u; C6 ~: R O% n
- if(x>120){x=0;y+=2;}
% p$ V' J3 q3 U7 B/ R - j++;8 y" p% g1 G3 a
- }" g) k! v$ x) \! {
- }
' B' S6 ?# D+ e" W3 Y- r4 W/ {
+ w) }6 W) ~ D- void OLED_ShowCHinese(u8 x,u8 y,u8 no)9 C$ d, k# |8 M' y' t5 z6 \3 ]. l
- {
/ S7 U2 w: V D! d - u8 t,adder=0;
2 A% [, }8 Y3 ?7 X8 }) I$ } - OLED_Set_Pos(x,y); 6 J3 f! Z. W8 \. C
- for(t=0;t<16;t++)( u) i4 ?3 L8 b: J; D E
- {
2 k6 _$ C) g+ Q+ X4 J7 \% d - OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);! l. X1 B6 j t; s, j* Z
- adder+=1;3 [/ D0 J+ v: a% r9 X7 D3 ^& j
- } . C l3 {2 q* m+ Y) Q
- OLED_Set_Pos(x,y+1);
8 S7 k, V. _9 {$ [; o - for(t=0;t<16;t++)
7 x; ~0 p9 i/ O& A3 f3 H! p - { % i2 S3 K+ V/ h" i
- OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
) O# e' J* O" ?; }: d9 T) ?3 ]2 _ - adder+=1;$ P1 i5 R8 \( W
- } 5 x1 y) N [2 z/ _
- }. U; R. F: p6 f9 V$ Y
( [2 H$ [1 y' }) g- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])- a5 S6 T5 q# D- c0 R& R
- { . c, C; Z6 R+ ^1 E
- unsigned int j=0;
7 m6 v( i$ H9 Y7 k3 I - unsigned char x,y;
. i2 J: f- |. j( G -
% U* F3 M( R0 l* V' ^: f% X - if(y1%8==0) y=y1/8;
- r# b5 m0 K5 Z4 T8 w+ ~7 M8 A - else y=y1/8+1;
, p/ e2 I3 @( P5 ~ - for(y=y0;y<y1;y++)5 P$ j8 }# s# c. {* t6 H! i
- {% _+ s2 m5 E/ z S$ [, O: _+ Q5 R
- OLED_Set_Pos(x0,y);
! n; G- P3 W9 z - for(x=x0;x<x1;x++)
# s/ [" E) o9 {/ B9 i! ` - {
5 o2 ~' |( S" }- z' H$ P, a - OLED_WR_Byte(BMP[j++],OLED_DATA); ) A. ]: ]4 [0 X) J# ~4 ^% H) T
- }, J$ @7 _5 Z u$ C
- }) E- h" d" m' K7 ^- j
- } 6 J( O( \$ S. `# w& \9 p! A/ x
- " J/ @7 _" R v. j* ?
- void OLED_Init(void)
9 M1 f9 ?3 E; j/ {3 z - { " u: Z8 A% e! |# X
- GPIO_InitTypeDef GPIO_InitStructure;. z$ h/ U; r4 I
-
* [8 b% C% m" s5 ~* R6 S; v - OLED_GPIO_CLK_ENABLE(); " f( g" D$ z. x# f$ V- v
- GPIO_InitStructure.Pin = GPIO_PIN_8|GPIO_PIN_9;
" J( W9 T+ R7 G - GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;$ ?. K+ j) ^) w0 M
- GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;! F' l8 ?( S' C
- HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); 9 R" Q# \5 K8 W
- HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8|GPIO_PIN_9,GPIO_PIN_SET);' J, f4 R2 Y! i0 j/ h( k$ v& F
- HAL_Delay(200);
' t' a) K7 z; F - OLED_WR_Byte(0xAE,OLED_CMD);& N$ w5 P/ A& W+ N! c* ^) |8 O8 Z
- //display off
" i5 C- |! q! }4 f# L% _ - OLED_WR_Byte(0x00,OLED_CMD);//---set low column address
- ~9 t1 j! f/ N5 q5 |* i - OLED_WR_Byte(0x10,OLED_CMD);//---set high column address% `, R$ x& a5 ^1 F0 y8 E% g# d
- OLED_WR_Byte(0x40,OLED_CMD);//--set start line address
# V+ W8 _5 |0 L% ]& k+ V; L - OLED_WR_Byte(0xB0,OLED_CMD);//--set page address# b8 c+ e, X; r5 [
- OLED_WR_Byte(0x81,OLED_CMD); // contract control7 O$ \9 F! X6 c% y8 v
- OLED_WR_Byte(0xFF,OLED_CMD);//--128 G0 l' y* c) |
- OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap ! w; Q S/ O! o8 ?. c5 T; e
- OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse
5 Z# T" v" q2 P6 M - OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)
4 h& k! t u5 { j1 r( P4 a - OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty
; B" q( X9 o& u. E8 q1 I# N5 U' x - OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction
/ w& I3 ]. Z5 F1 K7 |7 q - OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset
6 ]4 Y4 S3 R3 B - OLED_WR_Byte(0x00,OLED_CMD);//0 n7 E+ [/ w; A9 n( l+ t
- # i! y. v& k4 R) t
- OLED_WR_Byte(0xD5,OLED_CMD);//set osc division
" t' c. \ F! e% S. }- K8 }% ] - OLED_WR_Byte(0x80,OLED_CMD);//, @% p! H7 j8 t5 Y# G
- % n) \, p' _4 h. M6 p- R* T8 A
- OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off$ s& W4 b7 J t
- OLED_WR_Byte(0x05,OLED_CMD);//$ l$ u, m; ] v
- % l6 f- w4 d% v
- OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period) b- U" v% |9 u/ {9 V+ g
- OLED_WR_Byte(0xF1,OLED_CMD);//) A2 I \4 g. z, H. Y
- / B A9 h4 n z
- OLED_WR_Byte(0xDA,OLED_CMD);//set com pin configuartion
9 |( L, ~/ X3 _ - OLED_WR_Byte(0x12,OLED_CMD);//. ~! C: M6 G$ }# B# e
- # B l5 Q+ C) J
- OLED_WR_Byte(0xDB,OLED_CMD);//set Vcomh% ^+ L s: Z9 @( {0 j" c
- OLED_WR_Byte(0x30,OLED_CMD);//
7 n, q6 D; _. C) z- _' i2 I2 p8 @; } - 0 \4 p- c) R1 w- _+ g
- OLED_WR_Byte(0x8D,OLED_CMD);//set charge pump enable' _! X$ I3 z; i/ J. ]& R) Q
- OLED_WR_Byte(0x14,OLED_CMD);//" h: W5 n4 M* R7 J3 l
-
* |2 k/ _9 ^! O+ F/ g- u - OLED_WR_Byte(0xAF,OLED_CMD);//--turn on oled panel
4 g9 S' t k, v' } - }
复制代码- #ifndef __OLED_H$ K, `) [$ S1 `
- #define __OLED_H
4 G' R9 f% Y6 |6 I" A( C: F7 C! b3 C - #include "stdlib.h"# ^5 F9 z ]$ \0 L% {( h
- #include "stm32g4xx_nucleo.h"
: @2 u I# r' ]0 h P- S0 S% Z7 M - #define OLED_MODE 0# j- b2 [& H* z: \
- #define SIZE 8
7 N% D1 w0 \" R, I5 ? - #define XLevelL 0x00( F' c" v7 {. W7 }8 x
- #define XLevelH 0x10) n6 w; v7 Q8 k
- #define Max_Column 128' T2 z0 T; |0 l/ k/ z& m
- #define Max_Row 64
v4 X- o" b! U0 Q) K - #define Brightness 0xFF 8 H! E6 B' ^- U0 f2 ^
- #define X_WIDTH 128. X; B* v& a0 n# m6 c1 e$ m6 [% F( e9 K0 H
- #define Y_WIDTH 64
, m9 }" i' S8 m& V3 {0 C - #define OLED_SCLK_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_RESET)//CLK2 D( }) [6 P, T1 t5 D
- #define OLED_SCLK_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_8,GPIO_PIN_SET)/ z) A: @; [5 G6 x
! r. l |! v4 h7 h$ U2 z$ W- #define OLED_SDIN_Clr() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET)//DIN
& k( M+ x* h) B - #define OLED_SDIN_Set() HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET)2 _# A6 G8 ~$ {9 D
9 e& d$ K8 \, Z" ^" p- #define OLED_RST_Clr() GPIO_ResetBits(GPIOB,GPIO_PIN_11)//RES/ m; n" y0 @- m4 Z5 H9 n
- #define OLED_RST_Set() GPIO_SetBits(GPIOB,GPIO_PIN_11)4 S' n" \; k1 D& O' ^/ @% s$ A
-
- N X7 k9 l: U5 a1 t: ~ - #define OLED_CMD 04 J' G, F7 {) w. G @: g
- #define OLED_DATA 19 Q! M* u0 w' l: c' z" W! }1 i% K
- #define OLED_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
3 V4 r& I6 f4 m; z - #define OLED_GPIO_CLK_DISABLE() __HAL_RCC_GPIOB_CLK_DISABLE()
$ G9 \0 d# w" Y5 x; T4 y5 v - 1 e* k: _4 i% F+ M0 l
- void OLED_WR_Byte(unsigned dat,unsigned cmd);
1 v8 [" `0 t( J3 I c - void OLED_Display_On(void);
3 N8 Q; {8 x3 K - void OLED_Display_Off(void);
0 E9 c) c2 V) h - void OLED_Init(void);5 c% T' T+ T9 [: K% M5 X' M
- void OLED_Clear(void);9 }9 Y% I" X9 A: h, D
- void OLED_DrawPoint(u8 x,u8 y,u8 t);# w5 g, R: `0 n
- void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
' ?/ F9 S; H( r - void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size);
; S" c' j8 q0 C% ^ - void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size); * Z3 T! L2 h" \( c- c
- void OLED_ShowString(u8 x,u8 y, u8 *p,u8 Char_Size);
9 J, n9 }* W A4 Q - void OLED_Set_Pos(unsigned char x, unsigned char y);
+ w3 N* L$ Q$ d. U# K - void OLED_ShowCHinese(u8 x,u8 y,u8 no);3 u: d h2 C9 ^+ O
- void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
2 i0 [% x8 n. R& z0 v- N5 T8 M - void Delay_50ms(unsigned int Del_50ms);
1 U. \% U: C- [( x1 t: | - void Delay_1ms(unsigned int Del_1ms);9 K0 n8 P4 Q9 S+ d
- void fill_picture(unsigned char fill_Data);# J) Q, O2 _3 _. P" {6 h/ L
- void Picture(void);
, h. g6 |9 a, N& H8 p - void IIC_Start(void);5 ?0 h1 e c6 E( b
- void IIC_Stop(void);0 V% ^* M9 F) z* O
- void Write_IIC_Command(unsigned char IIC_Command);
! T+ d& K, p8 l1 h1 G4 ] - void Write_IIC_Data(unsigned char IIC_Data);
: h1 c. L3 Z4 V9 u* w& n - void Write_IIC_Byte(unsigned char IIC_Byte);
. t A7 I2 d6 S; Z) j - void Display_Battery_Level(void);! @$ L( c8 q4 b
- void IIC_Wait_Ack(void);- C/ ^- R f0 r6 `( [' L: Y
- #endif
复制代码- int main(void)
% [1 H# h( ]0 W( C0 i& F - {
& ?$ G( k* W* Z - HAL_Init();' i% T( x/ M; ?6 \# u+ @! ]
# F* b" M/ b- b' i* s% {7 W- I( W- OLED_Init();
4 k4 a' m: F! {7 ]. J5 \) C; l- G+ ^- q - OLED_Clear(); 5 g7 ^* G6 I, Q0 A4 u
- SystemClock_Config();& {; I" @8 Q1 S1 B1 V
: m. t5 J5 i8 S& Z- BSP_LED_Init(LED2);; N/ o5 r2 S6 L, v, D
- EXTI15_10_IRQHandler_Config();5 V0 g: R1 [: v% c
- ' _# ~1 L0 ?, b# k* Y
- while(1) ! R6 O" }+ o/ S9 t# Q w( I6 ?/ C2 P, x
- {+ R; _+ m( ~7 b! n) j
- OLED_ShowString(0,0,(unsigned char *)"STM32",16);& }( n: d9 A6 u+ r
- OLED_ShowCHinese(45,0,2);//2 a4 ^' X3 O; v* u4 s% Y
- OLED_ShowCHinese(63,0,3);/// m+ [; u* m t
- OLED_ShowCHinese(81,0,4);//
& A# T. o2 g* i$ f - OLED_ShowCHinese(99,0,5);//7 ?) }9 q s3 n. J- I- T6 H. v
- OLED_ShowString(10,3,(unsigned char *)"stmcu.org.cn",16);
' ]' E; g* `2 |$ Q) x - OLED_ShowString(8,6,(unsigned char *)"STM32G431RBT6",16);/ U% i# A2 K3 A( B
- } $ g& _! V: P" i' K
- }* p# ^- U( _ i( `/ R" C
复制代码 编译、下载、测试,结果成功点亮OLED显示,效果如下图所示,本次分享就到这里,感谢社区平台,感谢各位网友的帮忙与支持。
: Q3 S7 I0 R g1 [& ^
1 f$ l' _: N" ?
# q' `6 z$ j3 \7 w# C4 I |