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

关于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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版