【铁头山羊STM32】HAL库 3.I2C部分

目录

一、基础知识

I2C总线

复习开漏输出

逻辑线与

I2C总线的通信过程:

1.起始位

2.寻址

3.数据传输阶段

4.停止位

全过程总结

波特率:

二、简单数据收发实验

屏幕介绍

具体操作

编写代码

学习两个新的接口

注:如果买的江科大的套件,其屏幕跟铁头山羊的有这些不同:


一、基础知识

上一节我们知道了单片机跟外部设备(电脑)的连接和通信,一个串口可以让单片机跟一个外部设备相连,所以通过串口USART1、USART2、USART3,我们的单片机可以跟三个外部设备相连

但若要连接更多设备,就要使用总线,比如说:

I2C总线

  • I2C总线由SCL、SDA组成,
  • SCL负责传输高低变化的方波信号,每个时钟周期传输一位,所以时钟的频率越高,传输的速率越快。
  • SDA负责传输数据,高电压表示1,低电压表示0;
  • 主机和从机各有SCL、SDA引脚,两种引脚各自与I2C总线的SCL、SDA引脚相连;
  • SCL、SDA各连接一个阻值4.7k的上拉电阻;
  • 主/从机的SCL、SDA引脚都使用开漏输出。

复习开漏输出

那么为什么I2C所有的引脚都要配置开漏输出?为什么要配置两个上拉电阻呢?

这其实是为了实现逻辑线与,

SCL、SDA实现逻辑线与的原理一样,拿一条线来举例:

逻辑线与

当主机、从机均配置高阻抗时,总线由于配置了上拉电阻,所以显示高电压;

只要有一个"机"配置的低电压,那么Vdd的电流就会直接通往此"机",从而总线显示低电压。

I2C总线的通信过程:

1.起始位

主机控制SCL恒定为高电压,SDA产生下降沿

2.寻址

每个从机都有一个地址,主机通过SCL控制着节奏的频率,主机通过控制SDA电平的高低变换,产生七位的0/1数据、一位的数据传输方向,从机产生一位的应答。

3.数据传输阶段

从机应答完成后,主机继续产生相应的二进制数据,此数据即为"有效数据",若传输方向相反,则SCL仍由主机控制,SDA起始位、寻址、数据传输的数据的发送和接受方互换

4.停止位

主机在SCL高电压时,向SDA发送上升沿。

全过程总结

波特率:

波特率越大,数据传输越快,但是越不稳定,

我们用的单片机只支持前两钟模式:

通常我们只使用2:1的。


二、简单数据收发实验

屏幕介绍

具体操作

CubeMX新建项目------选型号------选调试接口------配置PC13引脚(板载LED,跟前几次操作相同)------设置I2C接口

我们的单片机有两个I2C接口I2C1和I2C2,我们任选一个,

还可以看到I2C有三种模式:

1.标准I2C接口

2.一般用不到的

直接选择第一种

此时,我们看到底下出现了各种参数:

当STM32当作主机时,设置Master Features(主机参数,更常用),

当从机时,设置Slave Features(从机参数)。

速度等级其实也就是波特率等级,决定着下面比特率参数的范围。

我们的OLED显示器支持快速模式,所以点击快速模式,

点击快速模式后,底下又出现了一个新的参数选项"占空比":

占空比只要没特殊要求一般就选择2:1

可以发现,CubeMX已经自动帮我们分配了I2C的引脚:

继续点击GPIO------I2C,

可以看到,CubeMX已经自动将GPIO模式设置成立复用输出开漏模式:

我们保持默认就好。

名字、地址、工具链选择:

编写代码

接线:

查找显示屏的地址,查阅手册可以看到:

通过屏幕底部红圈位置可以查看地址为0x78,其具体意思如下:

再阅读手册后可知,

通过I2C总线向屏幕输入如下命令就可以显示:

学习两个新的接口

打开keli可以发现CubeMX已经为I2C1生成了一个句柄:

现在使用第一个接口将命令发送出去,在最开始,我们需要生成一个数组,存放命令:

此外,我们还想将板载指示灯当作OLED屏指示灯来使用,当屏幕开启时,点亮这颗LED,

查阅手册可知,这块屏幕有一个状态字,我们便可以利用它来控制LED灯:

可通过I2C总线读一个字节将它读出来:

最终keil代码如下:

注:如果买的江科大的套件,其屏幕跟铁头山羊的有这些不同:

1.江科大套件屏幕内部自带上拉电阻,其市面上大部分带上拉电阻,所以只要直接将I2C、正负极连接到屏幕即可

2.两个屏幕地址相同,不用更改

3.最后的keil代码有些许不同,此处应该修改

相关推荐
玩转单片机与嵌入式1 小时前
不会 Python、不会深度学习,也能在STM32上跑AI模型吗?
人工智能·单片机·嵌入式硬件·嵌入式ai
jghhh013 小时前
基于STM32的桌面Mini时钟设计
stm32·单片机·嵌入式硬件
电化学仪器白超3 小时前
小乌龟Git全程图形化操作指南:嵌入式本地版本管理与Gitee私有云备份实战
git·python·单片机·嵌入式硬件·物联网·gitee·自动化
yong99905 小时前
基于STM32 Nucleo板的彩色LED照明灯设计(纯CubeMX开发)
stm32·单片机·嵌入式硬件
独小乐5 小时前
019.ADC转换和子中断|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·mcu·arm
lingzhilab5 小时前
零知派——STM32驱动INA219电流功率监测计实现高精度电源管理
stm32·单片机·嵌入式硬件
QH139292318808 小时前
KEYSIGHT N9030B PXA信号/频谱分析仪
科技·嵌入式硬件·集成测试
Shang180989357269 小时前
T31ZX 君正/INGENIC智能视频处理器T31ZX可提供软硬件资料T31Z采用先进的低功耗设计
嵌入式硬件·fpga开发·音视频·t31zx智能视频处理器
ahccqw9 小时前
CAN总线通信入门及实例代码(stm32f4系列)
stm32·单片机·嵌入式硬件
云栖梦泽10 小时前
Linux内核与驱动:13.从设备树到Platform平台总线
linux·运维·c++·嵌入式硬件