如何使用IIC外设(硬件IIC)

本文重点叙述如何使用芯片自带的 IIC 外设,即硬件 IIC,实现 IIC 通信。文章《IIC通信基础_cpu的iic通信-CSDN博客中,叙述了软件 IIC 通信和硬件 IIC 通信的区别, 并且重点叙述了 IIC 的通信协议。在使用软件进行 IIC 通信时,需要用程序代码控制IO口按照通信协议的要求做出动作,程序代码是比较繁琐的;在使用芯片自带的 IIC 外设,即硬件 IIC 进行通信时,我们可以直接调用并配置相关的库函数来操作 IIC 的外设,而不必关注具体通信协议,因为 IIC 外设的工作方式就是基于通信协议的,所以我们只需要让他工作起来就可以。

下文就是用户手册中的 IIC 外设的使用方法(以STM32F407为例),

1、声明I2C_HandleTypeDef句柄结构体;

2、通过调用HAL_I2C_MspInit()函数,初始化I2C底层资源,包括下述几个方面,

a、使能I2C接口时钟;

b、I2C引脚配置,包括:

------使能I2C的IO引脚时钟;

------配置I2C引脚的复用功能为开漏模式;

c、NVIC 配置,如果需要使用中断程序,包括:

------配置I2C中断优先级;

------使能NVIC I2C IRQ 通道;

d、DMA配置,如果需要使用DMA程序,包括:

------声明 DMA_HandleTypeDef 句柄结构体,为了发送或接受数据流;

------使能DMA接口时钟使用;

------配置DMA句柄参数;

------配置DMA的Tx或Rx的数据流;

------将初始化的DMA句柄与hi2c DMA Tx或Rx句柄关联;

------配置优先级并使能在DMA的Tx或Rx数据流上的传输完整中断;

3、配置通信速率、占空比、寻址方式、自己地址1、双寻址模式、自己地址2、常规呼叫和非拉伸模式在hi2c Init 结构中;

4、初始化I2C寄存器通过调用HAL_I2C_Init(),也配置底层硬件(GPIO、时钟、NVIC等)通过调用HAL_I2C_MspInit(&hi2c);

5、为了检查是否目标设备准备好通信,使用函数HAL_I2C_IsDeviceReady();

6、对于I2C IO和IO MEM操作,在这个驱动里可以利用三种操作模式:

轮询模式IO操作

轮询模式IO MEM 操作

中断模式IO操作

中断模式IO MEM操作

DMA模式IO操作

DMA模式IO MEM操作

原文如下:

相关推荐
红花与香菇2____1 小时前
【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
笔记·嵌入式硬件·学习·pcb设计·cadence·pcb工艺
Jerry.yl2 小时前
关于 BK3633 上电时受串口 UART2 影响而无法启动的问题说明
嵌入式硬件·物联网·bk3633
苏慕TRYACE3 小时前
RT-Thread+STM32L475VET6实现红外遥控实验
stm32·单片机·嵌入式硬件·rt-thread
郭顺发_4 小时前
NPM环境搭建指南
经验分享
拥有一颗学徒的心4 小时前
鸿蒙第三方库MMKV源码学习笔记
笔记·学习·性能优化·harmonyos
车端域控测试工程师4 小时前
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑰】
经验分享·学习·汽车·测试用例·capl
车端域控测试工程师4 小时前
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑪】
经验分享·学习·汽车·测试用例·capl
小幽余生不加糖5 小时前
deepseek帮我设计物理量采集单片机口保护电路方案
单片机·嵌入式硬件
Ronin-Lotus6 小时前
蓝桥杯篇---IAP15F2K61S2串口
单片机·嵌入式硬件·职场和发展·蓝桥杯·c·iap15f2k61s2
xiaohai@Linux6 小时前
ESP32 在IDF_V5.3.1版本下实现AP无线热点模式!(带WIFI事件处理)
c语言·嵌入式硬件·tcp/ip·wifi·esp32