关于MPU650例程移植问题

2019-07-21 02:22发布

学完原子哥STM32F407的MPU6050例程后,就像用个实验室的MPU6050模块试试。先是接到PB8、PB9引脚试试,结果不成功。可能是因为那两个引脚已经连接了板子上的MPU6050吧。然后我又试了一下PB6、PB7;PF1、PF0,这两对接口分别是I2C1的SCL、SDA和I2C2的SCL和SDA。但还是不行,到底是什么原因啊?  我用的是原子哥的例程,只将myiic.c 和myiic.h里关于IO PB8、9改为了PF0、1。。。 [mw_shl_code=c,true]#ifndef __MYIIC_H #define __MYIIC_H #include "sys.h" #define SDA_IN() {GPIOB->MODER&=~(3<<(0*2));GPIOB->MODER|=0<<0*2;} #define SDA_OUT() {GPIOB->MODER&=~(3<<(0*2));GPIOB->MODER|=1<<0*2;} //IO??×÷???? #define IIC_SCL PFout(1) #define IIC_SDA PFout(0) #define READ_SDA PFin(0) void IIC_Init(void); void IIC_Start(void); void IIC_Stop(void); void IIC_Send_Byte(u8 txd); u8 IIC_Read_Byte(unsigned char ack);//IIC????????×??? u8 IIC_Wait_Ack(void); void IIC_Ack(void); void IIC_NAck(void); void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data); u8 IIC_Read_One_Byte(u8 daddr,u8 addr); #endif [/mw_shl_code] [mw_shl_code=c,true]#include "myiic.h" #include "delay.h" void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOF, &GPIO_InitStructure); IIC_SCL=1; IIC_SDA=1; } void IIC_Start(void) { SDA_OUT(); IIC_SDA=1; IIC_SCL=1; delay_us(4); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(4); IIC_SCL=0; } void IIC_Stop(void) { SDA_OUT(); IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(4); IIC_SCL=1; IIC_SDA=1; delay_us(4); } u8 IIC_Wait_Ack(void) { u8 ucErrTime=0; SDA_IN(); IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0; return 0; } void IIC_Ack(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=0; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } void IIC_NAck(void) { IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; } void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL=0; for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(2); IIC_SCL=1; delay_us(2); IIC_SCL=0; delay_us(2); } } u8 IIC_Read_Byte(unsigned char ack) { unsigned char i,receive=0; SDA_IN(); for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(2); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(1); } if (!ack) IIC_NAck(); else IIC_Ack(); return receive; } [/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。