如何使用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操作

原文如下:

相关推荐
flying robot3 小时前
centos7系统配置
笔记
纳米软件5 小时前
IGBT模块测试项目集合——纳米软件
单片机·嵌入式硬件·模块测试
zhdy567896 小时前
最简单方法 设置matlab坐标轴刻度标签的字号,设置坐标轴标题和图形标题,并指定字号。画出的图片背景设置为白色,
笔记
yBmZlQzJ6 小时前
免费内网穿透-端口转发配置介绍
运维·经验分享·docker·容器·1024程序员节
崇山峻岭之间6 小时前
Matlab学习笔记02
笔记·学习·matlab
木木em哈哈6 小时前
C语言多线程
笔记
hssfscv8 小时前
Javaweb 学习笔记——html+css
前端·笔记·学习
宝宝单机sop9 小时前
军队文职资源合集
经验分享
单片机系统设计9 小时前
基于STM32的智能台灯系统/智能书桌
stm32·单片机·嵌入式硬件·毕业设计·智能家居
F133168929579 小时前
5030A 芯片 24V 转 5V 15A 大电流快充选型
网络·单片机·嵌入式硬件·物联网·汽车