如何使用 HAL_I2C_Transmit?

Posted

技术标签:

【中文标题】如何使用 HAL_I2C_Transmit?【英文标题】:How can I use HAL_I2C_Transmit? 【发布时间】:2021-08-31 23:55:57 【问题描述】:

使用I2C,通过中断方式进行通信,但是通过轮询方式进行通信时,无法进行通信。

这是为什么?

下面我写了一个简单的代码。

通信中断方法

uint8_t d8_on_tx[] = "D8_LED_ON";

 

HAL_I2C_Master_Transmit_IT(&hi2c1, (uint16_t)SLAVE_ADDRESS, (uint8_t*)d8_on_tx, D8_ON_TX_SIZE);

HAL_I2C_Slave_Receive_IT(&hi2c2, (uint8_t*)rx_data, D8_ON_TX_SIZE);

无通信的轮询方式

HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)SLAVE_ADDRESS, (uint8_t*)d8_on_tx, D8_ON_TX_SIZE, 20).;

HAL_I2C_Slave_Receive(&hi2c2, (uint8_t*)rx_data, D8_ON_TX_SIZE, 20);

我不知道为什么使用相同的变量时轮询不通信。

【问题讨论】:

【参考方案1】:

在没有查看完整源代码的情况下,您没有犯过明显的错误。但这是我会做的。

    while(HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)SLAVE_ADDRESS, 
    (uint8_t*)d8_on_tx, D8_ON_TX_SIZE, 20)!=HAL_OK)
       if (HAL_I2C_GetError(&hi2c1) != HAL_I2C_ERROR_AF)
       
           Error_Handler();

         
      

这样,您将等到传输完成,如果确认失败,您可以采取行动。

转到,C:\Users\UserName\STM32Cube\Repository\STM32Cube_FW_F4_Vxx.xx.x 在您的计算机中(显然使用您的用户名并浏览 \Projects\STM32-Discovery\Examples\I2C\I2C_TwoBoards_ComPolling\Src

并使用参考该 main.c 了解更多信息。

【讨论】:

以上是关于如何使用 HAL_I2C_Transmit?的主要内容,如果未能解决你的问题,请参考以下文章

STM32F4 作为 I2C 从设备。为啥在“HAL_I2C_Slave_Transmit_DMA”之后执行“void I2C1_ER_IRQHandler(void)”?

如何使用 STM32g4xx_HAL_Driver HAL 库通过 i2c 读取传感器数据?

STM32 HAL库 IIC 协议库函数

如何使用 PDFBox 使文本居中

如何使用 PIL 使所有白色像素透明?

如何使 ConstraintLayout 使用百分比值?