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