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

原文如下:

相关推荐
z2014z1 小时前
系统架构设计师教程 第5章 5.4 软件测试 笔记
笔记·系统架构
快把我骂醒2 小时前
S-Procedure的基本形式及使用
笔记
LightningJie3 小时前
STM32(十五):I2C通信
stm32·单片机·嵌入式硬件
辰哥单片机设计3 小时前
4×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·计算机外设·传感器
xuhc_zd3 小时前
STM32外设-0.96寸OLED显示屏
stm32·单片机
Skywatcher__3 小时前
谷歌 Chrome 最新版升级:更强的安全检查功能守护你的上网安全
经验分享
安科瑞刘鸿鹏3 小时前
分布式光伏发电系统如何确保电能质量达到并网要求?
服务器·网络·分布式·嵌入式硬件·能源
侥幸哥f3 小时前
GD32F103单片机-EXTI外部中断
单片机·gd32·exti
HeiLongMada5 小时前
从边缘设备到云端平台,合宙DTU&RTU打造无缝物联网解决方案
嵌入式硬件·物联网·硬件工程·pcb工艺