STM32I2C 片上外设专门负责实现 I2C 通讯协议, 只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU 只要检测该外设的状态和访问数据寄存器,就能完成数据收发。架构图如下所示。通讯引脚:STM32 芯片有多个 I2C 外设,外设的 I2C 通讯信号引出到不同的 GPIO 引脚上,使用I2C时须配置这些指定的引脚。时钟控制逻辑:SCL 线的时钟信号,由 I2
STM32——I2C通信配置I2C的系统框架1、通讯引脚2、时钟控制逻辑3、数据控制逻辑4、整体控制逻辑通信过程写入过程读取过程I2C代码配置I2C的初始化结构体几个重要的函数 既上一篇文章对I2C的理论分析、讲解。基本原理已经大致了解了。本文就以I2Cstm32上的系统框架图的分析、讲解和对I2C的代码配置。 基于平台:STM32F407ZG 参考资料:STM32f4参考手册、STM32f
转载 2024-01-21 20:15:47
15阅读
stm32f103上解决硬件I2C总是busy的问题问题在使用stm32f103的硬件I2C的时候,读写I2C总线总是busy,即下面的代码总是无法退出: while (I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)) { ; }解决方法在将io管脚复用成I2C之前,先作为输出GPIO管脚,然后拉高,即下面代码里的i2c_pin_init,并且在每次读写的时候都调用一次i2c_pin_init,代码如下:#include "
原创 2021-05-26 21:32:46
2180阅读
00. 目录文章目录00. 目录01. I2C简介02. I2C主要特性03. I2C功能说明0器 2 (I2C_OAR2)5.5 I2C 数据寄存器 (I2C_DR)5.6 I2C 状态寄存器 1 (I2C_SR1)5.7 I2C 状态寄存器 2 (I2C_SR2)5.
原创 2022-03-16 14:17:38
1294阅读
00. 目录文章目录00. 目录01. I2C简介02. I2C主要特性03. I2C功能说明04. I2C中断05. I2C相关寄存器5.1 I2C 控制寄存器 1 (I2C_CR1)5.2 I2C 控制寄存器 2 (I2C_CR2)5.3 I2C 自有地址寄存器 1 (I2C_OAR1)5.4 I2C 自有地址寄存器 2 (I2C_OAR2)5.5 I2C 数据寄存器 (I2C_DR)5.6 I2C 状态寄存器 1 (I2C_SR1)5.7 I2C 状态寄存器 2 (I2C_SR2)5.
原创 2021-09-02 14:26:41
1510阅读
最近做一个IPC的项目,其中用了海思的一套解决方案,用Hi3518e作为主芯片,上面搭载嵌入式linux系统。由于可行性验证阶段,没有做芯片级,而是先从系统级做起,用了一块已经移植好linux系统,带有网络文件系统服务的板子,该板子是专用于rtsp视频传输的,预留的引脚是在太少,只有两个用于IRCUT的引脚,而我们不仅仅需要rtsp服务,还需要在rtsp视频流中加入九轴陀螺仪的数据一起提供给上位机
使用stm32cubemx生成硬件I2C的代码 不过自动生成的代码,调用HAL_I2C_XXX的API工作不正常,返回错误代码为I2C_BUSY 使用STM32I2C接口使用时需要注意很多细节,不过HAL库中官方已经为用户根据这些细节做了处理,可以直接使用。不过这个I2C代码并不稳定,有些板子可以用,另一些则出错.出错现象为调用HAL_I2C的API时,返回I2C_BUSY查看寄存器 BUSY位
我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。我们做两种选择:1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。2.时序由硬件自行产生,不需要人工干预;由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对EEPROM的读写吧。 我们分为几
 一、看电路图1、要得知那些信息从电路图上主要是要知道3点关键信息I2C设备挂载在I2C1、I2C2I2C3的哪一个总线上SDA、SCL接的是哪两个GPIOI2C设备地址(有的是可以选择的,比如这个EEPROM)2、挂在哪个I2C总线以及哪个GPIO从电路图上可以看出:挂载在I2C1上的SDA接的是PB7引脚SCL接的是PB6引脚这个一般硬件工程师都会在电路图上标出来吧。另外如果只标出
转载 2024-10-12 17:06:10
282阅读
目录I2C协议1. 空闲状态2. 开始信号3. 停止信号4. 应答信号ACK5. 数据的有效性6. 数据传输I2C的实现IIC_InitII2_START​IIC_Stop​IIC_Wait_Ack​IIC_AckIIC_NAck​IIC_Send_ByteIIC_Read_Byte通过I2C操作24C02初始化写一个字节​读一个字节写入读出多个地址I2C,两线式串行总线,可发送和接收数据SCL和SDA都必...
原创 2022-04-15 11:35:22
984阅读
假设硬件电路如下图EEPROM芯片的设备地址一共有 7 位,其中高 4 位固定为:1010 b,低 3 位则由 A0/A1/A2 信号线的 电平决定,图中的 R/W是读写方向位,与地址无关。按照我们此处的连接,A0/A1/A2均为0,所以EEPROM的7位设备地址是:101 0000b , 即 0x50。由于 I2C 通讯时常常是地址跟读写方向连在一起构成一个 8 位数,且当 R/W 位为 0 时
/** ****************************************************************************** * @file i2c simu.c * @brief simulation function * @CPU STM32F051 * @compiler Keil uVision V4.74
转载 2015-07-09 19:21:00
228阅读
2评论
STM32学习笔记(8)——I2C总线设备一、I2C协议简介1. 物理层2. 协议层(1)主机写数据到从机(2)主机由从机读数据(3)读和写交替进行(4)信号和时钟的配合二、STM32中的I2C总线1. I2C框图(1)通讯引脚(2)时钟控制逻辑(3)数据控制逻辑(4)整体控制逻辑2. STM32I2C通讯过程(1)主发送器通讯过程(2)主接收器通讯过程3. I2C的结构体定义和库函数 一、I
转载 10月前
1160阅读
1 I2C的总体架构框图如下:1.1 包括三大部分:I2C核心层、I2C总线驱动I2C设备驱动。(1)I2C核心层(i2c-core)提供了I2C总线驱动(适配器)和设备驱动的注册、注销方法,I2C通信方法(”algorithm”)上层的,与具体硬件无关的代码以及探测设备检测设备地址的上层代码等。(2I2C总线驱动(I2C adapter):I2C总线驱动I2C适配器的软件实现,提供I2C
转载 2023-05-26 14:02:20
147阅读
       i2c驱动在Linux通过一个周的学习后发现i2c总线的驱动框架还是和Linux整体的驱动框架是相同的,思想并不特殊比较复杂的内容如i2c核心的内容都是内核驱动框架实现完成的,今天我们暂时只分析驱动开发需要完成的部分。iic驱动驱动开发主要是完成四个部分的内容,struct i2c_adapter(适配器),struct i2c_algorit
转载 2023-11-01 13:05:34
104阅读
1. Linux 的I2C 驱动架构 Linux 中I2C 总线的驱动分为两个部分,总线驱动(BUS)和设备驱动(DEVICE)。其中总线驱动的职责,是为系统中每个I2C 总线增加相应的读写方法。但是总线驱动本身并不会进行任 何的通讯,它只是存在在那里,等待设备驱动调用其函数。 设备驱动则是与挂在I2C 总线上的具体的设备通讯的驱动。通过I2C 总线驱动提供的函数,设备驱动可以忽略不同总线控制器的
先随便写写一些思路, 以后再整理. 这段时间笔者做了一些硬件开发, 领悟了一些事情. 1 - 在常规创客的角度上, 硬件开发所需的知识面比较广, 非常广, 但不算太深. 2 - 发现硬件开发由于其特殊环境的原因, 开发难度很大, 难度绝大部分来源于很麻烦, 效率很低. 一般的开发者, 如果他们入门就直接学硬件, 他们是感觉不到这问题的.  没有对比
00. 目录文章目录00. 目录01. I2C简介02. 相关类型03. 相关函数04. 结构体封装05. 预留06. 附录07. 声明01. I2C简介I2C(内部集成电路)总线接口用作微控制器和 I2C 串行总线之间的接口。它提供多主模式功能,可以控制所有I2C总线特定的序列、协议、仲裁和时序。它支持标准和快速模式。它还与 SMBus 2.0 兼容。它可以用于多种用途,包括 CRC 生成和验证、SMBus(系统管理总线)以及 PMBus(电源管理总线)。根据器件的不同,可利用 DMA 功能来减
原创 2021-09-02 14:26:40
1112阅读
1点赞
19.1 关于I2C19.1.1 I2C 协议I²C(Inter-Integrated Circuit),常读作“IC”,它是一种多主
原创 2023-07-03 10:34:01
1100阅读
00. 目录文章目录00. 目录01. I2C简介02. 相关类型03. 相关函数04. 结构体封装05. 预留06. 附录07. 声明01. I2C简介I2C(内部集成电路)总线接口用作微控制器和 I2C 串行总线之间的接口。它提供多主模式功能,可以控制所有I2C总线特定us(电源管理总线)。根据器件的不同,可利用 DMA 功能来减
原创 2022-03-16 14:16:37
378阅读
  • 1
  • 2
  • 3
  • 4
  • 5