就用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。。不知道怎么改,主要切换输入输出模式嘛。。现在还没做出来忙了一天。。有谁做过这东西的告诉我怎么改,要注意点什么。。
延时不同使得通讯的速度改变而已,延时太短有时候可能通讯不正常,就要加长延时。SCL从低电平变化到下一个低电平的时间不要短于2.5us(400kbit/s)就行。当然,高低电平的稳定时间可以是相同,或者是低电平时长是高电平时长的2倍。这2种是比较常用的。
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
//不产生ACK应答
void IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
} 为什么库函数这个应答信号只有4US 别的8US
。。我两个都有看,正在看
可是这是同一个I2C函数里的 起始和终止都是8US 就ACK 4US。这是为了加快速度吗?只要信号传过去了 ,限制好最低所要通讯的速率?
一周热门 更多>