模拟IIC通信的时候为什么先把SCL拉低再配置SDA的输出而反过来就不行

2019-07-20 22:37发布

[mw_shl_code=c,true]//产生ACK应答
void CT_IIC_Ack(void)
{
        CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_Delay();
        CT_IIC_SDA=0;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}
//不产生ACK应答                    
void CT_IIC_NAck(void)
{
        CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_Delay();
        CT_IIC_SDA=1;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}                                        [/mw_shl_code]
源于正点原子的触摸屏实验当把代码改成下面这样。
[mw_shl_code=applescript,true]
//产生ACK应答
void CT_IIC_Ack(void)
{
        //CT_IIC_SCL=0;
        CT_SDA_OUT();
        CT_IIC_SCL=0;
        CT_Delay();
        CT_IIC_SDA=0;
        CT_Delay();
        CT_IIC_SCL=1;
        CT_Delay();
        CT_IIC_SCL=0;
}[/mw_shl_code]
。照理说我这个CT_SDA_OUT只是配置GPIOF 的MODER把IO方向设置为输出,对IO口并无影响。但是为什么我像下面这样写就不行呢? 照理说和上面写是一样的效果啊,求大神指教!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
yconnor
1楼-- · 2019-07-21 00:28
 精彩回答 2  元偷偷看……
yconnor
2楼-- · 2019-07-21 04:24
我只是把这个CT_IIC_SCL=0放到CT_SDA_OUT下面来不应该会出现问题啊。不都是一样的效果吗?
正点原子
3楼-- · 2019-07-21 06:55
没这么试过,去看看IIC协议吧
jinggx
4楼-- · 2019-07-21 11:57
 精彩回答 2  元偷偷看……
yconnor
5楼-- · 2019-07-21 15:24
正点原子 发表于 2016-4-25 21:48
没这么试过,去看看IIC协议吧

原子哥你好,协议我都懂。可是这两种写法本质上是没有区别才对啊。以前用51写的IIC通信过的。STM32就搞不懂了。明明CT_SDA_OUT只是设定一下IO方向而已又没有操作IO口但是把
            CT_IIC_SCL=0写在它的下面却不行。这个不科学啊!
yconnor
6楼-- · 2019-07-21 19:33
jinggx 发表于 2016-4-25 23:05
只知道看代码乱猜,而不知道看看协议以及电路硬件?

首先并非乱猜,可能我有点乱。你没明白我在说什么!
   这么解释吧。
        PBout(0)=0;
        CT_SDA_OUT;  //把PF13配置为输出
       ……

      先配置输出CT_SDA_OUT;
                        PBout(0)=0;
  这两者反应在硬件上有没有区别。是这个意思。 硬件和IIC协议我都明白。但是这两种写法效果却不一样那一定是原因的。

一周热门 更多>