STM32 IIC双机通信—— HAL库硬件IIC版

本文介绍了如何使用STM32CubeMx和HAL库配置STM32进行IIC通信,强调了主从机配置及IIC地址的重要性。通过分析HAL库IIC收发函数,解决了地址变更导致的通信问题,并提供了通信成功的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考传送门

  关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HAL库的硬件IIC要比标准库的稳定。好了,下面就从STM32CubeMx 配置开始一步步实现IIC通讯。

  STM32CubeMx的配置,这里关于新建工程的步骤我就不细说了,如果还不会操作STM32CubeMx 的可以点击查看, 这里主要对IIC的配置进行说明。

  

  了解IIC的都知道,IIC通信有主从机之分,用两片STM32进行IIC通信当然也不例外,不过使用STM32CubeMx 配置有一个好处,就是不用分别配置主从机,在STM32CubeMx 配置里面,主从机的配置是一样,唯一不同的就是IIC的地址如上图,这个地址很重要,只要配置好了,基本就成功了

  还有一个要注意的,就是IIC的SDA、SCK引脚要配置成NPP模式,不然容易出现信号线忙,检测不到从机的情况。

  

  配置配好后我们生成代码,就可以进行通信了,主从机核心代码如下:

 

  下面是主机的重要代码:

/* I2C2 init function  IIC配置*/
static void MX_I2C2_Init(void)
{

  hi2c2.Instance = I2C2;
  hi2c2.Init.Timing = 0x10805D88;
  hi2c2.Init.OwnAddress1 = 20;        //用户自己配置的地址
  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c2.Init.OwnAddress2 = 0;        
  hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值