你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32F4 SPI1与SPI2通信问题

[复制链接]
lovelifett 提问时间:2014-1-22 16:21 /
这几天在调试STM32F4的SPI,通过自发自收测试代码,发现一个问题,就是当SPI1主发送时,波特率必须设为二分频,SPI2才能收到数据,若设为4分频或8分频,程序开在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET); 循环里,不知为什么?
以下是全部代码
#include"stm32F4xx.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void SPI_Configuration(void);
void Delay(int nCount);
int main(void)
{  RCC_Configuration();
  GPIO_Configuration();
  SPI_Configuration();
 while(1)
 { int data=0;
  SPI_SendData(SPI1,0x55);
  while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
  data=SPI_ReceiveData(SPI2);
  if(data==0x55)
     {  while(1)
             {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
                Delay(0xfffff);
                GPIO_ResetBits(GPIOA,GPIO_Pin_4);
                Delay(0xfffff);
  
             };
     }
     else while(1)
            {   GPIO_SetBits(GPIOA,GPIO_Pin_4);
               //Delay(0xfffff);
               //GPIO_ResetBits(GPIOA,GPIO_Pin_5);
               //Delay(0xfffff);
  
            };
 }
}
void RCC_Configuration()
{  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB, ENABLE);  
}
void GPIO_Configuration()
{  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA,&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIO_Init(GPIOB,&GPIO_InitStructure);
}
void SPI_Configuration()
{  SPI_InitTypeDef SPI_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);
   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_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
   SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
   SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
  SPI_Init(SPI1, &SPI_InitStructure);
  SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
   SPI_Init(SPI2, &SPI_InitStructure);
   SPI_Cmd(SPI1,ENABLE);
   SPI_Cmd(SPI2,ENABLE); 
}
void Delay(int nCount)
{ int c1=nCount;
 int c2=nCount;
 for(;c1>0;c1--)
  {
  for(;c2>0;c2--);
 };
}
收藏 评论5 发布时间:2014-1-22 16:21

举报

5个回答
废鱼 回答时间:2014-1-23 10:43:31

RE:关于STM32F4 SPI1与SPI2通信问题

The slave clock does not need to be set.初始化SPI2的时候,用2分频默认初始化就可以了。
lovelifett 回答时间:2014-1-23 12:43:04

回复:关于STM32F4 SPI1与SPI2通信问题

回复第 2 楼 于2014-01-23 10:43:31发表:
The slave clock does not need to be set.初始化SPI2的时候,用2分频默认初
哦,好的~~
zly 回答时间:2014-5-12 17:41:17

回复:关于STM32F4 SPI1与SPI2通信问题

楼主后来在同一块板子上SPI1与SPI2通信成功了吗?为什么我的程序只要先用SPI1发送就会卡在while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);没办法读到SPI2的值?
SPI_SendData(SPI1,0x55);
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
data=SPI_ReceiveData(SPI2);
星火007 回答时间:2016-8-2 17:17:52
zly 发表于 2014-5-12 17:41
楼主后来在同一块板子上SPI1与SPI2通信成功了吗?为什么我的程序只要先用SPI1发送就会卡在while(SPI_GetFla ...

解决了么?  同问
HenryChen 回答时间:2016-11-9 17:14:53
解决了么?  同问
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版