stm32f103rct6 模拟iic 驱动mpu9250
驱动部分由网络上参考移植
移植需要修改的宏定义
#define I2C_SDA_H GPIO_SetBits(GPIOB,GPIO_Pin_0) //实现SDA高电平
#define I2C_SDA_L GPIO_ResetBits(GPIOB,GPIO_Pin_0)
#define I2C_SCL_H GPIO_SetBits(GPIOB,GPIO_Pin_1)
#define I2C_SCL_L GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define I2C_SDA_GET GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)//定义读取iic数据 是一个if条件
需要修改的函数
/***************************************************************
?Name: II2_Config
?Params: void
?Return: void
?Description: 配置引脚工作模式
***************************************************************/
/* SCL=>PB6 SDA=>PB7 */
void I2C_Work_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为推免输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置引脚速度为50MHZ
GPIO_Init(GPIOB, &GPIO;_InitStructure);//调用库函数,初始化GPIO
}
void Mpu_IO_OUT(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为推免输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置引脚速度为50MHZ
GPIO_Init(GPIOB, &GPIO;_InitStructure);//调用库函数,初始化GPIO
}
void Mpu_IO_IN(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO;_InitStructure);
}
可能需要修改的函数(延时)
void Delay_ms(uint16_t nms)
{
uint16_t i,j;
for(j = nms;j > 0;j --)
for(i = 0;i < 1000;i ++);
}
void Delay_us(u32 ustime)
{
// us级别的时间,NOP方式,72Mhz主频
u32 i;
for(i=0;iMpu9250;
extern void I2C_Work_Init(void);//模拟iic初始化引脚
extern int Mpu9250_Work_Mode_Init(void);//初始化
extern void READ_MPU9250_MAG(void) ;//读取地磁
extern void READ_MPU9250_GYRO(void) ;//读取陀螺仪
extern void READ_MPU9250_ACCEL(void) ;//读取加速度
1