弹吉他的程序员 2019-11-26 11:38 采纳率: 0%
浏览 691

模拟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;
}

  • 写回答

1条回答 默认 最新

  • HBLFC 2021-07-21 10:55
    关注

    0XFFFF0FFF这个也要改

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R