关于STM32F103的双机通信(基于HAL库)

工程介绍

本工程实现了STM32F103C8与STM32F103VC的硬件I2C通信,使用轮询的方式,未使用中断以及DMA。

STM32CUBEMX配置

主机采用的STM32F103C8,从机采用STM32F103VC,硬件部分需要注意使用硬件I2C时,SCL与SDA均需要上拉电阻。STM32CUBEMX配置如图:
关于STM32F103的双机通信(基于HAL库)
关于STM32F103的双机通信(基于HAL库)
关于STM32F103的双机通信(基于HAL库)

从机配置与主机基本一致,仅I2C地址配置不同。
关于STM32F103的双机通信(基于HAL库)

第一个问题:无法正常烧录。我采用的st-link下载器,cubemx初次生成工程后可以烧录程序,但关闭后再次打开cubemx的.ioc文件,修改配置并生成工程,st-link无法烧录,经网上查询,在工程文件>Src>stm32f1xx_hal_msp.c文件中将sw引脚取消使能了,如图所圈部分,将其注释掉即可。
关于STM32F103的双机通信(基于HAL库)
第二个问题:I2C主从机地址问题,需要注意:
1、两块STM32芯片的地址应不同。
2、Primary slave address地址指的是该芯片,但并不是该芯片的I2C地址, 而是7位地址右移一位后的值。

程序

网上关于I2C主机程序的资料已有很多,这里主要介绍一下从机部分遇到的问题。
1、CUBEMX生成的I2C初始化程序有问题!未修改时,经仿真,芯片总是检测到总线正忙。
i2c.c文件的void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)函数中,__HAL_RCC_I2C1_CLK_ENABLE();调至GPIO如图位置。
关于STM32F103的双机通信(基于HAL库)
2、CR1的配置:
关于STM32F103的双机通信(基于HAL库)根据STM32F103数据手册,从机需要将ACK、NOSTRETCH位置一。
I2C1->CR1 |= I2C_CR1_NOSTRETCH; I2C1->CR1 |= I2C_CR1_ACK;

现象

关于STM32F103的双机通信(基于HAL库)

工程文件:

链接:https://pan.baidu.com/s/1GYmV-fsyiFjkKKRNEVxqmQ
提取码:9jwq
或:https://download.csdn.net/download/sdhj21/12356682

相关文章:

  • 2022-01-17
  • 2022-01-13
  • 2021-12-03
  • 2021-07-20
  • 2021-06-29
  • 2021-11-27
  • 2022-01-31
  • 2021-05-09
猜你喜欢
  • 2021-08-21
  • 2021-06-30
  • 2021-12-31
  • 2022-12-23
  • 2021-07-19
  • 2021-05-28
  • 2022-12-23
相关资源
相似解决方案