有没有人用过拿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条回答
lvehe
1楼-- · 2019-07-20 17:57
我要学习嵌入式 发表于 2017-1-11 11:01
void IIC_Ack(void)
{
        IIC_SCL=0;

延时不同使得通讯的速度改变而已,延时太短有时候可能通讯不正常,就要加长延时。SCL从低电平变化到下一个低电平的时间不要短于2.5us(400kbit/s)就行。当然,高低电平的稳定时间可以是相同,或者是低电平时长是高电平时长的2倍。这2种是比较常用的。
我要学习嵌入式
2楼-- · 2019-07-20 22:09
搞错 PA3 SDA
lzq12
3楼-- · 2019-07-21 03:25
 精彩回答 2  元偷偷看……
我要学习嵌入式
4楼-- · 2019-07-21 06:55
void IIC_Ack(void)
{
        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
。。我两个都有看,正在看
我要学习嵌入式
5楼-- · 2019-07-21 09:14
lvehe 发表于 2017-1-10 20:36
延时不同使得通讯的速度改变而已,延时太短有时候可能通讯不正常,就要加长延时。SCL从低电平变化到下一 ...

可是这是同一个I2C函数里的 起始和终止都是8US 就ACK 4US。这是为了加快速度吗?只要信号传过去了  ,限制好最低所要通讯的速率?
我要学习嵌入式
6楼-- · 2019-07-21 11:04
 精彩回答 2  元偷偷看……

一周热门 更多>