stm32与AD7190通信,程序不能读到值

求stm32或者c51关于ad7190程序... 求stm32或者c51关于ad7190程序 展开
 我来答
KevinDears
2018-03-21 · TA获得超过4560个赞
知道大有可为答主
回答量:1万
采纳率:58%
帮助的人:1000万
展开全部

这个问题需要有实物调试,

原因可能有很多,硬件,软件方面。

思路是:

先排除硬件问题,用这个SPI通道测试一下其他通讯

再仔细对照一下AD7190的规格书,看看初始化,设置是否正确,

然后再检查一下发送接收的过程和步骤是否正确。

整理一下代码:

void SPI_Init(void)
{
 RCC->APB2ENR|=1<<3; //PB的时钟使能
 RCC->APB1ENR|=1<<14; //SPI2时钟使能
 GPIOB->CRH&=0X000F0FFF; //PB11 PB13 PB15复用推挽 PB14浮空输入
 GPIOB->CRH|=0XB4B0B000;
 GPIOB->ODR|=1<<11; //上拉
 GPIOB->ODR|=1<<13;
 GPIOB->ODR|=1<<15;
 SPI2->CR1|=0<<10;  //全双工
 SPI2->CR1|=1<<9;   //软件SSM,NSS引脚的电平由SSI位的值决定
 SPI2->CR1|=1<<8;   //SSI位
 SPI2->CR1|=1<<2;   //配置为主设备
 SPI2->CR1|=0<<11;  //使用8位数据格式
 SPI2->CR1|=1<<1;   //空闲状态sck=1保持高电平
 SPI2->CR1|=1<<0;   //数据采样从第二个时钟边沿开始
 SPI2->CR1|=3<<3;    //fsck=36M/16 波特率控制
 SPI2->CR1|=0<<7; //先发送MSB 
 SPI2->CR1|=1<<6; //使能spi设备
}
void SPI2_Send_ReveiceFull(u8 *data,u8 len)
{
CS=0;
for(i=0;i<len;i++)
{
while((SPI2->SR&(1<<1))==0); //检查spi标志位设置与否,发送缓存空标志位TXE=1为空跳出
SPI2->DR=*(data+i);
while((SPI2->SR&(1<<0))==0); //检查指定spi标志位设置与否,接受缓存非空标志位RXNE为非空跳出
temp=SPI2->DR;
*(AD7190_ReveiceData+len-i-1)=temp;
}
CS=1;
}
void AD7190_Init(void)
{
//复位
AD7190_SendaData[2]=0xff;
AD7190_SendaData[1]=0xff;
AD7190_SendaData[0]=0xff;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//设置配置寄存器
AD7190_SendaData[0]=0x10;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[2]=0x10;   //基准电压选择需确定
AD7190_SendaData[1]=0x03; //通道选择需配置
AD7190_SendaData[0]=0x07; //输入范围 
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//设置模式寄存器
AD7190_SendaData[0]=0x08;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[2]=0x10; //使用外部时钟
AD7190_SendaData[1]=0x03;
AD7190_SendaData[0]=0xff;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读模式
for(i=0;i<4;i++)AD7190_SendaData[i]=0x00;
AD7190_SendaData[0]=0x48;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[0]=0x00;
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读配置寄存器
AD7190_SendaData[0]=0x50;
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
SPI2_Send_ReveiceFull(AD7190_SendaData,3);
//读数据寄存器
AD7190_SendaData[0]=0x5C; //5C
SPI2_Send_ReveiceFull(AD7190_SendaData,1);
AD7190_SendaData[0]=0xff;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式