如何使用HAL_I2C_Transmit



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);

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

在没有看到完整来源的情况下,您没有犯任何明显的错误。但这就是我要做的。

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了解更多信息。

相关内容

  • 没有找到相关文章

最新更新