stm32f103RCT6 IIC通信单字节读取写入
时间: 2023-10-19 20:05:30 浏览: 113
stm32f103+串口通信的写法
以下是基于STM32 HAL库的单字节IIC通信读写示例代码,可以参考:
```c
#include "stm32f1xx_hal.h"
#define I2C_DEV_ADDR 0x50 // I2C设备地址
#define I2C_TIMEOUT 1000 // I2C超时时间
I2C_HandleTypeDef hi2c1;
void I2C_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
Error_Handler();
}
}
void I2C_Read(uint8_t addr, uint8_t *pData, uint16_t size)
{
HAL_I2C_Mem_Read(&hi2c1, I2C_DEV_ADDR, addr, I2C_MEMADD_SIZE_8BIT, pData, size, I2C_TIMEOUT);
}
void I2C_Write(uint8_t addr, uint8_t data)
{
HAL_I2C_Mem_Write(&hi2c1, I2C_DEV_ADDR, addr, I2C_MEMADD_SIZE_8BIT, &data, 1, I2C_TIMEOUT);
}
```
其中,`hi2c1`为I2C的句柄,需要在主函数中先调用`I2C_Init()`函数进行初始化。
单字节读取可以通过调用`I2C_Read()`函数实现,其中,`addr`为I2C设备内存地址,`pData`为读取数据的存储地址,`size`为读取数据的长度,此处为1。
单字节写入可以通过调用`I2C_Write()`函数实现,其中,`addr`为I2C设备内存地址,`data`为写入的数据。
阅读全文