【STM32 CubeMX】I2C中断方式与DMA方式

这篇具有很好参考价值的文章主要介绍了【STM32 CubeMX】I2C中断方式与DMA方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。


一、I2C中断方式

1.1 CubeMX配置I2C中断

找到连接,I2C,然后点击NVIC设置,使能中断(框框里面的要打勾):
【STM32 CubeMX】I2C中断方式与DMA方式,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,c,c++,51单片机,mcu
设置完后,生成代码即可

1.2 I2C中断函数使用

Master模式

我们可以使用下面的函数进行Master模式的中断读写:

HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size);

参数说明:
I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
返回值 HAL_OK:成功
HAL_BUSY:总线忙

这些IT后缀的函数,他只是使能中断,发出Start信号,他会立刻返回
当我们的回调函数调用,代码他传输完成了

回调函数:
如果传输完成或出错,如下回调函数会被调用:

/* 主设备发送完成回调函数 */
void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 主设备接收完成回调函数 */
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 出错回调函数 */
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)

Mem模式

可以使用下面的函数进行Mem模式中断的发送:

HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t 
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);

如果传输完成或出错,如下回调函数会被调用:

/* MEM模式发送完成回调函数 */
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
/* MEM模式接收完成回调函数 */
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
/* 出错回调函数 */
void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c)

1.3 DMA方式发送和接收

CubeMX配置IIC DMA方式

我们打开I2C设置界面,点击DMA设置,添加DMA通道I2C_TX,I2C_RX
【STM32 CubeMX】I2C中断方式与DMA方式,从0带你学会如何像人类一样写STM32程序,stm32,嵌入式硬件,单片机,c,c++,51单片机,mcu

Master模式

使用 DMA 方式写 I2C 设备、读 I2C 设备函数原型如下:

HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size);

DMA的中断回调和普通的Master回调函数是一致的。

Mem模式

使用 DMA Mem 方式写 I2C 设备、读 I2C 设备函数原型如下

HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);

DMA的中断回调和普通的Mem回调函数是一致的。


总结

在STM32 CubeMX环境中,可以选择中断方式或DMA方式来实现I2C通信,每种方式都有其特点和适用场景。中断方式适用于对实时性要求较高、数据量较小的情况,而DMA方式则适用于大数据量传输和减轻CPU负担的场景。通过STM32 CubeMX提供的图形化配置工具,开发者可以根据具体需求选择合适的通信方式,并进行相应的配置,从而更加高效地实现I2C通信功能。文章来源地址https://www.toymoban.com/news/detail-830929.html

到了这里,关于【STM32 CubeMX】I2C中断方式与DMA方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32CubeMX+HAL库】I2C详解+读写EEPROM

    在之前的标准库中,STM32的硬件IIC非常复杂,更重要的是它并不稳定,所以都不推荐使用。但是在我们的HAL库中,对硬件IIC做了全新的优化,使得之前软件IIC几百行代码,在HAL库中,只需要寥寥几行就可以完成 那么这篇文章将带你去感受下它的优异之处。 通过本篇博客您将

    2024年02月03日
    浏览(23)
  • STM32配合cubeMX硬件I2C驱动0.96寸OLED

    目录 一、简单介绍 1.1   OLED 1.2   I2C协议 二、实战 2.1 工程配置 2.2 测试工程 2.3 波形分析 三、驱动OLED 3.1 初始化代码 3.2 清屏函数 3.3 设置坐标函数 3.4 显示字符函数 3.5 显示字符串函数 3.6 显示图片函数 附录 驱动代码文件 oled.c oled.h f6x8.h 有机发光二极管 (英语:Organic

    2024年02月08日
    浏览(18)
  • HAL STM32 HW I2C DMA + SSD1306/SH1106驱动示例

    📍硬件I2C DMA驱动参考: https://blog.csdn.net/weixin_45065888/article/details/118225993 🔖本工程基于 STM32F103VCT6 ,驱动程序独立,可以移植到任意STM32型号上使用。 📑字体大小说明 🌿该驱动程序ASCII字符集类型大小包含:6X8、8X16,12X6 三种。其中6X8和8X16共用一个API函数调用,形参不同

    2024年02月22日
    浏览(21)
  • 第五章 stm32 cubemx 软件I2C实验以及EEPROM的使用理论及实验过程

    本章将讲解stm32通讯协议中的IIC协议,利用cubeMX完成软件和硬件IIC的实现,并结合实验数据,给人更为深刻的体验。 我们结合IIC的具体协议和逻辑分析仪得到的具体实验数据理解IIC协议。 I2C通讯协议是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要

    2024年01月21日
    浏览(24)
  • 【STM32】入门(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是与“软件控制方式”相对。I2C软件控制,就是写程序直接操作两个GPIO引脚,分别作为时钟线SCL和数据线SDA,按照I2C协议的时序要求,操作GPIO输入、输出、高电平、低电平。 听着就很复杂,好在STM32中有I2C的硬件实现,即通过简单的操作寄存器

    2023年04月08日
    浏览(19)
  • DMA技术在STM32中优化UART、SPI和I2C通信性能的研究与实现

    DMA(Direct Memory Access,直接存储器访问)技术可以在STM32微控制器上优化UART、SPI和I2C等通信性能。 DMA可以实现数据的高速传输,减轻CPU的负担,提高系统性能。在本篇文章中,我将探讨DMA技术在STM32中优化这些通信协议的研究和实现。 一、DMA工作原理 DMA可以实现外设与存储器

    2024年01月20日
    浏览(18)
  • HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

    📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据,通过STM32CubeMX工具配置工程,读取角度数据,只需要调用一个函数,即可完成数据的读取。了解函数的用法以及从设备地址命令,上手十分快速和简单。 📌AS5600资料: https://p

    2024年04月26日
    浏览(27)
  • 4针0.96寸OLED的HAL库代码(硬件I2C/全代码/stm32f1/CubeMX配置/包含有正负浮点数/100%一次点亮)

    一、HC-SR04超声波模块的使用 二、4针OLED的HAL库代码介绍及使用(本篇) 三、7针OLED的HAL库代码介绍及使用 四、编码电机以及双电机驱动 更多有意思的文章点击“我的主页” --------😐 更多有意思的视频 ----- B站 @想要亿只独角兽 --------😐 之前在做一些小项目时用到了OLED,到

    2024年02月10日
    浏览(14)
  • STM32 I2C

    目录 I2C通信  软件I2C读写MPU6050 I2C通信外设 硬件I2C读写MPU6050 I2C通信 R/W:0写1读 十轴:3轴加速度,3轴角速度,3轴磁场强度和一个气压强度  软件I2C读写MPU6050 MyI2C.c MPU6050.c MPU6050_Reg.h(寄存器) main.c I2C通信外设 GPIO口需要配置为复用开漏输出模式。复用:就是GPIO的状态是交由

    2024年02月19日
    浏览(18)
  • STM32---I2C

    目录                                       一.I2C协议 1.什么是I2C协议?  2.物理层特性                                     二.协议层 1.I2C读写过程 2.I2C外设 3.I2C外设通讯过程              三.I2C库函数                       四.EEPROM 写操作: 读操作:      

    2024年02月16日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包