TI中文支持网
TI专业的中文技术问题搜集分享网站

ADS1118读出来的值有点问题!实在查不出来 问题出现在什么地方!

你好,我用了一个ADS1118!   

IO口定义如下

//SPI1_CS      PA4
//SPI1_SCK   PA5
//SPI1_MISO  PA6
//SPI1_MOSI  PA7

uint8_t SPI1_SendByte(uint8_t byte)
{
/* 循环检测发送缓冲区是否是空 */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
{
;
}
/* 通过SPI1外设发出数据 */
SPI_I2S_SendData(SPI1, byte);
/* 等待接收数据,循环检查接收数据缓冲区 */
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
{
;
}
/* 返回读出的数据 */
return SPI_I2S_ReceiveData(SPI1);
}

uint32_t SPI_Code(uint16_t CofigReg)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //CS LO delay(10); readata1=SPI1_SendByte((uint8_t)(CofigReg>>8)); readata2=SPI1_SendByte((uint8_t)CofigReg);
GPIO_SetBits(GPIOA,GPIO_Pin_4); //CS HIGH
delay(10); GPIO_ResetBits(GPIOA,GPIO_Pin_4); //CS LO
while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6));
{
;
} readata3=SPI1_SendByte((uint8_t)(CofigReg>>8));
readata4=SPI1_SendByte((uint8_t)CofigReg);

readata= (uint32_t)readata4|((uint32_t)readata3<<8)|((uint32_t)readata2<<16)|((uint32_t)readata1<<24);
return readata;}

我看见文档中说

用的是单次转换!  发完配置之后,我判断了一下    DOUT的状态,   主程序中每 500 MS执行一次    SPI_Code(0x8583);

为什么 发完配置后,PA6脚一直为高  无法运行到下面取值程序!  不知道问题出现在什么地方,希望能告诉一下!谢谢

我的PA6 配置为上拉输入的

user151383853:

也没有看出来你用的是什么 MCU. 我看可以先用示波器验证一下时序吧.

Wanda WANG:

是的,不要发程序,把你对应的波形抓出来看看。

赞(0)
未经允许不得转载:TI中文支持网 » ADS1118读出来的值有点问题!实在查不出来 问题出现在什么地方!
分享到: 更多 (0)