完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我现在在用一个STM32F407做SPI通讯实验,想用一块板子的SPI1和SPI2之间进行通讯,SPI2为主模式,SPI1为从模式,
但是运行起来后。用keil调试到while{}中的while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE));一直在循环而且上一步的SPI2->DR中没有付到值。 程序如下:哪位大神帮我看看啊 #include int main (void) { GPIO_InitTypeDef GPIO_InitTypestruct; SPI_InitTypeDef SPI_InitTypeDefstruct; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); SPI_I2S_DeInit(SPI2); GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD); //设置普通GPIO口 GPIO_InitTypestruct.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitTypestruct.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitTypestruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitTypestruct.GPIO_OType=GPIO_OType_PP; GPIO_InitTypestruct.GPIO_PuPd=GPIO_PuPd_UP; GPIO_Init(GPIOD,&GPIO_InitTypestruct); //设置SPI2的映射 GPIO_InitTypestruct.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; GPIO_InitTypestruct.GPIO_Mode=GPIO_Mode_AF; GPIO_InitTypestruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitTypestruct.GPIO_OType=GPIO_OType_PP; GPIO_Init(GPIOB,&GPIO_InitTypestruct); GPIO_PinAFConfig(GPIOB,GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15,GPIO_AF_SPI2); //下边的程序是设置SPI1的映射 GPIO_InitTypestruct.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_Init(GPIOA,&GPIO_InitTypestruct); GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_SPI1); SPI_InitTypeDefstruct.SPI_Direction=SPI_Direction_2Lines_FullDuplex; SPI_InitTypeDefstruct.SPI_Mode=SPI_Mode_Master; SPI_InitTypeDefstruct.SPI_DataSize=SPI_DataSize_8b; SPI_InitTypeDefstruct.SPI_CPOL=SPI_CPOL_Low; SPI_InitTypeDefstruct.SPI_CPHA=SPI_CPHA_2Edge; SPI_InitTypeDefstruct.SPI_NSS=SPI_NSS_Soft; SPI_InitTypeDefstruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256; SPI_InitTypeDefstruct.SPI_FirstBit=SPI_FirstBit_MSB; SPI_InitTypeDefstruct.SPI_CRCPolynomial=7; SPI_Init(SPI2,&SPI_InitTypeDefstruct); SPI_Cmd(SPI2,ENABLE); SPI_InitTypeDefstruct.SPI_Direction=SPI_Direction_2Lines_FullDuplex; SPI_InitTypeDefstruct.SPI_Mode=SPI_Mode_Slave; SPI_InitTypeDefstruct.SPI_DataSize=SPI_DataSize_8b; SPI_InitTypeDefstruct.SPI_CPOL=SPI_CPOL_Low; SPI_InitTypeDefstruct.SPI_CPHA=SPI_CPHA_2Edge; SPI_InitTypeDefstruct.SPI_NSS=SPI_NSS_Soft; SPI_InitTypeDefstruct.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256; SPI_InitTypeDefstruct.SPI_FirstBit=SPI_FirstBit_MSB; SPI_InitTypeDefstruct.SPI_CRCPolynomial=7; SPI_Init(SPI1,&SPI_InitTypeDefstruct); SPI_Cmd(SPI1,ENABLE); while(1) { u32 temp=0; while(!SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)); SPI_I2S_SendData(SPI2,1);//发送数据“1”. while(!SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)); if(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_BSY)==0) temp=SPI_I2S_ReceiveData(SPI1); GPIOD->BSRRL =temp<<13; //接收到数据后控制一个灯亮。 } } |
|
相关推荐
8个回答
|
|
哪位大神帮帮忙啊!!!
|
|
|
|
没人回答吗? 自己顶一下。
|
|
|
|
不懂 只想拿分。。。。。。。
|
|
|
|
楼主,问题解决了吗?我也遇到相同问题了,用spi1读取flash的时候。。。。。。
|
|
|
|
|
|
|
|
|
|
|
|
请问是怎么解决问题的呀?求指导啊
|
|
|
|
GPIO_PinAFConfig(GPIOB,GPIO_PinSource13|GPIO_PinSource14|GPIO_PinSource15,GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7,GPIO_AF_SPI1); 这两条应该不能这么写,每个Pin应该单独写。可以试试看 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11767 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 16:34 , Processed in 0.544612 second(s), Total 51, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号