基本信息
文件名称:STMicroelectronics 系列:STM32L4 系列_(25).STM32L4系列的I2C与SPI接口.docx
文件大小:28.04 KB
总页数:29 页
更新时间:2025-06-19
总字数:约1.93万字
文档摘要

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系列微控制器可以响应主机的读写请求。以下是一个从机模式