8281|4

4

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32中SPI数据传输问题 [复制链接]

我在STM32外面接了一个ADC-TLC2543,用STM32的SPI传输ADC转换之后的结果。现在我用示波器观察STM32中MOSI(PA7)的输出,示波器中没有波形(片选信号和时钟信号正常),把MOSI接到ADC中,ADC的输出用示波器看有波形,但输入STM32中读出的数据很小,不正确,不知道是哪里出错了?? 大神们能不能帮我看看???
int main(void)
{
   u16 Channel_Select_Tx=0;         //用模拟通道0,1,2
   u16 SPI_Rx=0;                                                                         //存储SPI接受到的数据
      
   RCC_Configuration();
   GPIO_Configuration();
   SPI_Configuration();

  // useless=Read_TLC2543(Channel_Select_Tx[0]);      //SPI传输的是上一个AD转换的结果,第一个数据没用

   while(1)
   {
       SPI_Rx=Read_TLC2543(Channel_Select_Tx);
           SPI_Rx=SPI_Rx+1;
   }
}

void SPI_Configuration(void)
{
   SPI_InitTypeDef SPI_InitStructure;

   SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;        //双线全双工模式
   SPI_InitStructure.SPI_Mode=SPI_Mode_Master;                                                //主
   SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b;                                        //16位
   SPI_InitStructure.SPI_CPOL=SPI_CPOL_High;                                                        //时钟脚闲置时保持低电平
   SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;                                                //在第一个时钟沿采样数据信号
   SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                                        //软件NSS,片选信号由软件产生
   SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256; //对时钟256分频
   SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;                                        //高位在前
//  SPI_InitStructure.SPI_CRCPolynomial=7;
   SPI_Init(SPI1,&SPI_InitStructure);

   SPI_Cmd(SPI1,ENABLE);
}

u16 Read_TLC2543(u16 chan)
{
     u16 ADCdata;
         chan<<=12;
         chan|=0x0C00;
     GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_RESET);           //片选信号拉低
         Delay_nms(100);                                       //加入延时,速度过快读不到数据
          //等待SPI1 TX buffer 为空
          while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
          //发送SPI1的数据
          SPI_I2S_SendData(SPI1,chan);

          //等待SPI1完成数据接收
      while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);
          //读SPI1所接受到的数据
          ADCdata=SPI_I2S_ReceiveData(SPI1);

          Delay_nms(100);
        //  ADCdata>>=4;                                       //读取的数据为16位,第四为为0
          GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_SET);           //一次转化完成,片选拉高
          return ADCdata;

}

以上是我的部分程序。谢谢啦!!!!
此帖出自stm32/stm8论坛

最新回复

LZ问题解决了没有???  详情 回复 发表于 2014-12-2 11:26
点赞 关注
 

回复
举报

6107

帖子

4

TA的资源

版主

沙发
 
要看看MOSI和MISO都有正确波形才可以粗步判断SPI工作了。如果MOSI都没波形,那估计是哪里初始化有问题。
此帖出自stm32/stm8论坛
 
 

回复

272

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
spi有什么比较方便的 调试工具
此帖出自stm32/stm8论坛
 
 

回复

10

帖子

1

TA的资源

一粒金砂(中级)

4
 

这个应该是你程序问题

这个AD要第一次读的是上一个通道的装换数据,这点需要注意。还有就是在AD装换完后,一定要再读一次SPI寄存器。我今年刚用过这个方案。可以进一步交流
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

1

TA的资源

一粒金砂(初级)

5
 
LZ问题解决了没有???
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表