这几天在调试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--); }; } |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
RE:关于STM32F4 SPI1与SPI2通信问题
回复:关于STM32F4 SPI1与SPI2通信问题
The slave clock does not need to be set.初始化SPI2的时候,用2分频默认初
哦,好的~~
回复:关于STM32F4 SPI1与SPI2通信问题
SPI_SendData(SPI1,0x55);
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE)==RESET);
data=SPI_ReceiveData(SPI2);
解决了么? 同问