网上很多STM32的I2C都是基于F系列去实现的,其他的系列的芯片实现很少。
而对于STM32L151系列的I2C从机设计,用STM32CubeMX生成的简单DEMO里,就会有提供库接口实现,比如:
HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
但其实,如果是调用库接口,只能实现从机接收或者是只实现从机发送实现,调用现成接口貌似很难做到既接收有发送(至少个人没有试验出来)。
不过如果使用中断,实现起来就非常简单了。
首先使用STM32CubeMX生成一个简单的I2C demo,设置在MX_I2C1_Init接口里面设置好从机的一些基本信息(从机地址,使用几位从机地址等);
/* I2C1 init function */
void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0x90;
hi2c1.Init