14-HAL库之I2C通信

发布者:EternalBliss最新更新时间:2019-08-16 来源: eefocus关键字:HAL库  I2C通信  通讯设备 手机看文章 扫描二维码
随时随地手机看文章

1.I2C协议介绍


I2C是一个支持多设备的总线,可连接多个I2C通讯设备,每个总线包括一条双向串行数据线(SDA)和一条串行时钟线(SCL)。数据线用来表示数据,时钟线用来数据收发同步。通讯过程如下:


S:主机的I2C接口产生的传输开始信号,连接在I2C总线上的所有从机都会接收到。


SLAVE_ADDRESS:主机广播的从机地址信号,I2C总线上每个从机地址唯一。


R/W:读写方向,置1为读,置0为写。


A/A-:从机接收到匹配的地址后,主机或从机会返回一个应答信号或非应答信号,只有接收到应答信号主机才继续发送接收数据。写数据的时候,每次发送一个字节数据(DATA:8位)后,都要等待应答信号,重复这个过程可以发送N个数据。数据传输结束发送停止传输信号P。读数据时,主机向从机发应答信号,当主机希望停止接收数据时,发送非应答信号。

起始信号和停止信号见上图。


数据有效性见上图。


2.基于HAL库的I2C配置


步骤:时钟使能—GPIO管脚配置—I2C配置


初始化:


void MyI2C_Init(void){

__HAL_RCC_GPIOB_CLK_ENABLE();

GPIO_InitTypeDef GPIO_InitStruct;

GPIO_InitStruct.Pin = GPIO_PIN_6;

  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

  GPIO_InitStruct.Pull = GPIO_MODE_AF_OD;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;

HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

//I2C_SCL config

GPIO_InitStruct.Pin = GPIO_PIN_7;

  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

  GPIO_InitStruct.Pull = GPIO_MODE_AF_OD;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;

HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);

//I2C_SDA config

__HAL_RCC_I2C1_CLK_ENABLE();

  

  I2C_HandleTypeDef MyI2C1;

MyI2C1.Instance=I2C1;

MyI2C1.Init.Timing=0x60201E2B;//100KHz

MyI2C1.Init.OwnAddress1=0;

MyI2C1.Init.AddressingMode=I2C_ADDRESSINGMODE_7BIT;

MyI2C1.Init.DualAddressMode=I2C_DUALADDRESS_DISABLE;

MyI2C1.Init.OwnAddress2=0;

MyI2C1.Init.OwnAddress2Masks=I2C_OA2_NOMASK;

MyI2C1.Init.GeneralCallMode=I2C_GENERALCALL_DISABLE;

MyI2C1.Init.NoStretchMode=I2C_NOSTRETCH_DISABLE;

MyI2C1.Mode=HAL_I2C_MODE_MASTER;

HAL_I2C_Init(&MyI2C1);

}

输入输出函数:


阻塞模式:


HAL_I2C_Master_Transmit();   HAL_I2C_Master_Receive();  HAL_I2C_Slave_Transmit();  HAL_I2C_Slave_Receive()

HAL_I2C_Mem_Write();       HAL_I2C_Mem_Read();    HAL_I2C_IsDeviceReady()


带中断非阻塞模式:


HAL_I2C_Master_Transmit_IT();    HAL_I2C_Master_Receive_IT();  HAL_I2C_Slave_Transmit_IT()

HAL_I2C_Slave_Receive_IT();    HAL_I2C_Mem_Write_IT();       HAL_I2C_Mem_Read_IT()


DMA传输非阻塞模式:


HAL_I2C_Master_Transmit_DMA();   HAL_I2C_Master_Receive_DMA();   HAL_I2C_Slave_Transmit_DMA();    HAL_I2C_Slave_Receive_DMA();    HAL_I2C_Mem_Write_DMA();      HAL_I2C_Mem_Read_DMA()


非阻塞模式下的回调函数:


HAL_I2C_MemTxCpltCallback();   HAL_I2C_MemRxCpltCallback();    HAL_I2C_MasterTxCpltCallback()

HAL_I2C_MasterRxCpltCallback();  HAL_I2C_SlaveTxCpltCallback(); HAL_I2C_SlaveRxCpltCallback();   HAL_I2C_ErrorCallback()


这部分可以参照USART中的函数进行理解。



关键字:HAL库  I2C通信  通讯设备 引用地址:14-HAL库之I2C通信

上一篇:13-HAL库DMA系统总结
下一篇:15-HAL库之定时器学习

推荐阅读最新更新时间:2024-11-08 16:56

涉及无线通讯设备和元件!美ITC对爱立信展开337调查
美国际贸易委员会(ITC)于当地时间3月4日发布公告称,已决定对爱立信展开337调查。 据悉,1月8日,三星依据《美国1930年关税法》第337节规定,向美国际贸易委员会(ITC)提出申请,指控爱立信对美出口、在美进口或在美销售的无线通讯设备及元件侵犯其专利权,请求发起337调查,并发布普遍排除令、有限排除令和禁止令。 而就在1月4日,爱立信向ICT发起337调查申请,指控三星及美国子公司侵犯了其与无线设备技术相关的四项专利权,并把三星的部分智能手机、无线电视和其他移动设备列为侵权产品。 据了解,两家公司争议的焦点在于专利授权协议是否需要续签,三星与爱立信在2001年签署了手机和网络专利授权协议,并在2007年和2014年续签
[手机便携]
新研发智能感测装置可自动侦测通讯设备故障
  美国罗彻斯特理工学院(Rochester Institute of Technology)与厂商PPC Corp.合作开发了一款「智能连接器(Smart Connector)」感测装置,会自动侦测通讯设备是否损坏,并利用自我诊断(self-diagnostics)技术指出损坏的确实位置。   这项研究计划的领导人、电气与微电子工程教授Robert Bowman表示,蜂巢式通讯网路缆线的劣化与损坏,往往让相关单位与客户每年蒙受数百万美元的营收损失;新开发的感测装置可望能减轻部分冲击。这种感测装置可插在同轴电缆的连接组件中,用以监视RF电缆的主要故障模式。   每个传感器碟盘(sensor-disc)整合了一个独特的位置识
[安防电子]
基于LTC4310设计的绝缘双向I2C总线通信技术
LTC4310是绝缘的双向I2C 总线 通信器件,每个器件可把I2C逻辑状态编码成信号,通过绝缘层传输到另一个器件.接收器件解码,并 驱动 I2C 总线 到适当的确逻辑状态.主要用在绝缘的I2C, SMBus和PMBus 接口 ,绝缘 电源 ,以太网供电和正到负 电源 通信.本文介绍了LTC4310主要特性,典型应用以及多种应用 电路 框图. The LTC®4310 provides bidirectional I2C communications between two I2C buses whose grounds are isolated from one another. Each LTC4310 encodes I2
[模拟电子]
基于I2C串行通信的EEPROM在电视中的设计应用
1 前言 近年来,数字化电视技术迅猛发展,特别是遥控系统的面市,各厂商在电视机中加人微处理器(MCU),各种人工智能化彩电完全替代了老式电视手动(机械式)控制和记忆方式。随着电视专用MCU功能日益强大,用户使用的功能日趋丰富,所需存储的数据和刷新速度不断提高,先后涌现出各种型号和规格的存储器。目前,电视机中应用最为广泛的是E2PROM。   因为E2PROM保存着大量与电视机工作状态密切相关的数据,其可靠性就遥控电视而言至关重要,视为第二核心器件。E2PROM与第一核心器件 (MCU)保持通信,并存储电视机的工作信息。有时由于存储数据的丢失造成重大损失,甚至导致数据无法修复。因此,在电视系统中,对于系统数据和用户数据的存
[家用电子]
基于<font color='red'>I2C</font>串行<font color='red'>通信</font>的EEPROM在电视中的设计应用
STM32Hal库学习(三)CubeMx学习外部中断
外部中断主要是在CubeMx中设置好GPIO 在引脚界面配置成中断 然后configuration里对GPIO配置 对于低电平触发中断,需要把GPIO设置为上拉,然后下降沿触发,反之高电平触发,反过来 对NVIC配置 在生成的程序里 stm32f1xx_it.c里有EXTI0中断处理函数 此函数在stm32f1xx_hal_gpio.c里 中断标志位不为0,清零然后调用回调函数 __weak函数用于定义变量或者函数,常见于定义函数,在MDK ARM链接时优先链接定义为非weak的函数或变量,如果找不到则再链接weak函数 在main里自定义HAL_GPIO
[单片机]
STM32<font color='red'>Hal库</font>学习(三)CubeMx学习外部中断
I2C总线通信接口的CPLD实现
    摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。     关键词: I2C总线 CPLD VHDL I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。 目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[半导体设计/制造]
[HAL库学习之路]6.WWDG-窗口看门狗
记录自己的STM32的HAL库的学习之路,不定期更新… 一、Pinout 二、Clock Configuration 三、Configuration 配置GPIO 配置WWDG 配置NVIC 超时时间: T=4096∗Prescaler∗(T +1)/Fpclk Prescaler为WWDG的预分频系数,Fpclk为APB1时钟,T 为窗口看门狗的计数器低6位。 四、Generate Code 代码 窗口看门狗的上窗口为0x5f,在计数器为0x7f至0x5f之间喂狗程序复位,使能提前唤醒中断,计数器减至0x40会产生一个中断,在中断完成喂狗及翻转PF10。 int main(void)
[单片机]
[<font color='red'>HAL库</font>学习之路]6.WWDG-窗口看门狗
STM32基于HAL库实现微秒延时
HAL只提供了ms级的延时,但有些特殊场景,比如与通信速率较慢的设备通信时,会需要用到us级延时。STM32标准库一般是使用系统嘀嗒定时器来进行微妙级别的延时,而HAL库将SysTick定时器用做了库函数的超时定时器,使用的地方非常多,自己修改代码使用嘀嗒定时器的话就会引起错乱,所以此时就需要自己实现一个us级别延时函数。 这里介绍一种使用定时器设计us级延时函数的方法。 思路:我们将定时器设置为1MHZ的计数频率,这样定时器计一个数就是1us,我们就可以通过定时器计数值得知计时时间。 以使用TIM1为例,这里我们采用STM32F103内部8MHz晶振,故需要设置预分频系数PSC为8-1=7。同时配置PA1为GPIO输出模
[单片机]
STM32基于<font color='red'>HAL库</font>实现微秒延时
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved