如何使用 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)”?