PAGE1
PAGE1
STM32L4系列的I2C与SPI接口
I2C接口
I2C接口概述
I2C(Inter-IntegratedCircuit)是一种简单的双向二线制同步串行总线,用于连接低速外设和微控制器。STM32L4系列微控制器提供了多个I2C接口,支持标准模式(100kbps)、快速模式(400kbps)和快速模式Plus(1Mbps)。I2C总线包括两条线:SDA(数据线)和SCL(时钟线)。这两条线通常需要上拉电阻,以确保在总线空闲时为高电平。
I2C接口配置
1.硬件配置
在使用I2C接口之前,需要配置相应的硬件引脚。STM32L4系列微控制器的I2C引脚通常具有复用功能,需要在引脚配置中启用I2C模式。以下是一个硬件配置的例子:
//配置I2C引脚
GPIO_InitTypeDefGPIO_InitStruct={0};
//使能GPIO和I2C时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_I2C1_CLK_ENABLE();
//配置I2C1的SDA和SCL引脚
GPIO_InitStruct.Pin=GPIO_PIN_6|GPIO_PIN_7;//PB6(SDA),PB7(SCL)
GPIO_InitStruct.Mode=GPIO_MODE_AF_OD;//复用开漏模式
GPIO_InitStruct.Pull=GPIO_PULLUP;//上拉电阻
GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;//高速模式
GPIO_InitStruct.Alternate=GPIO_AF4_I2C1;//选择I2C1复用功能
HAL_GPIO_Init(GPIOB,GPIO_InitStruct);
2.软件配置
接下来,需要初始化I2C外设。以下是一个I2C初始化的代码示例:
//初始化I2C
I2C_HandleTypeDefhi2c1;
voidI2C1_Init(void){
hi2c1.Instance=I2C1;
hi2c1.Init.ClockSpeed=100000;//100kbps
hi2c1.Init.DutyCycle=I2C_DUTYCYCLE_2;//2:1的占空比
hi2c1.Init.OwnAddress1=0x00;//设备地址
hi2c1.Init.AddressingMode=I2C_ADDRESSINGMODE_7BIT;//7位地址模式
hi2c1.Init.DualAddressMode=I2C_DUALADDRESS_DISABLE;//禁用双地址模式
hi2c1.Init.OwnAddress2=0x00;//第二个设备地址
hi2c1.Init.GeneralCallMode=I2C_GENERALCALL_DISABLE;//禁用通用呼叫模式
hi2c1.Init.NoStretchMode=I2C_NOSTRETCH_DISABLE;//禁用时钟拉伸
if(HAL_I2C_Init(hi2c1)!=HAL_OK){
//初始化失败处理
Error_Handler();
}
}
I2C数据传输
1.主机模式下的数据传输
在主机模式下,STM32L4系列微控制器可以发起读写操作。以下是一个主机模式下发送数据的示例:
//发送数据
voidI2C1_Transmit(uint8_t*pData,uint16_tSize,uint16_tDeviceAddress){
if(HAL_I2C_Master_Transmit(hi2c1,DeviceAddress,pData,Size,HAL_MAX_DELAY)!=HAL_OK){
//发送失败处理
Error_Handler();
}
}
//示例:向从设备0x50发送数据
uint8_ttxData[]={0x01,0x02,0x03,0x04};
I2C1_Transmit(txData,sizeof(txData),0x50);
2.从机模式下的数据传输
在从机模式下,STM32L4系列微控制器可以响应主机的读写请求。以下是一个从机模式