当前位置: 首页 > news >正文

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

原文如下:

               


http://www.mrgr.cn/news/32822.html

相关文章:

  • http自动发送请求工具(自动化测试http请求)
  • linux startup.sh shutdown.sh (kkFileView)
  • 从零到一:利用 AI 开发 iOS App 《震感》的编程之旅
  • Photoshop(PS)——人像磨皮
  • pgSQL-timescaledb复制表出现的问题
  • java项目-jenkins任务的创建和执行
  • Clip studio paint百度云下载:附安装包+教程
  • 最好的教育是言传身教,爸爸的一句话改变孩子的一生
  • 简单多状态dp第一弹 leetcode -面试题17.16.按摩师 -213.打家劫舍II
  • C++——初步认识C++和namespace的用法
  • 文本预处理_by《李沐:动手学深度学习v2》pytorch版
  • 技术周总结 09.16~09.22 周日
  • linux 基础(一)mkdir、ls、vi、ifconfig
  • OpenGL编程思想第九版环境搭建(Glfw+gl3w)-静态库方式
  • frp内网穿透部署
  • 网易雷火xx
  • Ubuntu实现SSH免密登录教程
  • 输电线路绝缘子红外检测数据集
  • 基于协同过滤推荐算法的食品推荐系统
  • 【艾思科蓝】Spring全家桶使用深度教程:从入门到精通
  • Linux 文件 IO 管理(第二讲)(重定向和缓冲区)
  • Innodb内存结构
  • mysql性能优化- 数据库配置优化
  • 【C++】模拟实现list
  • MySQL 中如何处理大型事务
  • 超实用线程调度方法!