STM32的 I2C 片上外设专门负责实现 I2C 通讯协议, 只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU 只要检测该外设的状态和访问数据寄存器,就能完成数据收发。架构图如下所示。通讯引脚:STM32 芯片有多个 I2C 外设,外设的 I2C 通讯信号引出到不同的 GPIO 引脚上,使用I2C时须配置这些指定的引脚。时钟控制逻辑:SCL 线的时钟信号,由 I2
转载
2023-07-18 17:48:48
364阅读
最近做一个IPC的项目,其中用了海思的一套解决方案,用Hi3518e作为主芯片,上面搭载嵌入式linux系统。由于可行性验证阶段,没有做芯片级,而是先从系统级做起,用了一块已经移植好linux系统,带有网络文件系统服务的板子,该板子是专用于rtsp视频传输的,预留的引脚是在太少,只有两个用于IRCUT的引脚,而我们不仅仅需要rtsp服务,还需要在rtsp视频流中加入九轴陀螺仪的数据一起提供给上位机
转载
2024-07-22 16:27:44
92阅读
I2C简介I2C总线是一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。在一个i2c通讯总线中,可连接多个i2c通讯设备(分为主机和从机)。主机有权发起和结束一次通信,从机只能被动呼叫。当总线上有多个主机同时启动总线时,i2c也具备冲突检测和仲裁的功能来防止错误产生。每个连接到i2c总线
转载
2024-08-04 13:54:13
1982阅读
点赞
使用stm32cubemx生成硬件I2C的代码
不过自动生成的代码,调用HAL_I2C_XXX的API工作不正常,返回错误代码为I2C_BUSY
使用STM32的I2C接口使用时需要注意很多细节,不过HAL库中官方已经为用户根据这些细节做了处理,可以直接使用。不过这个I2C代码并不稳定,有些板子可以用,另一些则出错.出错现象为调用HAL_I2C的API时,返回I2C_BUSY查看寄存器 BUSY位
转载
2024-03-21 22:11:17
767阅读
STM32——I2C通信配置I2C的系统框架1、通讯引脚2、时钟控制逻辑3、数据控制逻辑4、整体控制逻辑通信过程写入过程读取过程I2C代码配置I2C的初始化结构体几个重要的函数 既上一篇文章对I2C的理论分析、讲解。基本原理已经大致了解了。本文就以I2C在stm32上的系统框架图的分析、讲解和对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阅读
#include "stm32f10x.h" #include "Includes.h" #include "Constants.h" #include "Functions.h" #include "Globals.h" #define IIC_SCL_OUT GPIOB->CRL |= 0x03000000 #define IIC_SDA_IN &n
原创
2011-01-02 10:28:00
645阅读
/** ****************************************************************************** * @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. STM32的I2C通讯过程(1)主发送器通讯过程(2)主接收器通讯过程3. I2C的结构体定义和库函数 一、I
我们了解了I2C的操作流程,这一篇,我们就使用I2C,来对EEPROM进行操作吧。我们做两种选择:1.时序由IO口模拟高低电平,需要了解协议并按照协议操作相应的IO口。2.时序由硬件自行产生,不需要人工干预;由硬件产生的I2C时序,我们借助Stm32Cube配置实现便可,我们这一篇,抛开Stm32Cube,手撕代码,根据I2C的时序,一步步地实现I2C对EEPROM的读写吧。 我们分为几
首先是配置I2C的GPIO,然后配置I2C参数。就是常规配置,按流程来写不会错。/**
* @brief EEPROM IIC 配置
*/
void I2C_EE_config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
I2C_InitTypeDef I2C_InitStruct;
// 开启I2C GPIO时钟
EPROM_I2C_GP
目录1、IIC定义2、IIC协议规范2.1 SDA和SCL信号2.2 数据有效性2.3 开始和结束信号2.4 字节格式2.5 从机地址和读写位3、计算IIC的频率4、PCF85364.1 Acknowledge4.2 Addressing4.3 读写时序1、IIC定义IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司(后被NXP收购)在八十
调用格式: I2C_EE_Init(); I2C_EE_BufferRead((u8 *)&ee_buf,0,16); I2C_EE_BufferWrite((u8 *)&ee_buf,0,16); /******************** (C) COPYRIGHT 2008 STMicroelectronics *******
原创
2011-01-02 10:18:00
1198阅读
STM32——I2C宗旨:技术的学习是有限的,分享的精神是无限的。一、I2C协议 I 2 C (Inter-Integrated Circuit)协议是由 Philips 公司开发的,由于它具备引脚少、硬件实现简单、可扩展性强、不需要如 USART、CAN 的外部收发设备等特点,现在被广泛地使用在系统内多个集成电路(IC)间的通信。1、物理层(
5.3 配置工程文件默认情况下会进入“LEDTest_Project.ioc”界面,也可以通过双击工程目录的“LEDTest_Project.ioc”进入。点击“Project Manager->Code Generator”,将“Generated files”第1和第2选项勾选,其余默认。5.4 配置芯片时钟 5.4.1 配置外部时钟引脚 点击“Pinout & Configur
一、看电路图1、要得知那些信息从电路图上主要是要知道3点关键信息I2C设备挂载在I2C1、I2C2、I2C3的哪一个总线上SDA、SCL接的是哪两个GPIOI2C设备地址(有的是可以选择的,比如这个EEPROM)2、挂在哪个I2C总线以及哪个GPIO从电路图上可以看出:挂载在I2C1上的SDA接的是PB7引脚SCL接的是PB6引脚这个一般硬件工程师都会在电路图上标出来吧。另外如果只标出
转载
2024-10-12 17:06:10
282阅读
STM32学习笔记(白话文理解版)—I2C通信接口 这里写目录标题STM32学习笔记(白话文理解版)—I2C通信接口一、I2C总线介绍二、I2C应用三、软件I2C和硬件I2C 一、I2C总线介绍IC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收
先随便写写一些思路, 以后再整理. 这段时间笔者做了一些硬件开发, 领悟了一些事情. 1 - 在常规创客的角度上, 硬件开发所需的知识面比较广, 非常广, 但不算太深. 2 - 发现硬件开发由于其特殊环境的原因, 开发难度很大, 难度绝大部分来源于很麻烦, 效率很低. 一般的开发者, 如果他们入门就直接学硬件, 他们是感觉不到这问题的. 没有对比