0%

HAL库 - I2C

向从机写数据

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数hi2c:写i2c的句柄指针,例如&hi2c1
参数DevAddress:从机地址
参数pData:要发送的数据的地址
参数Size:发送数据的量,单位字节
参数Timeout:超时时间,单位ms。永久等待写HAL_MAX_DELAY
返回值HAL_StatusTypeDef:HAL_OK - 成功、HAL_ERROR - 发送出错、HAL_BUSY - i2c接口忙、HAL_TIMEOUT - 发送超时

从从机读数据

HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
参数hi2c:写i2c的句柄指针,例如&hi2c1
参数DevAddress:从机地址
参数pData:保存接收数据的地址
参数Size:接收数据的量,单位字节
参数Timeout:超时时间,单位ms。永久等待写HAL_MAX_DELAY
返回值HAL_StatusTypeDef:HAL_OK - 成功、HAL_ERROR - 接收出错、HAL_BUSY - i2c接口忙、HAL_TIMEOUT - 接收超时

示例:点亮显示屏和灯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 /* USER CODE BEGIN 2 */
uint8_t commands[] = {0x00, 0x8d, 0x14, 0xaf, 0xa5};//点亮屏幕的指令
HAL_I2C_Master_Transmit(&hi2c1, 0x78, commands, sizeof(commands) / sizeof(commands[0]), HAL_MAX_DELAY);//发送数据

uint8_t dataRcvd;
HAL_I2C_Master_Receive(&hi2c1, 0x78, &dataRcvd, 1, HAL_MAX_DELAY);//接收数据

if((dataRcvd & (0x01 << 6)) == 0)//如果屏幕被点亮,点亮灯;屏幕没有点亮,熄灭灯
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,GPIO_PIN_RESET);
}
else
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,GPIO_PIN_SET);
}