野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 28329|回复: 2

STM32 SPI3 工作在从模式接收数据偶尔出现错位的情况

[复制链接]
发表于 2013-6-6 18:00:43 | 显示全部楼层 |阅读模式
STM32 SPI3  工作在从模式接收数据偶尔出现错位的情况


主机发送数据的时序 上升沿数据有效,下降沿数据改变。CS信号没有使用,
SCK 空闲状态是0  数据采样从第一个时钟边沿开始;
时钟相位和极性设置的都是按照主机通讯协议设置的,

只用的SCLK和SDIO, 其中 SPI3通过管脚映射 SCLK 接在PC10  SDIO接PC12  
配置

管脚配置情况
  • //Enable GPIOC clock
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  •     //Enable SPI3 clock
  •     RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
  •     //Enable AFIO clock
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO ,ENABLE);
  •         //remap  SPI3  PC10 PC12
  •     GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);
  • //SPI3_SCK
  •            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 ;
  •            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //下拉输入
  •            GPIO_Init(GPIOC, &GPIO_InitStructure);
  •            //SPI3_MOSI
  •            GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_12;
  •            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;//悬空输入
  •            GPIO_Init(GPIOC, &GPIO_InitStructure);

[color=rgb(51, 102, 153) !important]复制代码

SPI部分配置
  •   SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; //SPI设置为双线单向接收
  •     SPI_InitStructure.SPI_Mode = SPI_Mode_Slave; //从模式
  •     SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //data is 16bit
  •         //空闲状态时,SCK保持低电平
  •     SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //  //时钟悬空为低
  •     //数据采样从第一个时钟边沿开始;
  •     SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //数据捕获于第1个时钟沿
  •     SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS未用,可作为通用I/O
  •     //SPI波特率 从模式可以不用管 时钟是主设备提供的
  •     SPI_InitStructure.SPI_BaudRatePrescaler =  SPI_BaudRatePrescaler_256;
  •     //数据高位在前
  •     SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  •     SPI_InitStructure.SPI_CRCPolynomial = 7;
  •     SPI_Init(SPI3, &SPI_InitStructure);
  •         SPI_I2S_ITConfig(SPI3, SPI_I2S_IT_RXNE,ENABLE);
  •     /* DISABLE SPI3  */
  •     SPI_Cmd(SPI3, DISABLE);
  •     /* Enable SPI3  */
  •     SPI_Cmd(SPI3, ENABLE);


复制代码


[size=0.83em]3 分钟前 上传
下载附件 [size=0.83em](4.57 MB)

示波器看到的波形


在测试时,主机传输数据55H 用示波器测量输出的波形数据是正常的,
但是SPI读取的数据偶尔会出现错位的情况  比如会输出AAH 并且这种现象比较随机没有发现什么规律,请论坛的各位用过SPI从模式通讯的给一个建议,应该怎么做才可以比较稳定,
回复

使用道具 举报

发表于 2013-6-7 14:15:12 | 显示全部楼层
没有使用过从模式,帮顶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-8 10:11:29 | 显示全部楼层
Alice2013 发表于 2013-6-7 14:15
没有使用过从模式,帮顶

嗯,谢谢Alice2013 ... 这个其实就是数据和时钟错位的情况,很多人遇到过,但是不知道怎么解决
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 11:07 , Processed in 0.025801 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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