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
这个波形不正常吗输入的数据对的啊
图一是我的板子的,是有问题的,图二是战舰板子的,是正确的, 图1一直在操作写命令 读命令的时候需要切换IO方向的 现在发现问题是原理图的封装搞错了,SCL和SDA搞反了。但是,我将代码的引脚和IO口的方向都按照文档该了,为什么还是不行,用的是模拟IIC,既然模拟IIC用的都是IO口,将SDA和SCL交换一下,为什么不行,都是接的同样大小的电阻啊:dizzy:是芯片不支持吗:dizzy: 并不是所有IIC 都兼容的,EEPROM 24C02 和某些传感器的IIC协议有局部不同;要看您的IIC芯片的协议来更改,既然能看波形,您看您的波形有无1)启动 2)ACK 3)结束 位,对比协议 ,应该能找到方法。 mikecai 发表于 2019-10-18 09:07
并不是所有IIC 都兼容的,EEPROM 24C02 和某些传感器的IIC协议有局部不同;要看您的IIC芯片的协议来更改, ...
好的,谢谢。这么客气,算了不纠结这个了,直接交叉飞个线试一试 第一个应答位ACK出了问题
等应答位时,如果IO是PP模式,那么把SDA置为输入方向;OD模式,不用切方向。
你这移植的不细心呀,程序问题。
SDA引脚没有切换方向 toofree 发表于 2019-10-18 19:39
第一个应答位ACK出了问题
等应答位时,如果IO是PP模式,那么把SDA置为输入方向;OD模式,不用切方向。
你这 ...
非常同意:handshake
页:
[1]