bl2019 发表于 2019-10-17 20:15:15

IIC的时序

IIC的时序,将战舰V2的IIC移植到自己的板子后,修改SDA,SCL引脚,时钟,IO口方向后,一直不能写入,逻辑分析仪抓取引脚如图一,测得战舰的引脚如图二,一直不明白是为什么成了图一这个样子,是IO口方向不对吗,我是按照图三配置的

//IO方向设置
#define SDA_IN(){GPIOB->CRL&=0XF0FFFFFF;GPIOB->CRL|=0X08000000;}
#define SDA_OUT() {GPIOB->CRL&=0XF0FFFFFF;GPIOB->CRL|=0X03000000;}

//IO操作函数         
#define IIC_SCL    PBout(7) //SCL
#define IIC_SDA    PBout(6) //SDA         
#define READ_SDA   PBin(6)//输入SDA



void IIC_Init(void)
{                                             
      GPIO_InitTypeDef GPIO_InitStructure;
      //RCC->APB2ENR|=1<<4;//先使能外设IO PORTB时钟
      RCC_APB2PeriphClockCmd(      RCC_APB2Periph_GPIOB, ENABLE );      
         
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(GPIOB, &GPIO_InitStructure);

      IIC_SCL=1;
      IIC_SDA=1;

}

mylovemcu 发表于 2019-10-18 08:24:42

这个波形不正常吗输入的数据对的啊

bl2019 发表于 2019-10-18 08:43:44

mylovemcu 发表于 2019-10-18 08:24
这个波形不正常吗输入的数据对的啊

图一是我的板子的,是有问题的,图二是战舰板子的,是正确的,

mylovemcu 发表于 2019-10-18 08:56:37

图1一直在操作写命令   读命令的时候需要切换IO方向的

bl2019 发表于 2019-10-18 08:59:31

现在发现问题是原理图的封装搞错了,SCL和SDA搞反了。但是,我将代码的引脚和IO口的方向都按照文档该了,为什么还是不行,用的是模拟IIC,既然模拟IIC用的都是IO口,将SDA和SCL交换一下,为什么不行,都是接的同样大小的电阻啊:dizzy:是芯片不支持吗:dizzy:

mikecai 发表于 2019-10-18 09:07:16

并不是所有IIC 都兼容的,EEPROM 24C02 和某些传感器的IIC协议有局部不同;要看您的IIC芯片的协议来更改,既然能看波形,您看您的波形有无1)启动 2)ACK 3)结束 位,对比协议 ,应该能找到方法。

bl2019 发表于 2019-10-18 09:20:56

mikecai 发表于 2019-10-18 09:07
并不是所有IIC 都兼容的,EEPROM 24C02 和某些传感器的IIC协议有局部不同;要看您的IIC芯片的协议来更改, ...

好的,谢谢。这么客气,算了不纠结这个了,直接交叉飞个线试一试

toofree 发表于 2019-10-18 19:39:41

第一个应答位ACK出了问题
等应答位时,如果IO是PP模式,那么把SDA置为输入方向;OD模式,不用切方向。
你这移植的不细心呀,程序问题。


Kevin201707 发表于 2019-10-19 22:43:32

SDA引脚没有切换方向

butterflyspring 发表于 2019-10-28 17:30:57

toofree 发表于 2019-10-18 19:39
第一个应答位ACK出了问题
等应答位时,如果IO是PP模式,那么把SDA置为输入方向;OD模式,不用切方向。
你这 ...

非常同意:handshake
页: [1]
查看完整版本: IIC的时序