快捷搜索:  汽车  科技

stm32第一节课总结(我在高职教STM32I2C通信入门)

stm32第一节课总结(我在高职教STM32I2C通信入门)图9 开发板上SHT20和AT24C02部分原理图表1 STM32F10x的I2C引脚STM32的I2C外设可用作通信的主机及从机,支持100Kbit/s和400Kbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。它的I2C外设还支持SMBus2.0协议,SMBus协议与I2C类似,主要应用于笔记本电脑的电池管理中。图8是从STM32官方手册摘录过来I2C功能架构,这里不是要对各部分展开详细描述,只要对其有个大概印象即可。图8 STM32的I2C功能架构我们所使用的STM32F10x系列芯片有两组I2C,使用时必须了解它们配置到哪些引脚上了。当然,这样的信息肯定是能在手册里找到的,我们将其摘录在表1中。我们查看开发板SHT20温湿度传感器和AT24C02存储芯片的原理图9可知,这两个I2C模块连接的是STM32的I2C2组。

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正是如此,才有了借助头条平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思设计的教学课件分享出来,如果您正是一名单片机爱好者或是一名同行,欢迎点赞 关注,各位的支持是本人持续输出的动力,多谢多谢!#30天学会STM32##单片机#

stm32第一节课总结(我在高职教STM32I2C通信入门)(1)

I2C(Inter-Integrated Circuit,常读作“I方C”)是飞利浦公司最早于1982年开发的一种双向二线制同步串行总线,经过多年的发展和更新,现在已成为很多存储器、传感器、显示屏与处理器之间的通信方式,我们开发板上的SHT20温湿度传感器和AT24C02存储器芯片采用的都是I2C通信接口。可以说,只要某一个器件或模块采用的是I2C通信接口,那就能“以不变的I2C协议应万变的模块”,从而进行学习和开发了。

【学习目标】

  1. 透彻理解I2C的通信时序
  2. 领悟软件模拟时序的思路和方法

本章只聚焦I2C底层的逻辑和时序,暂不涉及具体器件,为了不让篇幅太长,本章打算分三个部分来讲解,本文是第二部分。

四、STM32的I2C概览

STM32的I2C外设可用作通信的主机及从机,支持100Kbit/s和400Kbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。它的I2C外设还支持SMBus2.0协议,SMBus协议与I2C类似,主要应用于笔记本电脑的电池管理中。图8是从STM32官方手册摘录过来I2C功能架构,这里不是要对各部分展开详细描述,只要对其有个大概印象即可。

stm32第一节课总结(我在高职教STM32I2C通信入门)(2)

图8 STM32的I2C功能架构

4.1 STM32的I2C引脚

我们所使用的STM32F10x系列芯片有两组I2C,使用时必须了解它们配置到哪些引脚上了。当然,这样的信息肯定是能在手册里找到的,我们将其摘录在表1中。我们查看开发板SHT20温湿度传感器和AT24C02存储芯片的原理图9可知,这两个I2C模块连接的是STM32的I2C2组。

stm32第一节课总结(我在高职教STM32I2C通信入门)(3)

表1 STM32F10x的I2C引脚

stm32第一节课总结(我在高职教STM32I2C通信入门)(4)

图9 开发板上SHT20和AT24C02部分原理图

4.2 通信协议的软件模拟与硬件实现

如果我们直接控制STM32的两个GPIO引脚,分别用作SCL及SDA,按照上述I2C信号的时序要求,直接控制引脚的输入输出,就可以实现I2C通信。同样,假如我们按照USART的要求去控制引脚,也能实现USART通信。所以只要遵守协议,就是标准的通讯,不管如何实现它,不管是ST的控制器还是其他公司的传感器或存储器,都能按通讯标准交互。由于直接控制GPIO引脚电平产生通信时序时,需要由单片机控制每个时刻的引脚状态,所以称之为“软件模拟协议”方式。

相对地,还有“硬件协议”方式,STM32的I2C片上外设专门负责实现I2C通信协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。

那究竟采用以上哪种方式呢?根据原子哥的忠告,STM32的硬件I2C比较复杂,更重要的是不稳定,故不推荐使用,所以我们这里就通过软件模拟来实现了。(PS:野火STM32开发板采用的是“硬件协议”方式,本人也尝试过,暂未出现异常情况,可能是程序处理的任务比较简单。有对比经验的朋友可以留言赐教,谢谢!)

五、编写I2C驱动文件5.1 任务描述

我们将使用“软件模拟协议”编写一套I2C驱动文件,大家可以领悟通信时序在代码层面是如何分解和体现的。理解了这里的I2C驱动文件,后面在学习SHT20传感器或AT24C02存储器编程时直接调用这里的I2C驱动函数即可。这是一个准备实验,没有具体的实验现象,保证I2C驱动文件编写无误且编译通过即可,工程文件清单如图10所示。

stm32第一节课总结(我在高职教STM32I2C通信入门)(5)

图10 I2C驱动准备工程文件清单

5.2 软件模拟I2C代码剖析

1)i2c_sim.h源码剖析

我们把I2C硬件相关的配置都以宏的形式定义在“i2c_sim.h”文件中。另外,由于使用软件模拟I2C通信时序的方式,因此需要编写的驱动函数比较多,大家从这些函数名便可知其大致功能,也可以体会到分解通信时序的理念。i2c_sim.h的源码见代码清单1。

stm32第一节课总结(我在高职教STM32I2C通信入门)(6)

代码清单1 i2c_sim.h源码

(第二部分完,i2c_sim.c的源码将在第三部分中剖析)

猜您喜欢: