新手入门
- 积分
- 15
- 金钱
- 15
- 注册时间
- 2019-4-7
- 在线时间
- 7 小时
|
8金钱
使用的是STM32F!03C8T6,然后用的是ADS1110芯片要读取AD值,IIC通信。之前调试的很稳定,但是因为需要更换IO口(由PB10,PB11换成了PA2,PA3)就没了反应。IIC底层代码使用的正点原子的代码。做了如下更改//IO方向设置//PA2,PA3
#define SDA_IN_2() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=8<<12;}
#define SDA_OUT_2() {GPIOA->CRL&=0XFFFF0FFF;GPIOA->CRL|=3<<12;}
//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<<12;}
#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<<8)+adc_lo;
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;
}
|
|