就用STMF4的库函数实现的,我看过探索者给的I2C源程序,用来和什么通信的我不认识,但是好像时序和我那个对不上,我就自己把以前51的程序重新翻译了份,挪用了源程序的
#define SDA_IN() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} //PB9输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //PB9输出模式
我的SDA是PA2。。不知道怎么改,主要切换输入输出模式嘛。。现在还没做出来忙了一天。。有谁做过这东西的告诉我怎么改,要注意点什么。。
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
如果你理解了开漏模式就知道为什么要拉高了,实际上,这里的拉高有的时候用更容易理解的“释放”来表示,也就是主机释放对SDA的控制权。释放之后,因为上拉电阻的缘故,所以就表现为高电平。因为此时要读取从机的数据,所以SDA由从机来拉高或拉低,主机就读取SDA的电平。用开漏模式就可以使SCL和SDA表现为双向口。而不必像原子做的那样,一会儿设置为输出,一会儿设置为输入,太麻烦了。
这又不清楚了。。。开漏不是无信号时是低电平吗。而且我一直以为如果是输出模式就必须输出不能输入,输入模式就必须输入。输出是无效的。
我学习这芯片看入门指南好像什么部分都只明白一半,感觉自己做就不明白原理,没有思路
一周热门 更多>