【铁头山羊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代码有些许不同,此处应该修改

相关推荐
蝎蟹居2 小时前
GBT 4706.1-2024逐句解读系列(29) 第7.9~7.10条款:开关,档位应明确标识
人工智能·单片机·嵌入式硬件·物联网·安全
梁洪飞2 小时前
pmu+power控制+pmic
arm开发·嵌入式硬件·arm
nnerddboy3 小时前
嵌入式面试题:2.模电、数电
单片机·嵌入式硬件
爱吃苹果的梨叔3 小时前
NTP 网络时间服务器硬件驯服技术说明(投标技术响应说明)
linux·运维·服务器·网络·嵌入式硬件·tcp/ip
安庆平.Я3 小时前
STM32——定时器:基本定时器
stm32·单片机·嵌入式硬件
Nautiluss3 小时前
一起调试XVF3800麦克风阵列(十六)
人工智能·单片机·音频·语音识别·dsp开发·智能硬件
Hello_Embed4 小时前
串口面向对象封装实例
笔记·stm32·单片机·学习·操作系统
Zeku4 小时前
Linux驱动学习笔记:SPI OLED 驱动源码深度分析
stm32·freertos·linux驱动开发·linux应用开发
三伏5224 小时前
stm32f103系列手册IIC笔记
笔记·stm32·嵌入式硬件