本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发
向上代码兼容GD32F450ZGT6中使用
后续项目主要在下面该专栏中发布:
https://blog.youkuaiyun.com/qq_62316532/category_12608431.html?spm=1001.2014.3001.5482
感兴趣的点个关注收藏一下吧!
电机驱动开发可以跳转:
GD32F103RCT6/GD32F303RCT6-实战项目-无刷电机驱动(1)_gd32f103rct6例程-优快云博客
BMS电源系统开发可以跳转:
暂未放链接
DCDC-双向BUCK-BOOST实战链接:
向上代码兼容GD32F303RCT6中使用
本项目配套开发板:
基于GD32F103RCT6国产GD32平台,以下教程编写基于该开发板
图片:
原理图以及例程请联系客服获取!
注意:
本教程致力于解决所有在调试中出现的所有问题,如有未包含在的问题,请联系QQ:2049363803,有奖更新文档!
目录
内部集成电路总线接口(I2C)
I2C (内部集成电路总线)模块提供了符合工业标准的两线串行制接口,可用于 MCU 和外部 I2C
设备的通讯。I2C 总线使用两条串行线:串行数据线 SDA 和串行时钟线 SCL。
I2C 接口模块实现了 I2C 协议的标速模式和快速模式,具备 CRC 计算和校验功能、支持
SMBus(系统管理总线)和 PMBus (电源管理总线),此外还支持多主机 I2C 总线架构。I2C 接口
模块也支持 DMA 模式,可有效减轻 CPU 的负担。
OLED介绍
- 有机发光二极管(OLED)技术:OLED显示屏采用有机发光二极管作为发光单元,这些有机材料可在电流刺激下发出光。相比液晶显示屏,OLED不需要背光源,因此可以实现更薄、更轻、更节能的设计。
- 自发光原理:OLED显示屏具有自发光特性,每个像素点都可以独立发光,实现真正的黑色和高对比度的显示效果。此特性使OLED显示屏在显示深色和对比明显的图像时表现出色彩更加生动、细节更为清晰的特点。
- 驱动方式:OLED显示屏可以采用不同的驱动方式,包括被动矩阵(Passive Matrix)和主动矩阵(Active Matrix)两种。主动矩阵驱动方式通常采用TFT(薄膜晶体管)技术,可以实现对每个像素点的精细控制,有利于提高显示质量和响应速度。
- 灵活性:相比传统显示技术,OLED显示屏具有更高的灵活性和可塑性,可以制作成弯曲的、卷曲的或透明的显示屏,适用于更多的创新设计和应用场景。
OLED显示屏是一种采用有机发光二极管作为发光单元的显示技术,具有自发光、低功耗、高对比度和快速响应等优点。 根据接线方式的不同,OLED显示屏可以分为四针和七针两种。
一、四针OLED显示屏
1. 接线方式:四针OLED显示屏通常由VCC、GND、SDA和SCL四个引脚组成,其中VCC和GND用于供电,SDA和SCL用于数据传输。
2. 特点:四针OLED显示屏通常采用I2C通信协议,具有简单的接线方式和易于控制的特点。
3. 优势:I2C通信协议不需要额外的引脚来传输数据,能够降低设备的成本和复杂度。
4. 应用领域:四针OLED显示屏适用于小型电子设备中,如智能手表、手持设备等。
二、七针OLED显示屏
1. 接线方式:七针OLED显示屏通常由VCC、GND、SCK、SDA、RES、DC和CS七个引脚组成,其中SCK和SDA用于数据传输,RES用于复位,DC用于数据/命令选择,CS用于片选。
2. 特点:七针OLED显示屏通常采用SPI通信协议,具有高速传输和更丰富的功能选择。
3. 优势:SPI通信协议能够实现高速数据传输,适合在需要快速响应的设备中使用。
4. 应用领域:七针OLED显示屏适用于大型电子设备中,如工业控制、汽车显示屏等。
根据不同的接线方式,四针和七针OLED显示屏在应用场景和特点上有所区别,用户可以根据具体需求选择合适的显示屏类型以实现更好的显示效果和控制体验。
本小结涉及到的IIC函数
函数 | 作用 |
IIC_Init(); | 初始化IIC的IO口 |
IIC_Start(); | 发送IIC开始信号 |
IIC_Stop(); | 发送IIC停止信号 |
IIC_Ack(); | IIC发送ACK信号 |
IIC_NAck(); | IIC不发送ACK信号 |
IIC_Wait_Ack(); | IIC等待ACK信号 |
IIC_Send_Byte(); | IIC发送一个字节 |
IIC_Read_Byte(); | IIC读取一个字节 |
本小结涉及到的OLED函数
函数 | 作用 |
OLED_Init(); | OLED初始化函数 |
OLED_Clear(); | OELD清屏 |
OLED_DrawPoint(); | OLED画点函数 |
OLED_Fill(); | OLED填充函数 |
OLED_ShowChar(); | 显示一个字符 |
OLED_ShowNum(); | 显示特定位数整数 |
OLED_ShowString(); | 显示字符串 |
主要特征
- 并行总线至 I2C 总线协议的转换及接口;
- 同一接口既可实现主机功能又可实现从机功能;
- 主从机之间的双向数据传输;
- 支持 7 位和 10 位的地址模式和广播寻址;
- 支持 I2C 多主机模式;
- 支持标速(最高 100 kHz)和快速(最高 400 kHz);
- 从机模式下可配置的 SCL 主动拉低;
- 支持 DMA 模式;
- 兼容 SMBus 2.0 和 PMBus;
- 两个中断:字节成功发送中断和错误事件中断;
- 可选择的 PEC (报文错误校验)生成和校验;
内部结构图
手册P434页
发送器
发送数据到总线的设备
接收器
从总线接收数据的设备
主机
初始化数据传输,产生时钟信号和结束数据传输的设备
从机
由主机寻址的设备
多主
多个主机可以尝试在不破坏信息的前提下同时控制总线
同步
同步两个或更多设备之间的时钟信号的过程
仲裁
如果超过一个主机同时试图控制总线,只有一个主机被允许,且获胜主机的信息不被破坏,保证上述的过程叫仲裁
SDA 线和 SCL 线
I2C 模块有两条接口线:串行数据 SDA 线和串行时钟 SCL 线。连接到总线上的设备通过这两
根线互相传递信息。
SDA 和 SCL 都是双向线,通过一个电流源或者上拉电阻接到电源正极。当总线空闲时,两条
线都是高电平。连接到总线的设备输出极必须带开漏或者开集,以提供线与功能。I2C 总线上
的数据在标准模式下可以达到 100 kbit/s,在快速模式下可以达到 400 kbit/s,。由于 I2C 总线
上可能会连接不同工艺的设备(CMOS,NMOS,双极性器件),逻辑‘0’和逻辑‘1’的电平并不是
固定的,取决于 VDD 的实际电平。
手册P434页
开始与停止信号
所有的数据传输起始于一个 START 结束于一个 STOP(参见图 17-3. 开始和停止信号)。
START信号定义为,在 SCL 为高时,SDA 线上出现一个从高到低的电平转换。
STOP 信号定义为,在 SCL 为高时,SDA 线上出现一个从低到高的电平转换。
I2C 通讯流程
每个I2C设备(不管是微控制器,LCD驱动,存储器或者键盘接口)都通过唯一的地址进行识别,根据设备功能,其既可以是发送器也可作为接收器。
I2C从机检测到I2C总线上的START信号之后,就开始从总线上接收地址,之后会把从总线接收到的地址和自身的地址(通过软件编程)进行比较,当两个地址相同时,I2C从机将发送一个
确认应答(ACK),并响应总线的后续命令:发送或接收所需数据。此外,如果软件开启了广播
呼叫,则I2C从机始终对一个广播地址(0x00)发送确认应答。I2C模块始终支持7位和10位的
地址。
I2C主机负责产生START信号和STOP信号来开始和结束一次传输,并且负责产生SCL时钟。
本小结我们以软件IIC驱动OLED为主,因此我们在硬件IIC上不做过多介绍;基于上述知识,我们开始去编写IIC通讯协议!
首先我们需要对使用到的模拟IIC时钟线SCL以及SDA进行初始化配置
其次开始编写软件延时函数,这里我们直接调用前面一节的系统滴答定时器的延时函数
那么接下来让我们开始编写IIC的起始信号
然后是停止信号
接下来在有了起始信号和停止信号后,该考虑应答信号了,应答信号是IIC通讯必不可少的一部分,是IIC的心脏
接下来,在有了IIC通讯时序的基础上,我们开始编写发送数据以及读取的函数
那么到此我们IIC的时序函数就已经全部写好了,这里出现的
IIC_SCL(x)
IIC_SDA(x)
我们在oled.h文件中有定义
作用是操作GPIO
接下来让我们去编写IIC的操作函数
我们所要用到的函数可以参考中景园0.96OLED的STM32代码例程里面的函数
然后在主函数中进行调用
实验完成结果
群号:621154399
有问题欢迎大家加入我们一起交流,这个群是开源性技术交流群。