OpenEdv-开源电子网

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

我用STM32 SPI传数据,为什么总是接收不到,求大神指点。。。。

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2014-1-20
在线时间
5 小时
发表于 2014-1-20 16:16:29 | 显示全部楼层 |阅读模式
#include "main.h"
#include "stm32f4_discovery.h"
#include "stm32f4xx_spi.h"


    uint8_t aTxBuffer[BUFFERSIZE] = "dkdkdl";
__IO uint8_t aRxBuffer [BUFFERSIZE];
__IO uint8_t ubRxIndex = 0;
__IO uint8_t ubTxIndex = 0;
__IO uint32_t TimeOut = 0;
SPI_InitTypeDef  SPI_InitStructure; 


 


void SPIx_Config(void) 
{     
    GPIO_InitTypeDef GPIO_InitStructure;

#ifdef SPI_MASTER
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); 
 SPI_Cmd(SPI1, DISABLE); 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
 GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1); 
GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1); 
GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
 SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;
 SPI_InitStructure.SPI_CPHA =SPI_CPHA_1Edge;           
 SPI_InitStructure.SPI_DataSize =SPI_DataSize_8b;      
 SPI_InitStructure.SPI_CPOL =SPI_CPOL_High;
 SPI_InitStructure.SPI_NSS =SPI_NSS_Soft;           
 SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_4 ;
 SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_MSB;      
 SPI_InitStructure.SPI_CRCPolynomial =7;           
    SPI_Init(SPI1,&SPI_InitStructure);  
    SPI_Cmd(SPI1, ENABLE);
#endif

#ifdef SPI_SLAVE

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);    
 SPI_Cmd(SPI2, DISABLE); 
 
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  
 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
 GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2); 
GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2); 
GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2); 
SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
 SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex;
 SPI_InitStructure.SPI_CPHA =SPI_CPHA_1Edge;           
 SPI_InitStructure.SPI_DataSize =SPI_DataSize_8b;      
 SPI_InitStructure.SPI_CPOL =SPI_CPOL_High;
 SPI_InitStructure.SPI_NSS =SPI_NSS_Soft;           
 SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_2 ;
 SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_MSB;      
 SPI_InitStructure.SPI_CRCPolynomial =7;           
    SPI_Init(SPI2,&SPI_InitStructure);  
    SPI_Cmd(SPI2, ENABLE);

#endif
 
}

int main(void)
 SPIx_Config();
ubTxIndex = 0;
ubRxIndex = 0;

/*
SPIx_Config();

ubTxIndex = 0;
ubRxIndex = 0;
SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);
SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_TXE, ENABLE);

 ubTxIndex = 0;
ubRxIndex = 0;
 SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE);
SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, ENABLE);
 SPI_Cmd(SPI2, ENABLE);*/
//SPI1->DR;
//SPI2->DR;
//while ((ubTxIndex < BUFFERSIZE) && (ubRxIndex < BUFFERSIZE))
#ifdef SPI_MASTER
    while ((ubTxIndex < BUFFERSIZE))
#endif

#ifdef SPI_SLAVE

    while ((ubRxIndex < BUFFERSIZE))
#endif
    {

#ifdef SPI_MASTER
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); 
SPI1->DR = aTxBuffer[ubTxIndex];
ubTxIndex++;
#endif

#ifdef SPI_SLAVE
while(SPI_I2S_GetFlagStatus(SPI2, SPI_FLAG_RXNE)==RESET); 
aRxBuffer[ubRxIndex] = SPI2->DR; 
ubRxIndex ++;
#endif
}
   
 //SPI_Cmd(SPI1, DISABLE);
//SPI_Cmd(SPI2, DISABLE);
 在一块STM32上SPI1传到SPI2上
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-1-20 17:26:23 | 显示全部楼层
回复【楼主位】nmsdclm:
---------------------------------
SPI_InitStructure.SPI_CPHA =SPI_CPHA_1Edge这句改成SPI_InitStructure.SPI_CPHA =SPI_CPHA_2Edge这样试下
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 22:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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