新手上路
- 积分
- 48
- 金钱
- 48
- 注册时间
- 2012-10-19
- 在线时间
- 0 小时
|
发表于 2013-10-17 18:28:17
|
显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,你好!不知道你有没有看过楼主的这个程序。在IIC_5883.c中有
void I2C_GPIO_Config(void)
{
RCC->APB2ENR|=1<<3;//先使能外设IO  ORTC时钟
GPIOB->CRL&=0X00FFFFFF;//PC11/12 推挽输出
GPIOB->CRL|=0X33000000;
GPIOB->ODR|=3<<6; //PC11,12 输出高
}
bool I2C_Start(void)
{
SDA_H;
SCL_H;
I2C_delay();
if(!SDA_read)return FALSE; //SDA线为低电平则总线忙,退出
SDA_L;
I2C_delay();
if(SDA_read) return FALSE; //SDA线为高电平则总线出错,退出
SDA_L;
I2C_delay();
return TRUE;
}
其中if(!SDA_read)return FALSE;这句话中的SDA_read很是费解。右击到定义则是在IIC_5883.h中的
#define SDA_read GPIOB->IDR & GPIO_Pin_7
右击GPIO_Pin_7到定义则是在stm32f10x_gpio.h中的
#define GPIO_Pin_7 ((u16)0x0080) /*  in 7 selected */这么一句话。
在其他的程序中则再没有找到相关配置GPIO口输入模式的配置。如果不把GPIO_Pin_7 引脚配置为输入模式,那么读这个引脚的时候就应该一直是零啊。当然这个程序是能用的,真的不知道什么时候,把这个引脚配置成的输入模式。还是#define SDA_read GPIOB->IDR & GPIO_Pin_7这一句话就直接把它配置成了输入模式,而且你也可以看到下面的程序 SDA_L; 也没有重新配置输入输出模式,直接是将引脚拉低,这应该又是回到输出模式了吧。请给指点指点这是怎么回事 |
|