完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
下面使用到的函数,不清楚是不是PB12复用这里没有处理好。
如果我把 “while(font_init()) //检查字库” 这里注释"NRF24L01 OK!"。 但是‘W25QXX’与‘NRF24L01’整起来,无线模块就无法应答。各位大神,这个该怎么解决,谢谢! #define W25QXX_CS PBout(12) //W25QXX的片选信号 //24L01操作线 #define NRF24L01_CE PGout(8) //24L01片选信号 #define NRF24L01_CSN PGout(7) //SPI片选信号 #define NRF24L01_IRQ PGin(6) //IRQ主机数据输入 //初始化SPI FLASH的IO口 void W25QXX_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );//PORTB时钟使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // PB12 推挽 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_12); W25QXX_CS=1; //SPI FLASH不选中 SPI2_Init(); //初始化SPI SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//设置为18M时钟,高速模式 W25QXX_TYPE=W25QXX_ReadID();//读取FLASH ID. } //初始化24L01的IO口 void NRF24L01_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOG, ENABLE); //使能PB,G端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PB12上拉 防止W25X的干扰 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化指定IO GPIO_SetBits(GPIOB,GPIO_Pin_12);//上拉 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8; //PG8 7 推挽 GPIO_Init(GPIOG, &GPIO_InitStructure);//初始化指定IO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PG6 输入 GPIO_Init(GPIOG, &GPIO_InitStructure); GPIO_ResetBits(GPIOG,GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8);//PG6,7,8上拉 SPI2_Init(); //初始化SPI SPI_Cmd(SPI2, DISABLE); // SPI外设不使能 SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI设置为双线双向全双工 SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //SPI主机 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //发送接收8位帧结构 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //时钟悬空低 SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //数据捕获于第1个时钟沿 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由软件控制 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; //定义波特率预分频的值:波特率预分频值为16 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB位开始 SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式 SPI_Init(SPI2, &SPI_InitStructure); //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器 SPI_Cmd(SPI2, ENABLE); //使能SPI外设 NRF24L01_CE=0; //使能24L01 NRF24L01_CSN=1; //SPI片选取消 } while(font_init()) //检查字库 { LCD_Clear(WHITE); //清屏 while(SD_Init()) //检测SD卡 { LCD_ShowString(30,70,200,16,16,"SD Card Failed!"); delay_ms(200); LCD_Fill(30,70,200+30,70+16,WHITE); delay_ms(200); } delay_ms(1000); LCD_Clear(WHITE);//清屏 } //初始化字体 //返回值:0,字库完好. // 其他,字库丢失 u8 font_init(void) { u8 t=0; W25QXX_Init(); while(t<10)//连续读取10次,都是错误,说明确实是有问题,得更新字库了 { t++; W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据 if(ftinfo.fontok==0XAA)break; delay_ms(20); } if(ftinfo.fontok!=0XAA)return 1; return 0; } { while(NRF24L01_Check()) { LCD_ShowString(40,372,200,16,24,"NRF24L01 Error!"); delay_ms(200); LCD_Fill(40,372,239,130+16,WHITE); delay_ms(200); } LCD_ShowString(40,372,200,16,24,"NRF24L01 OK!"); } |
|
相关推荐
4个回答
|
|
自己给自己顶下,原子哥,这一个可以怎么解决啊,求帮助。
|
|
|
|
请问你解决了吗 我也遇到这种问题
|
|
|
|
够乱。。
|
|
|
|
一年多了,这个帖子,请问LZ怎么解决的
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2535 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2320 浏览 5 评论
3128 浏览 3 评论
2790 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2748 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
589浏览 1评论
842浏览 0评论
949浏览 0评论
604浏览 0评论
426浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-13 05:03 , Processed in 0.526364 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号