铁头山羊stm32代码I2c
时间: 2025-05-07 22:13:13 浏览: 40
### STM32 I2C代码实现
以下是基于铁头山羊开发板的STM32 I2C通信代码示例。该代码实现了基本的I2C主机模式操作,包括初始化、数据发送和接收功能。
#### 初始化函数
初始化I2C外设的相关配置参数,设置时钟频率以及上升沿时间等[^1]。
```c
void I2C_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
I2C_HandleTypeDef hi2c;
__HAL_RCC_GPIOB_CLK_ENABLE(); // 启用GPIOB时钟
__HAL_RCC_I2C1_CLK_ENABLE(); // 启用I2C1时钟
/** 配置SCL和SDA引脚 */
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7; // PB6(SCL), PB7(SDA)
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/** 配置I2C外设 */
hi2c.Instance = I2C1;
hi2c.Init.ClockSpeed = 100000; // 设置标准模式下的速度为100kHz
hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c.Init.OwnAddress1 = 0x00; // 不使用设备地址
hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c);
}
```
#### 数据传输函数
通过I2C接口向从设备写入数据并读取响应数据。
```c
uint8_t I2C_WriteRead(uint8_t slave_addr, uint8_t reg_addr, uint8_t *tx_data, uint8_t tx_len, uint8_t *rx_data, uint8_t rx_len) {
HAL_StatusTypeDef status;
/* 发送寄存器地址到从设备 */
status = HAL_I2C_Mem_Write(&hi2c, (slave_addr << 1), reg_addr, I2C_MEMADD_SIZE_8BIT, tx_data, tx_len, 100);
if (status != HAL_OK) return 1;
/* 从指定寄存器读取数据 */
status = HAL_I2C_Mem_Read(&hi2c, (slave_addr << 1), reg_addr, I2C_MEMADD_SIZE_8BIT, rx_data, rx_len, 100);
if (status != HAL_OK) return 1;
return 0;
}
```
上述代码展示了如何在铁头山羊开发板上完成I2C的基本配置与数据交互过程。需要注意的是,在实际应用中可能还需要调整某些硬件特性以适配具体场景需求。
阅读全文
相关推荐











