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 配置为上拉输入的
也没有看出来你用的是什么 MCU. 我看可以先用示波器验证一下时序吧.
是的,不要发程序,把你对应的波形抓出来看看。