STM32F103C8T6 软件模拟IIC 连接MPU9250 磁力计寄存器配置代码示例
#include "stm32f10x.h"
#define I2C_SCL_PIN GPIO_Pin_14 #define I2C_SDA_PIN GPIO_Pin_15 #define I2C_SCL_PORT GPIOB #define I2C_SDA_PORT GPIOB
// 初始化I2C总线 void I2C_Init() { GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 配置SCL引脚
GPIO_InitStructure.GPIO_Pin = I2C_SCL_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(I2C_SCL_PORT, &GPIO_InitStructure);
// 配置SDA引脚
GPIO_InitStructure.GPIO_Pin = I2C_SDA_PIN;
GPIO_Init(I2C_SDA_PORT, &GPIO_InitStructure);
}
// I2C起始信号 void I2C_Start() { GPIO_SetBits(I2C_SCL_PORT, I2C_SCL_PIN); GPIO_SetBits(I2C_SDA_PORT, I2C_SDA_PIN); GPIO_ResetBits(I2C_SDA_PORT, I2C_SDA_PIN); GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN); }
// I2C停止信号 void I2C_Stop() { GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN); GPIO_ResetBits(I2C_SDA_PORT, I2C_SDA_PIN); GPIO_SetBits(I2C_SCL_PORT, I2C_SCL_PIN); GPIO_SetBits(I2C_SDA_PORT, I2C_SDA_PIN); }
// I2C发送一个字节 void I2C_SendByte(uint8_t data) { uint8_t i;
for (i = 0; i < 8; i++) {
GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN);
if (data & 0x80)
GPIO_SetBits(I2C_SDA_PORT, I2C_SDA_PIN);
else
GPIO_ResetBits(I2C_SDA_PORT, I2C_SDA_PIN);
GPIO_SetBits(I2C_SCL_PORT, I2C_SCL_PIN);
data <<= 1;
}
GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN);
}
// I2C接收一个字节 uint8_t I2C_ReceiveByte() { uint8_t i, data = 0;
GPIO_SetBits(I2C_SDA_PORT, I2C_SDA_PIN);
for (i = 0; i < 8; i++) {
GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN);
GPIO_SetBits(I2C_SCL_PORT, I2C_SCL_PIN);
data <<= 1;
if (GPIO_ReadInputDataBit(I2C_SDA_PORT, I2C_SDA_PIN))
data++;
}
GPIO_ResetBits(I2C_SCL_PORT, I2C_SCL_PIN);
return data;
}
// 向MPU9250的磁力计写入寄存器地址和数据 void MPU9250_WriteMagRegister(uint8_t reg, uint8_t data) { I2C_Start(); I2C_SendByte(0x0C); // MPU9250磁力计器件地址(0x0C) I2C_SendByte(reg); // 寄存器地址 I2C_SendByte(data); // 数据 I2C_Stop(); }
int main() { // 初始化I2C总线 I2C_Init();
// 配置MPU9250的磁力计寄存器
MPU9250_WriteMagRegister(0x0A, 0x16); // 磁力计控制寄存器2,设置采样率为100Hz
while (1) {
// 你的代码
}
}
原文地址: https://www.cveoy.top/t/topic/pPyF 著作权归作者所有。请勿转载和采集!