3101|0

492

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【R7F0C809】第十四篇--项目第三阶段编码实现之无线模块 [复制链接]

      功能说明
连接说明:其中一个S3C2440作为与上位机(PC)的连接工具,另外一个S3C2440作为网关模块与R7F0C809连接,无线模块也连接在mini2440的网关模块上。
功能:实现两个S3C2440开发板之间进行数据通讯,采用半双工通讯方式,最后要求下位机的签到、新指纹录入、删除原有指纹信息等功能能够传递给上位机,而上位机也可以直接操作下位机删除或者添加新用户。
性能:发送误码率小于5%,传输时延小于1秒。
设计说明
当数据发送后,PC机回显要发送的数据,同时接收方也通过串口将接受到的数据打印到PC机上显示。
实现此程序功能的算法为使用SIP协议配置下的NRF24L01发射模式
void TX_Mode(INT8U *BUF)以及接收模式void RX_Mode(void)。

5原代码清单
void TX_Mode(INT8U *BUF)
{
           unsigned char temp;

         CE_L;
     SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//设置发送地址
         SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//接收地址与接收端的发送地址一样
         SPI_Write_Buf(WR_TX_PLOAD,BUF,5);
       
         do{
           SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//使能自动应答功能
           temp=SPI_Read(READ_REG+EN_AA);
         }
         while(temp!=0x01);
         temp=0;
       
         do{
          SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//接收地址允许
          temp=SPI_Read(READ_REG+EN_RXADDR);
         }while(temp!=0x01);
         temp=0;
       
         do{
          SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);//设置地址宽度为5字节宽度
          temp=SPI_Read(READ_REG+SETUP_AW);
         }while(temp!=0x03);
         temp=0;
       
         do{
         SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x0a);  //建立自动重发:等待500us,自动重发十次
          temp=SPI_Read(READ_REG+SETUP_RETR);
         }while(temp!=0x0a);
         temp=0;
       
         do{
          SPI_RW_Reg(WRITE_REG+RF_CH,0x40);      //射频通道设置
          temp=SPI_Read(READ_REG+RF_CH);
         }while(temp!=0x40);
         temp=0;
       
         do{
          SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//数据传输率1Mbps,发射功率0dBm,低噪声放大增益
          temp=SPI_Read(READ_REG+RF_SETUP);
         }while(temp!=0x07);
        temp=0;
       
        do{
           SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);
           temp=SPI_Read(READ_REG+CONFIG);
         }while(temp!=0x0e);
       
        CE_H;
        Delay(100);
          
}




/**************************************************
函数:RX_Mode()

描述:
    这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
/**************************************************/
void RX_Mode(void)
{
    unsigned char temp;
        CE_L;
           
           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);

         temp=0;
         do{
          SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//数据通道0允许自动应答
          temp=SPI_Read(READ_REG+EN_AA);
         }while(temp!=0x01);
         SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);
         temp=0;
         do{
         SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收地址:接收通道0允许
         temp=SPI_Read(READ_REG+EN_RXADDR);
         }while(temp!=0x01);
          temp=0;
         do{
          SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);//设置地址宽度为5字节宽度
          temp=SPI_Read(READ_REG+SETUP_AW);
         }while(temp!=0x03);
         temp=0;
         do{
          SPI_RW_Reg(WRITE_REG+RF_CH, 0x40);//选择频道为40
          temp=SPI_Read(READ_REG+RF_CH);
         }while(temp!= 0x40);
         temp=0;
         do{
          SPI_RW_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//有效数据宽度设置
          temp=SPI_Read(READ_REG+RX_PW_P0);
         }while(temp!=5);
         temp=0;
          do{
          SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
          temp=SPI_Read(READ_REG+RF_SETUP);
         }while(temp!=0x07);
         temp=0;
         do{
          SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);
          temp=SPI_Read(READ_REG+CONFIG);
         }while(temp!=0x0f);
          CE_H;
          Delay(100);                    // 拉高CE启动接收设备
}

测试说明




点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表