模拟IIC更改IO口以后,IIC设备读取数据失败

使用的是STM32F!03C8T6,然后用的是ADS1110芯片要读取AD值,IIC通信。之前调试的很稳定,但是因为需要更换IO口(由PB10,PB11换成了PA2,PA3)就没了反应。IIC底层代码使用的正点原子的代码。做了如下更改//IO方向设置//PA2,PA3
#define SDA_IN_2() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8< #define SDA_OUT_2() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3< //IO操作函数
#define IIC_SCL_2 PAout(2) //SCL
#define IIC_SDA_2 PAout(3) //SDA
#define READ_SDA_2 PAin(3) //输入SDA
//PB10,PB11
#define SDA_IN() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8< #define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}
//IO操作函数

#define IIC_SCL PBout(10) //SCL
#define IIC_SDA PBout(11) //SDA

#define READ_SDA PBin(11) //输入SDA

以下是ADS110代码
void ADS1110_config(void) //配置config寄存器
{
IIC_Start(); //控制SCL和SDA线实现IIC通讯的开始;
IIC_Send_Byte(0X90);

while(IIC_Wait_Ack())
{
printf("IICfailed\r\n");
break;
}
while(IIC_Wait_Ack())
{
printf("IICfailed\r\n");
break;
}
IIC_Stop();
}
void write_ads1110(u8 cmd)//写数据
{
IIC_Start();
IIC_Send_Byte(0X90); //ADS1110地址 写
while(IIC_Wait_Ack());
IIC_Send_Byte(cmd);
while(IIC_Wait_Ack());
IIC_Stop();
}

u16 read_ads1110(void)
{
if((adc_sr&0x80)==0)
{
IIC_Start();
IIC_Send_Byte(0x91); //ADS1110地址 读
while(IIC_Wait_Ack());
adc_hi = IIC_Read_Byte(1);
adc_lo = IIC_Read_Byte(1);
IIC_Stop();
adc_lo1=(adc_hi< if(adc_lo1>65535)adc_lo1-=65535;
}
return adc_lo1;
}

u8 read_sr(void)
{
IIC_Start();
IIC_Send_Byte(0x91); //ADS1110地址 读
while(IIC_Wait_Ack());
adc_hi = IIC_Read_Byte(1);
adc_lo = IIC_Read_Byte(1);
adc_sr=IIC_Read_Byte(1);
IIC_Stop();
return adc_sr;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问