原子哥,今天我调试32驱动ADS1118,用的模拟IO口,用示波器看时序应该没问题啊,但是就是 MISO口读不到数据,代码附在下面
[mw_shl_code=c,true]
ADS1118.c
void ADS1118Init()//ADS??????????
{
GPIO_InitTypeDef GPIO_InitStructure;
//SCLK-->GPIOD.0 CS-->GPIOD.1 DIN-->GPIOD.2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//????GPIOD?±??
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;//PD0~3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //?è?????ì????
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //IO????????50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure);//??????GPIOD.0,1,2
//Dout-->GPIOD.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //????????
GPIO_Init(GPIOD, &GPIO_InitStructure);//??????GPIOD.3
CS_H ;
SCLK_L ;
DIN_L;
}
uint16_t Write_ADS1118(uint16_t config)//AD×???????
{
uint16_t ADdata=0;
uint8_t i;
//?????ü???????÷
CS_L;
delay_ms(1);
for(i=0;i<16;i++)
{
SCLK_H;
if(config & 0x8000)
DIN_H;
else DIN_L;
config<<=1;
delay_us(1);
SCLK_L;
delay_us(1);
}
//??????·?×????ê??
CS_H;
delay_us(10);
CS_L;
//????????
if(DOUT==0)//????×?????·??ê??
{
for(i=0;i<16;i++)
{
SCLK_H;
delay_us(1);
if(DOUT)
ADdata= ADdata|0x01;
else
ADdata= ADdata|0x00;
ADdata<<=1;
SCLK_L;
delay_us(1);
}
}
CS_H ;
SCLK_L;
DIN_L;
return ADdata;
}
ADS1118.h
#ifndef __ADS1118_H
#define __ADS1118_H
#include "sys.h"
#include "delay.h"
//????IO??
#define SCLK_L GPIO_ResetBits(GPIOD,GPIO_Pin_0)
#define SCLK_H GPIO_SetBits(GPIOD,GPIO_Pin_0)
#define CS_L GPIO_ResetBits(GPIOD,GPIO_Pin_1)
#define CS_H GPIO_SetBits(GPIOD,GPIO_Pin_1)
#define DIN_L GPIO_ResetBits(GPIOD,GPIO_Pin_2)
#define DIN_H GPIO_SetBits(GPIOD,GPIO_Pin_2)
#define DOUT GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_3)//????ADS????
void ADS1118Init(void );//ADS??????????
u16 Write_ADS1118(u16 config);//AD×?????
#endif
[/mw_shl_code]
|