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

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

工程介绍

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

STM32CUBEMX配置

主机采用的STM32F103C8,从机采用STM32F103VC,硬件部分需要注意使用硬件I2C时,SCL与SDA均需要上拉电阻。STM32CUBEMX配置如图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

从机配置与主机基本一致,仅I2C地址配置不同。
在这里插入图片描述

第一个问题:无法正常烧录。我采用的st-link下载器,cubemx初次生成工程后可以烧录程序,但关闭后再次打开cubemx的.ioc文件,修改配置并生成工程,st-link无法烧录,经网上查询,在工程文件>Src>stm32f1xx_hal_msp.c文件中将sw引脚取消使能了,如图所圈部分,将其注释掉即可。
在这里插入图片描述
第二个问题: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如图位置。
在这里插入图片描述
2、CR1的配置:
在这里插入图片描述根据STM32F103数据手册,从机需要将ACK、NOSTRETCH位置一。
I2C1->CR1 |= I2C_CR1_NOSTRETCH; I2C1->CR1 |= I2C_CR1_ACK;

现象

在这里插入图片描述

工程文件:

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

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103C8T6是一款32位ARM Cortex-M3内核的微控制器,而HAL库是ST公司提供的一种软件开发库,用于简化开发者在STM32系列微控制器上的软件开发过程。在这个库的基础上,我们可以使用USART通信协议进行数据传输。 在使用HAL库的USART之前,首先要在代码中包含相应的头文件,如stm32f1xx_hal.h和stm32f1xx_hal_uart.h,并初始化USART控制器和GPIO外设,配置相应的引脚。接着,我们需要定义一个UART_HandleTypeDef结构体变量,并通过HAL_UART_Init函数来初始化USART的一些配置参数,如波特率、数据位、停止位和奇偶校验等。 通过HAL_UART_Transmit函数可以发送数据,函数中传入发送数据的缓冲区指针和数据长度参数。而接收数据时,可以通过HAL_UART_Receive函数来接收数据,函数中传入接收数据的缓冲区指针和数据长度参数。 另外,为了确保数据的准确传输,我们还可以使用中断来处理数据的发送和接收。通过HAL_UART_Transmit_IT函数可以开启数据发送的中断处理,并在中断回调函数中实现数据的发送。而使用HAL_UART_Receive_IT函数则可以开启数据接收的中断处理,并在中断回调函数中实现数据的接收。 以上就是基于HAL库的USART的使用方法。使用HAL库可以省去一些繁琐的底层配置工作,提高开发效率和代码的可维护性。同时,HAL库还提供了丰富的功能函数,如自动流控制和DMA传输等,更进一步地简化了串口通信的开发流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值