查看: 2667|回复: 0

[原创] [我为LPC代言]利用LPC824驱动nRF24L01+实现无线通信

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-18 20:00
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    17

    主题

    262

    帖子

    0

    高级会员

    Rank: 4

    积分
    533
    最后登录
    2024-11-23
    发表于 2016-12-20 23:10:21 | 显示全部楼层 |阅读模式
    利用LPC824驱动nRF24L01+实现无线通信
    nRF24L01+是由NORDIC生产的工作在2.4GHz~2.5GHz的ISM 频段的单片无线收发器芯片。可以应用在如下领域:无线鼠标 键盘 游戏机操纵杆
    ● 无线门禁
    ● 无线数据通讯
    ● 安防系统
    ● 遥控装置
    ● 遥感勘测
    ● 智能运动设备
    ● 工业传感器
    ● 玩具

    我们可以利用它来实现近距离的无线控制与传输。nRF24L01+引脚说明如下:
    1GND 2VCC
    3CE 4CSN
    5SCK 6MOSI
    7MISO 8IRQ

    知道了nRF24L01+的引脚就是给它分配引脚了


    /***************************************************************************************/
    //              GND                    地
    //              VCC                  3.3电源
    //              MISO                  P0_24 LPC824设置为输入
    //              CE                        P0_8        //使能
    //              SCK                  P0_26  //SPI时钟
    //              MOSI                   P0_15        //数字输入
    //              CSN                   P0_27    //片选信号
    //                             IRQ                   P0_9          //LPC824设置为输入
    /***************************************************************************************/
    可以看到,这里使用的模拟SPI,其中MISO与IRQ引脚设置的都是输入,其他的是输出。程序如下:
    1. #define nRF24L01_CSN_Clr()  Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 27, 0)           //0
    2. #define nRF24L01_CSN_Set()  Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 27, 1);                //1

    3. #define nRF24L01_CE_Clr() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 26, 0)           //0
    4. #define nRF24L01_CE_Set() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 26, 1)                //1

    5. //#define nRF24L01_IRQ_Clr() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 15, 0)                   //0
    6. //#define nRF24L01_IRQ_Set() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 15, 1)                //1

    7. #define nRF24L01_SCK_Clr() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 24, 0)           //0
    8. #define nRF24L01_SCK_Set() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 24, 1)                //1

    9. #define nRF24L01_MOSI_Clr() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 8, 0)           //0
    10. #define nRF24L01_MOSI_Set() Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 8, 1)                //1
    复制代码
    引脚初始化:
    1. void nRF24L01_PIN_Init(void)
    2. {
    3.         Chip_GPIO_Init(LPC_GPIO_PORT);                     
    4.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 24, 0);         //ÉèÖÃΪÊäÈë  MISO
    5.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 8, 1);          //ÉèÖÃΪÊä³ö
    6.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 26, 1);          //ÉèÖÃΪÊä³ö
    7.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 15, 1);          //ÉèÖÃΪÊä³ö
    8.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 27, 1);          //ÉèÖÃΪÊä³ö
    9.         Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 9, 1);          //ÉèÖÃΪÊäÈë  IRQ
    10. }
    复制代码
    接下来就是修改网上找到的程序中需要修改的地方,待会会贴出源代码,这里就不叙述了。
    nRF24L01是需要两个通信的,我这里只有一个LPC824,所示,另一半用的是LPC1114来写的程序,但是与平台没有关系,只要通信两个模块的地址一样就行。
    LPC1114这里就不叙述了,我直接给出源代码。LPC824作为发送端,LPC1114作为接收,并通过串口与计算机通信,将接收到的数据发送给上位机,这里用串口助手替代。源程序与结果图如下:


    源程序:


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 18:10 , Processed in 0.081780 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表