stm32 i2c写寄存器
时间: 2023-10-19 11:09:16 浏览: 138
以下是在 STM32 上使用 I2C 写寄存器的示例代码:
```
#include "stm32f4xx.h"
#define SLAVE_ADDRESS 0x50 // I2C 从设备地址
#define REGISTER_ADDRESS 0x01 // 寄存器地址
I2C_HandleTypeDef hi2c1;
void I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // I2C 时钟速度
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)
{
/* Initialization Error */
Error_Handler();
}
}
void I2C1_WriteRegister(uint8_t reg, uint8_t data)
{
uint8_t buffer[2] = {reg, data};
HAL_I2C_Master_Transmit(&hi2c1, SLAVE_ADDRESS, buffer, 2, HAL_MAX_DELAY);
}
int main()
{
// 初始化 I2C1
I2C1_Init();
// 写入寄存器
I2C1_WriteRegister(REGISTER_ADDRESS, 0x12);
while (1)
{
// 你的其他代码
}
}
```
以上代码中,`I2C1_Init()` 函数用于初始化 I2C1,`I2C1_WriteRegister()` 函数用于写入寄存器。在 `main()` 函数中,我们可以调用 `I2C1_WriteRegister()` 函数来写入寄存器。注意在 `I2C1_WriteRegister()` 函数中,我们先将要写入的寄存器地址和数据存入一个长度为 2 的 buffer 中,然后使用 `HAL_I2C_Master_Transmit()` 函数将 buffer 中的数据发送给从设备。
阅读全文