STM32F103CBT6 I2C代码
时间: 2024-10-09 09:13:10 浏览: 36
STM32F103CBT6是一款基于ARM Cortex-M3内核的微控制器,它支持I2C通信,这是一种全双工、串行通信总线标准。下面是一个简单的示例,展示了如何在STM32F103上使用CubeMX生成的库进行基本的I2C通信:
```c
#include "stm32f1xx_hal.h"
#include "i2c.h"
// 定义I2C端口和设备地址
#define I2C_PORT GPIOB
#define I2C_PIN_SCL PB_11
#define I2C_PIN_SDA PB_12
#define I2C_ADDRESS 0x40
I2C_HandleTypeDef hi2c1;
void i2c_init(void) {
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // 设置I2C速度,例如100kHz
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; // 默认单向地址模式
hi2c1.Init.OwnAddress1 = 0; // 无从机地址
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.Delay = 0;
hi2c1.Init.StopBits = I2C_STOPBITS_1;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
}
uint8_t send_data(uint8_t data) {
HAL_I2C_Master_Transmit(&hi2c1, I2C_ADDRESS, &data, 1,延时时间); // 发送数据
return HAL_I2C_MasterReceive(&hi2c1, I2C_ADDRESS, &data, 1,延时时间); // 等待接收应答
}
int main(void) {
i2c_init();
if (send_data(0xFE)) { // 发送数据并检查是否成功接收
printf("Data sent and received successfully.\n");
} else {
printf("Error in communication.\n");
}
while (1) {
// ... 这里可以添加更多的I2C操作...
}
}
```
阅读全文