有没有人用过拿51编写的I2C程序翻译成STMF4的代码

2019-07-20 17:24发布

就用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。。不知道怎么改,主要切换输入输出模式嘛。。现在还没做出来忙了一天。。有谁做过这东西的告诉我怎么改,要注意点什么。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
我要学习嵌入式
1楼-- · 2019-07-21 15:06
u8 IIC_Wait_Ack(void)
{
        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;
                }
        }
lvehe
2楼-- · 2019-07-21 19:35
 精彩回答 2  元偷偷看……
lvehe
3楼-- · 2019-07-22 00:45
我要学习嵌入式 发表于 2017-1-11 12:47
大神 再问个问题 再接受SLAVE的数据时 为什么函数里开始要拉高SDA。是跟上拉输入有关吗?我记得前几天有 ...

如果你理解了开漏模式就知道为什么要拉高了,实际上,这里的拉高有的时候用更容易理解的“释放”来表示,也就是主机释放对SDA的控制权。释放之后,因为上拉电阻的缘故,所以就表现为高电平。因为此时要读取从机的数据,所以SDA由从机来拉高或拉低,主机就读取SDA的电平。用开漏模式就可以使SCL和SDA表现为双向口。而不必像原子做的那样,一会儿设置为输出,一会儿设置为输入,太麻烦了。
我要学习嵌入式
4楼-- · 2019-07-22 05:59
lvehe 发表于 2017-1-11 18:31
如果你理解了开漏模式就知道为什么要拉高了,实际上,这里的拉高有的时候用更容易理解的“释放”来表示, ...

这又不清楚了。。。开漏不是无信号时是低电平吗。而且我一直以为如果是输出模式就必须输出不能输入,输入模式就必须输入。输出是无效的。
我要学习嵌入式
5楼-- · 2019-07-22 06:39
lvehe 发表于 2017-1-11 18:31
如果你理解了开漏模式就知道为什么要拉高了,实际上,这里的拉高有的时候用更容易理解的“释放”来表示, ...

我学习这芯片看入门指南好像什么部分都只明白一半,感觉自己做就不明白原理,没有思路
lvehe
6楼-- · 2019-07-22 08:36
 精彩回答 2  元偷偷看……

一周热门 更多>