|
本帖最后由 SUPER_CRJ 于 2021-2-18 22:07 编辑
裂开了。。
功率一共7档,在最低的两个档都能正常通信(大约1000包不丢包)。
具体调试为:主机发送数据显示:达到最大重发中断。从机接收不到数据。
但是:一旦到了3档,几个包都通信不了。因为知道功率大了会堵塞,所以加大了距离。本来不到1m的距离,我加大到十几米都不行。
仔细对照了手册和代码,确定只改变了RF_SETUP里面的RF_PWR寄存器。
现在严重怀疑:是不是射频参数方面的问题。比如PCB没有布线好,没有阻抗匹配什么的。
惟一的表象就是:功率增大一点。就通信丢包严重。软件等配置代码已检查2天,问题不大!
使用的是:国产替代型号SI24R1+AT24C01的模块。
代码如下:
仅仅把:参数:wirelessPowerLev 从1提升到2就造成了以上情况!
- void NRF24L01Init( u8 txOrRxMode,u8* txAddr,u8* rxAddr,u8 speedCfg,u8 wirelessPowerLev, u8 nrfFrequeShift )
- {
- { // 增加两个引脚配置:IRQ(输入模式) 与 CE(输出模式)
- RCC->AHBENR.GPIOBClockEnable_RW = 1;
- GPIOB->MODER.ModeCFG1_RW = GPIO_MODER_INPUT;
- GPIOB->PUPDR.PullUpDownCFG1_RW = GPIO_PUPDR_PULL_UP; // 一个问题:自带的电阻电阻太大,会不会影响最后的波形!
-
- RCC->AHBENR.GPIOFClockEnable_RW = 1;
- GPIOF->MODER.ModeCFG0_RW = GPIO_MODER_GENERAL_PURPOSE_OUTPUT;
- GPIOF->OTYPER.OutputType0_RW = GPIO_OTYPER_OUTPUT_PUSH_PULL;
- GPIOF->OSPEEDR.OutputSpeed0_RW = GPIO_OSPEEDR_HIGH_SPEED;
- GPIOF->PUPDR.PullUpDownCFG0_RW = GPIO_PUPDR_PULL_UP;
- NRF24L01_CE = 0; // CE要设置为0:表示为待机模式。此时可以通过SPI读写寄存器。
- }
- {
- while(timeDelay( 200,0)){}; timeDelay(0,1); // 延时100MS,稳定设备。
- SPI_Init();
- nrfCheck();
- if( sysComStatus.nrfTestOK == 0 ){ // 表示NRF出问题,则下面不需要操作。
- return;
- }
- else{ // 表示SPI已测试出来。可以进行NRF内部的配置。
- nrfZreoCommand(FLUSH_TX);
- nrfZreoCommand(FLUSH_RX);
- nrfWriteReg(NRF_WRITE_REG|STATUS,RX_OK|TX_OK|MAX_TX); // 清除所有错误模式
-
- nrfWriteReg(NRF_WRITE_REG | EN_AA, 0x01); // 使能通道0自动确认
- nrfWriteReg(NRF_WRITE_REG | EN_RXADDR, 0x01); // 使能通道0地址
- nrfWriteReg(NRF_WRITE_REG | SETUP_AW, 0x03); // 地址宽度:5字节
- nrfWriteReg(NRF_WRITE_REG | SETUP_RETR, 0xFF); // 采用最大延时,最大重发次数
-
- {
- if( nrfFrequeShift <= 125 ){
- nrfWriteReg(NRF_WRITE_REG | RF_CH,nrfFrequeShift);
- }
- else{
- nrfWriteReg(NRF_WRITE_REG | RF_CH,100); // 2400+100 = 2500MHZ
- }
- }
- { // 配置速度与功率,功率采用最大值:111:7dBm (注意:发现无线芯片的功率特别大,用662K已不能满足了。)
- // 已确定采用泽耀的国产芯片,注意功率。
- if( speedCfg == 1 ){ // 1M速率 - 最大发射功率
- nrfWriteReg( NRF_WRITE_REG | RF_SETUP ,0x00 + wirelessPowerLev );
- }
- else if( speedCfg == 2 ){ // 2M速率 - 最大发射功率
- nrfWriteReg( NRF_WRITE_REG | RF_SETUP ,0x08 + wirelessPowerLev );
- }
- else{ // 250K速率 - 最大发射功率
- nrfWriteReg( NRF_WRITE_REG | RF_SETUP ,0x20 + wirelessPowerLev );
- }
- }
- { //
- nrfWriteBuf( NRF_WRITE_REG | RX_ADDR_P0, nrfAddrP0,5); // 设置5字节地址。
- nrfWriteBuf( NRF_WRITE_REG | TX_ADDR,nrfAddrP0,5);
- nrfWriteReg( NRF_WRITE_REG | RX_PW_P0, 32); // P0管道定长:32字节。
- }
- { // 使能动态数据和带数据反馈ACK
- nrfWriteReg( NRF_WRITE_REG | DYNPD,0x01);
- nrfWriteReg( NRF_WRITE_REG | FEATURE,0x06);
- }
-
- if( txOrRxMode == 0 ){ // 发送模式
- // 注意:中文版本的SRI24R1手册关于发送与接收位写错了。。。
- nrfWriteReg(NRF_WRITE_REG | CONFIG, 0x0E); // CRC16,可能会稍微降低运算时间
- }
- else{
- nrfWriteReg(NRF_WRITE_REG | CONFIG, 0x0F); // CRC16
- }
- }
- }
- if( txOrRxMode == 1){
- NRF24L01_CE = 1; // 保持在接收模式
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|