完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在搞STM32的SPI,想用24L01通信可是把SPI2换成SPI1后检测不到无线模块,程序是原来神州3号上面的,我给移植过来改了改
就是检测不到无线模块,现在用的STM32F107的板子,哪位大侠帮忙看看程序啊谢谢了 wuxaian.rar (9.4 MB ) |
|
相关推荐
27个回答
|
|
发烧友大侠帮忙看看啊谢谢了
|
|
|
|
你们的代码我对了差不多的,我又单步执行了下,发现在SPI1启动传输后开始进入检测那个函数,检测到的那神州3号板子和我这个板子区别在 u8 NRF24L01_Write_Buf(u8 regaddr, u8 *pBuf, u8 datalen) { u8 status,u8_ctr; Clr_NRF24L01_CSN; //使能SPI传输 status = SPI2_ReadWriteByte(regaddr); //发送寄存器值(位置),并读取状态值 for(u8_ctr=0; u8_ctr Set_NRF24L01_CSN; //关闭SPI传输 return status; //返回读到的状态值 } 运行到status = SPI2_ReadWriteByte(regaddr); 这个地方后,写入那个寄存器地址0X30后,神州3号SPI2返回的值是0x000E而我那个107的板子返回的值是0X001C的从这开始就不一样了 > |
|
|
|
哦哦,看看是不是SPI的初始化有问题.
|
|
|
|
|
|
|
|
论坛搜索.
|
|
|
|
|
|
|
|
原子哥,又出新问题了呀,就是设置成发送模式后程序死在等待发送完成那行,24L01一直没给发送完成中断信号,不知道哪出问题了 u8 NRF24L01_TxPacket(u8 *txbuf) { u8 state; Clr_NRF24L01_CE; NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节 Set_NRF24L01_CE; //启动发送 while(READ_NRF24L01_IRQ!=0); //等待发送完成 state=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值 NRF24L01_Write_Reg(SPI_WRITE_REG+STATUS,state); //清除TX_DS或MAX_RT中断标志 if(state&MAX_TX) //达到最大重发次数 { NRF24L01_Write_Reg(FLUSH_TX,0xff); |
|
|
|
|
|
|
|
原子大哥,我昨天那个不是收不到模块给回得中断嘛,但是我在TXMODE里面设了一个中断后,但不执行到 while(READ_NRF24L01_IRQ!=0); //等待发送完成 这个地方后,就会收到中断,在把原来设的中断取消也能通过这是怎么回事呢?还有一块103VCT6的板子,单步执行过去也收不到中断,到底是怎么回事啊,程序差不多一样的,还有103VCT6那块板子,在u8 NRF24L01_Check(void) { u8 check_in_buf[5]={0x11,0x22,0x33,0x44,0x55}; u8 check_out_buf[5]={0x00}; NRF24L01_Write_Buf(SPI_WRITE_REG+TX_ADDR, check_in_buf, 5); NRF24L01_Read_Buf(SPI_READ_REG+TX_ADDR, check_out_buf, 5); if((check_out_buf[0] == 0x11)&& (check_out_buf[1] == 0x22)&& (check_out_buf[2] == 0x33)&& (check_out_buf[3] == 0x44)&& (check_out_buf[4] == 0x55))return 0; else return 1; 在CHECK这个函数里面 NRF24L01_Read_Buf(SPI_READ_REG+TX_ADDR, check_out_buf, 5);之前加了个delay(1000),检测才通过要不然就检测不通过到底是咋回事啊真郁闷,原子大哥赐教啊 |
|
|
|
1,可能你的中断设置有问题.没有设置成功. 2,我们的是通过查询的方式来接收的. 3,NRF的检查都不通过,很可能就是你SPI设置有误. 参考下面的代码: //以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25X16/24L01/JF24C //SPI口初始化 //这里针是对SPI2的初始化 void SPIx_Init(void) { RCC->APB2ENR|=1<<3; //PORTB时钟使能 RCC->APB1ENR|=1<<14; //SPI2时钟使能 //这里只针对SPI口初始化 GPIOB->CRH&=0X000FFFFF; GPIOB->CRH|=0XBBB00000;//PB13/14/15复用 GPIOB->ODR|=0X7<<13; //PB13/14/15上拉 SPI2->CR1|=0<<10;//全双工模式 SPI2->CR1|=1<<9; //软件nss管理 SPI2->CR1|=1<<8; SPI2->CR1|=1<<2; //SPI主机 SPI2->CR1|=0<<11;//8bit数据格式 SPI2->CR1|=0<<1; //空闲模式下SCK为0 CPOL=1 SPI2->CR1|=0<<0; //数据采样从第二个时间边沿开始,CPHA=1 //对SPI2属于APB1的外设.时钟频率最大为36M. SPI2->CR1|=3<<3; //Fsck=Fpclk1/256 SPI2->CR1|=0<<7; //MSBfirst SPI2->CR1|=1<<6; //SPI设备使能 SPI2_ReadWriteByte(0xff);//启动传输 } |
|
|
|
|
|
|
|
|
|
|
|
原子哥,我发现我的无线模块检测不到的原因是u8 SPIx_ReadWriteByte(u8 TxData) { u8 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位 { retry++; if(retry>200)return 0; } SPI_I2S_SendData(SPI1, TxData); //通过外设SPIx发送一个数据 retry=0; while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200)return 0; } return SPI_I2S_ReceiveData(SPI1); //返回通过SPIx最近接收的数据 } 死在第二个while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200)return 0; } 这个检查指定的标志位设置与否这个地方,有的程序通过了,最后发送得时候,也是在这个地方出了问题结果发不出去,该怎么解决呢 谢谢 |
|
|
|
|
|
|
|
我也碰见同样的问题。
也是SPI2,一同样检测不到模块,同样会死在 while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET) //检查指定的SPI标志位设置与否:接受缓存非空标志位 { retry++; if(retry>200)return 0; } 到底咋办啊 |
|
|
|
这里不会导致死机啊,有容错处理。
|
|
|
|
你们的解决了吗???我也遇到这情况
|
|
|
|
|
|
|
|
我也是想把原子老师的战舰无线通信的代码移植到MINI32上的,然后根据MINI上的IO口都改过了,还是检测不到24L01,同样是check函数那里出问题,求解~
|
|
|
|
只有小组成员才能发言,加入小组>>
如何使用STM32+nrf24l01架构把有线USB设备无线化?
2543 浏览 7 评论
请问能利用51单片机和nRF24L01模块实现实时语音无线传输吗?
2331 浏览 5 评论
3156 浏览 3 评论
2801 浏览 8 评论
为什么ucosii上移植lwip后系统进入了HardFault_Handler?
2760 浏览 4 评论
请教各位大咖:有没有接收频率32M左右的芯片推荐的?先感谢啦!
608浏览 1评论
853浏览 0评论
966浏览 0评论
620浏览 0评论
447浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 00:38 , Processed in 1.484419 second(s), Total 113, Slave 96 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号