你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G030F6P6基于HAL库硬件IIC驱动1.54寸OLED屏幕

[复制链接]
STMCU小助手 发布时间:2022-11-27 22:00
STM32G030F6P6基于硬件IIC驱动1.54寸OLED屏幕. d# G. o4 b% k$ Q
1 注意事项
2 如何利用STM32G030F6P6驱动OLED显示屏
    2.1*基本配置*
    2.2 *1.54寸OLED端口含义*
    2.3 *1.54寸OLED液晶屏引脚与STM32G030F6P6引脚的硬件连接*
    2.4 *1.54寸OLED液晶屏驱动程序*
3 测试
1 f8 H% S. M3 @
  • 注意事项
    3 H2 ]  l3 ~% ?. n
    ( V4 d& |4 W  J7 H' \1 }8 x
      本文硬件使用的自制电路板,芯片是“STM32G030F6P6”以及ST-LINK v2下载工具,采用内部高速晶振。
' b" Q( Y- _6 Y! \4 c0 T! L
微信图片_20221126221431.png

9 a: d( |; {% h: X' a
    该程序使用硬件IIC,STM32G030F6P6有两路IIC通道,本系统采用的IIC1。所以只需将IIC1SCL,IIC1SDA对应的STM32G030F6P6 IIC1引脚设为iic模式即可。
   该程序在CubeMX下完成,该程序模拟IIC HAL库移植而来。
, D. W: H7 M/ d( q1 r
2 如何利用STM32驱动OLED液晶屏
2.1基本配置
     首先利用CubeMX工具进行基本配置,配置内容主要包括设置PB7、PB9分别为I2C1_SCL、I2C1_SDA;设置PB14和PB13为SWCLK调试接口;设置PA12下拉输输出模式和PA11为上拉输入模式,这个两个端口连接了一个LED,作为CPU工作指示灯。时钟采用芯片内部高速时钟,部分配置如下图所示。

! c1 D% `9 e3 u. n
微信图片_20221126221427.png

2 K2 o0 f2 R( _6 i' d7 C
        然后在cubemx中使能IIC,如下图所示。展开Connectivity,选择I2C1,将I2C由Disable改为I2C,即使能I2C。
微信图片_20221126221423.png

$ ^& r' N$ w8 G* O
2.2 1.54OLED端口含义
IIC接口的OLED引脚有四脚,如图所示分别为
5 A1 p3 }  J+ G! ]9 i
微信图片_20221126221420.png

: m2 I  y1 J* p3 P1 @
2.3 1.54OLED液晶屏引脚与STM32引脚的硬件连接
9 D4 o; ^4 i! Q
微信图片_20221126221417.png
- T: i5 r. G7 y5 k
       这里OLED的SCL接STM32的PB7,SDA接单片机的PB9,因为这两个引脚可以作为硬件IIC使用。

. u% h& d/ n6 v! o; d9 o
2.4  修改1.54寸OLED液晶屏驱动程序
      由于采用硬件IIC驱动,所以不再需要软件模拟IIC时序和读写功能代码,下面删除这些代码。
     首先修改oled.c文件。找到下图函数代码删除。

2 T9 T2 H# r: e2 i+ y, u/ h
微信图片_20221126221414.png
) X, q1 S. ?5 Y' R
微信图片_20221126221411.png

# m( e  ]  e  A8 f( q  t- h
微信图片_20221126221409.png

2 i8 ?% ~# E+ a2 \$ D
     然后在oled.c文件中,添加数据发送和命令发送函数。首先定义OLED_ADDDRESS地址为0x78,地址一般是0x78,这个可以在oled屏幕背面查看此参数。同时声明外部变量hi2c1,这个是对I2C1操作的句柄。
微信图片_20221126221406.png
, T4 X* e9 c) p2 \
最后改写OLED.C中的改写读写数据函数,如下图所示:
2 N/ I9 _6 Z. {" o' V
微信图片_20221126221403.png
0 k. W4 v+ b6 c/ r' G
8 L) j$ H3 ~0 w4 c
修改OLED屏幕刷新函数
, m3 s% p3 _2 k0 g9 A" X) u* {
1 @( g) r: W% j0 x
微信图片_20221126221358.png

( E, I4 {- Z" l! N7 A) ?: s
修改初始换函数,删除报错的代码和延时函数,修改后如下:0 M% @6 j8 b5 c. W2 ^& [7 W& y' o

- f( A6 j8 D  r" R. s
微信图片_20221126221356.png

/ Z3 Z* o; g6 |" A$ F
      接下来修改oled.h文件,这里主要是删除连接OLED的SCK和SDA的两个标准库读写操作用HAL库操作以及实训函数声明部分。修改之后的头文件为
" G6 |7 Z. ]. @1 k
% V7 l3 f; A* r* m5 L3 J
#ifndef __OLED_H
#define __OLED_H
; M" }# F6 D" ^0 p4 Y0 H* F3 |
//#include "stm32f0xx.h"
/******1.改为hal库头文件*****/
#include "stm32g0xx_hal.h"
3 i" o! j/ {. p

4 i' U2 j# p2 @& Y6 ~& n

% i9 z- M7 A4 N# X7 M4 T
#define OLED_CMD  0        //写命令
#define OLED_DATA 1        //写数据
) K  q4 ~5 f6 Q! o# R+ @) a; O) K/ }
#define uint8_t unsigned char
#define u16 unsigned int
#define u32 unsigned long
8 r7 ?$ \2 x9 N: q3 ?4 z/ e
void OLED_ClearPoint(uint8_t x,uint8_t y);
void OLED_ColorTurn(uint8_t i);
void OLED_DisplayTurn(uint8_t i);
void OLED_WR_Byte(uint8_t dat,uint8_t mode);
void OLED_DisPlay_On(void);
void OLED_DisPlay_Off(void);
void OLED_Refresh(void);
void OLED_Clear(void);
void OLED_DrawPoint(uint8_t x,uint8_t y,uint8_t t);
void OLED_DrawLine(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t mode);
void OLED_DrawCircle(uint8_t x,uint8_t y,uint8_t r);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr,uint8_t size1,uint8_t mode);
void OLED_ShowChar6x8(uint8_t x,uint8_t y,uint8_t chr,uint8_t mode);
void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t size1,uint8_t mode);
void OLED_ShowNum(uint8_t x,uint8_t y,u32 num,uint8_t len,uint8_t size1,uint8_t mode);
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t num,uint8_t size1,uint8_t mode);
void OLED_ScrollDisplay(uint8_t num,uint8_t space,uint8_t mode);
void OLED_ShowPicture(uint8_t x,uint8_t y,uint8_t sizex,uint8_t sizey,uint8_t BMP[],uint8_t mode);
void OLED_Init(void);
#endif

; f$ t6 ]8 H4 j; ?' Y
3 测试
在main.c中加入如下代码:显示内容为微信搜一搜 MCU学习笔记 欢迎关注
       OLED_Init();
        HAL_Delay(2000);
        OLED_ShowChinese(18,0,0,16,1);//微
        OLED_ShowChinese(36,0,1,16,1);//信
        OLED_ShowChinese(54,0,2,16,1);//搜
        OLED_ShowChinese(72,0,3,16,1);//一
        OLED_ShowChinese(90,0,4,16,1);//搜号
        OLED_ShowString(10,24,(unsigned char *)"MCU",16,1);
        OLED_ShowChinese(40,24,5,16,1);//信
        OLED_ShowChinese(58,24,6,16,1);//公
        OLED_ShowChinese(76,24,7,16,1);//众
        OLED_ShowChinese(94,24,8,16,1);//号
        //OLED_ShowString(20,36,(unsigned char *)"2022/05/01",16,1);
        OLED_ShowChinese(25,44,9,16,1);//欢
        OLED_ShowChinese(43,44,10,16,1);//迎
        OLED_ShowChinese(61,44,11,16,1);//关
        OLED_ShowChinese(77,44,12,16,1);//注
        OLED_Refresh();
3 v! D6 k5 D3 o5 {4 e' o% T, F/ G% [
赞 收藏 评论0 发布时间:2022-11-27 22:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版