NF24L01一对一互传

查了很对想要实现一对一互传,实际都是使用接收发送模式不断的切换来实现的;本例程使用的是STM32F103C8T6的板子,SPI接口使用的SPI2,SPI_NSS是靠引脚上下拉(hal_gpio_write())控制,本来以为Cubemx选择了引脚SPI_NSS输出,hal库的SPI会自动拉高拉低NSS引脚,发现不能自动拉,也没有仔细去查芯片的数据手册看原因,就直接定义为普通引脚上下拉控制。

使用FREERTOS,单开一个线程接收与发送,一个做为主发送,另一个做主接收,所以循环中,当主发送端长时间接收不到数据会进入发送模式;同理,主接收端在长时间发送失败时会进入接收模式;这样会避免两个设备因时序不同导致进入死循环无法相互通讯;

发送与接收放在同一个线程中,主发送或主接收的自行注释即可,线程进入循环前有一个USB初始化,因为本人调试过程是使用USB输出打印,大家也可以改为其他方式输出打印信息;
关于NRF24L01工作流程及配置可参考https://blog.csdn.net/m0_37968313/article/details/98219062

void StartDefaultTask(void const * argument)
{
    /* init code for USB_DEVICE */
    MX_USB_DEVICE_Init();     //调试过程中使用USB输出打印
    /* USER CODE BEGIN StartDefaultTask */
    /* Infinite loop */
//接收模式
//    uint8_t flag=0X20;
//    uint32_t time_out=0;
//    for(;;)
//    {
//        NF24G_init(0);
//        time_out=0;
//        while(flag != 0x20)
//        {
//            flag = NF24G_TxPack(version,sizeof (version));
//            if(time_out >= 40) flag = 0x20;
//            osDelay(1);
//            time_out ++;
//        }
//        NF24G_init(1);
//        while(flag == 0x20)
//        {
//            if(NF24G_RxPack(NF_RxPack))
//            {
//                flag = 0;
//                usbvcom_printf("\r\n Rx_mode Rxpack =%s",NF_RxPack);
//            }
//            osDelay(1);
//        }
//    }

//发送模式
    uint8_t flag=0;
    uint32_t time_out=0;
    for(;;)
    {
        NF24G_init(0);
        while(flag != 0x20)
        {
            flag = NF24G_TxPack(version,sizeof (version));
            osDelay(1);
        }
        NF24G_init(1);
        while(flag == 0x20)
        {
            if((NF24G_RxPack(NF_RxPack))||(time_out>=20))
            {
                time_out =0;
                flag = 0;
                usbvcom_printf("\r\n Tx_mode Rxpack =%s",NF_RxPack);
            }
            osDelay(1);
            time_out ++;
        }
    }
    /* USER CODE END StartDefaultTask */
}

过程已附上,需要可自行下载 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值