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

原文如下:

相关推荐
Chase_______1 小时前
JavaSE超详细笔记-网络编程篇-基于黑马
java·笔记
z2014z2 小时前
第1章 C# 和 .NET 框架 笔记
笔记·c#·.net
易境通代购商城系统、集运SAAS系统2 小时前
细节致胜:如何重塑反向海淘用户体验
经验分享
LuLaLuLaLeLLLLLL2 小时前
MySQL 调优笔记
笔记·mysql·adb
被一米六支配的恐惧3 小时前
使用argocd部署nginx
笔记
桂?3 小时前
在 CentOS中安装Docker并安装青龙脚本——笔记
笔记·docker·centos
小智学长 | 嵌入式3 小时前
Arduino入门教程:4-1、代码基础-进阶
嵌入式硬件·物联网·arduino
mitt_3 小时前
《开窍》读书笔记8
笔记
国科安芯4 小时前
【AS32系列MCU调试教程】调试工具:Eclipse调试工具栏与窗口的深入分析
单片机·嵌入式硬件·eclipse
nuannuan2311a4 小时前
9N65-ASEMI照明系统应用专用9N65
单片机·嵌入式硬件