OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7465|回复: 3

STM32驱动ADS1255,接收缓冲区一直为空,导致死在那里

[复制链接]

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-10-16
在线时间
0 小时
发表于 2014-6-5 16:58:40 | 显示全部楼层 |阅读模式
5金钱
uint8_t ADS1255_write_byte(uint8_t data)
{
while(SPI1->SR&1<<1==0)//发送缓冲器非空,等待
SPI1->DR=data;   //发送一个byte  
  while((SPI1->SR&1<<0)==0);//等待接收完一个byte ,运行这步就过不去了
    //delay_us(2);
return SPI1->DR;   //返回收到的数据,此时的数据是1255回传的数据
}
SPI通信,向发送缓冲区写入data,此时1255肯定回传数据到STM32接收缓冲区,那就不该为空啊,为什么会死在那里呢?看到网上有很多人遇到这个问题,有人说上面程序逻辑有问题,我认为没问题啊,求解答

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-6 00:27:15 | 显示全部楼层
这里确实不应该出问题,就算你不接ADS1255,也不会死在这里才对。
是不是你的 SPI初始化有问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-10-16
在线时间
0 小时
 楼主| 发表于 2014-6-6 08:26:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
void SPI1_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
/*SPI引脚配置复用推挽输出PA5-SCK、PA7-MOSI*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_5|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*SPI引脚配置上拉输入PA6-MISO*/
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* SPI引脚配置推挽输出  A4-SPI_NSS */
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_4; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
 /* SPI引脚配置浮空输入 A3-DRDY */
GPIO_InitStructure.GPIO_Pin =GPIO_Pin_3; //PA3不设置可能也没问题,复位后处于浮空状态,其电平状态由外围电路决定
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*SPI1模式设置*/
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI 设置为双线双向全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI_Mode_Master
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI 发送接收8 位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟空闲为0
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //数据捕获于第二个时钟沿
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //内部NSS 信号有SSI 位控制
SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_256; //波特率预分频值为256,PLLCLK为56M,此时SPI1为218.75K,注意不能超过18M
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB 位开始
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
}这是我整个spi的配置,我把上面的等待接收字节注释,以延时1us代替,想试试行不行,读出来1255几个重要寄存器的值也是不对的。1255的晶振已经起振了,如果通信正常的话,是不是用示波器SCK上观察到方波?那MISO,MOSI上会有啥样的波形,才算正常?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-6 23:40:24 | 显示全部楼层
回复【3楼】tangzhao_01:
---------------------------------
发送数据时SCK一定有波形才对.MOSI,MISO则看你发送的数据,以及从机回复的数据.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-7 09:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表