描述:
I2C轮询方式从机读写数据
HAL_I2C_Slave_Transmit(*hi2c, *pData, Size, Timeout);
- *hi2c: I2C设备号指针,这里用的是I2C1: &hi2c1
- *pData: 数据指针
- Size: 数据长度
- Timeout: 超时时间
HAL_I2C_Slave_Receive(*hi2c, *pData, Size, Timeout);
- *hi2c: I2C设备号指针,这里用的是I2C1: &hi2c1
- *pData: 数据指针
- Size: 数据长度
- Timeout: 超时时间
示例:
根据使用的外设,关闭未使用外设的初始化
/* Initialize all configured peripherals */ // MX_GPIO_Init(); MX_I2C1_Init(); //初始化I2C1 // MX_USART2_UART_Init(); // MX_USB_DEVICE_Init(); // MX_ADC_Init(); // MX_TIM2_Init(); // MX_SPI1_Init(); // MX_WWDG_Init(); // MX_IWDG_Init(); // MX_RTC_Init(); // MX_USART1_UART_Init();
编辑主程序,判断是否收到数据,有则将数据存到data1中并发送data0中的数据。(以下仅作函数使用参考,由于具体设备使用需要进行初始化等配置操作,这里不详细介绍)
/* Infinite loop */ /* USER CODE BEGIN WHILE */ uint8_t data0[1] = {0x01,}; uint8_t data1[1] = {}; while (1) { if(HAL_I2C_Slave_Receive(&hi2c1, data1, 1, 100) == HAL_OK) //判断是否接收到数据 { HAL_I2C_Slave_Transmit(&hi2c1, data0, 1, 100); //发送数据data0 } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
以上示例针对eefrog的STM32F042G模块,根据STM32cubeMX综合配置基础上设计,不保证在其它模块上有同样效果。