关于nrf24l01无法通行问题 10C

在配置STM32F103C8T6 +nrf2401问题时,SPI读写功能没问题,即nrf2401 check成功。
我配置发送端关闭自动应答:SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0

发送完成后,读取status寄存器内容为0x2e, fifostatus寄存器内容为0x11,即表示发送模块成功发送。
我配置接收端关闭ACK: SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0,在上述发送端一直工作前提下接收端不能接收数据,查看
接收端status寄存器内容为:0x0e,表示接收端未收到数据。
我猜想不能通行原因是通道、地址、频率、模式不正确,但仔细检查发送、接收端上述配置完全一样。现在不知道问题出在哪里了,请各位帮我看看。

uint8_t NRF24L01_Check(void)
{
uint8_t buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
uint8_t i;

SPI_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//

SPI_Read_Buf(TX_ADDR,buf,5);

for(i=0;i<5;i++)if(buf[i]!=0XA5)break;

if(i!=5)return 1;
return 0;

}

void TX_Mode(void)

{

NRF24L01_SCK_L;
NRF24L01_CE_L;
SPI_Write_Buf(NRF_WRITE_REG + TX_ADDR, (u8*)TX_ADDRESS, 5);

SPI_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, (u8*)TX_ADDRESS, 5);
SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00); // Enable Auto.Ack:Pipe0
SPI_RW_Reg(NRF_WRITE_REG + EN_RXADDR, 0x00); // Enable Pipe0
SPI_RW_Reg(NRF_WRITE_REG + SETUP_RETR, 0x00);
SPI_RW_Reg(NRF_WRITE_REG + SETUP_AW, 0x03);

SPI_RW_Reg(NRF_WRITE_REG + RF_CH, 40);

SPI_RW_Reg(NRF_WRITE_REG + RF_SETUP, 0x0F);

SPI_RW_Reg(NRF_WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);
SPI_RW_Reg(NRF_WRITE_REG + CONFIG, 0x0e);

NRF24L01_CE_H;
delay_us(150);
}

void RX_Mode(void)

{

NRF24L01_SCK_L;
NRF24L01_CE_L;
SPI_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, (u8*)TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device

    SPI_RW_Reg(NRF_WRITE_REG + EN_AA, 0x00);      // Enable Auto.Ack:Pipe0
    SPI_RW_Reg(NRF_WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  SPI_RW_Reg(NRF_WRITE_REG + SETUP_AW, 0x03);  // 
    SPI_RW_Reg(NRF_WRITE_REG + RF_CH, 40);        // Select RF channel 40 
    SPI_RW_Reg(NRF_WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); 
    SPI_RW_Reg(NRF_WRITE_REG + RF_SETUP, 0x0f);   
    SPI_RW_Reg(NRF_WRITE_REG + CONFIG, 0x0f);    

    NRF24L01_CE_H; // 
    delay_us(150);  

}

u8 NRF24L01_RxPacket(u8 *rx_buf)

{

int16_t sta,fifosta,tt=0;
sta=SPI_Read_Reg(STATUS);

fifosta=SPI_Read_Reg(FIFO_STATUS);
if(!( NRF24L01_IRQ))
{
sta=SPI_Read_Reg(STATUS);

if(sta&RX_OK)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);
SPI_RW_Reg(FLUSH_RX,0xff);
SPI_RW_Reg(NRF_WRITE_REG+STATUS,0x7f);
tt=1;

    }
}
return (tt);                                    

}
u8 NRF24L01_TxPacket(u8 *txbuf)
{

uint8_t sta,fifosta,cd;
NRF24L01_CE_L;

    SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);
  sta = SPI_Read_Reg(STATUS); 
    fifosta = SPI_Read_Reg(FIFO_STATUS);
    NRF24L01_CE_H;//       
    while(NRF24L01_IRQ!=0);//
    sta=SPI_Read_Reg(STATUS);  //
  fifosta = SPI_Read_Reg(FIFO_STATUS);
cd=SPI_Read_Reg(0x09); 

    SPI_RW_Reg(NRF_WRITE_REG+STATUS,sta); 
    if(sta&MAX_TX)//
    {
            SPI_RW_Reg(FLUSH_TX,0xff);//
            return MAX_TX; 
    }
    if(sta&TX_OK)
    {   
         ;
         return 0x01;        
    }

    return 0xff;//

}

1个回答

stm32使用的开发板吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于nRF24L01地址问题
关于nRF24L01地址设置的问题
stm32上NRF24L01无法通信的问题。。
之前早就用过这个模块, 但是最近用的时候,反复的调,,就是不能通信,,调了两天,终于调出来了,, 找到了问题所在。。。。 在stm32上面驱动NRF24L01,,需要初始化IO口,初始化SPI,配置NRF的寄存器,配置发送接收模式,最后调用发包收包函数就行了。 假如SPI的速度太快,,会导致NRF不正常,,无法读写寄存器。。 当程序下载到stm32上后,按复位键的次数
请教关于线程以及进程通行问题
我要设计一个服务器,在linux平台下运作,大致设想是这样的rn 开三个线程,其中:rn 利用socket开两个线程,一个线程用于接收消息,另一个线程用于发送处理后的消息。此外开一个线程用于处理接收到的消息。rn 创建两个队列rn 消息接收到后先放到待处理消息队列当中,处理函数会从中读取消息然后进行相应操作。处理好的消息再放到待发送队列中,由发送函数来处理发送。rnrn 问题:rn linux中的消息队列说是进程指间的通讯,我这样的设计合理吗?会不会出现什么问题咧?rn 对于接收到的消息的存储时使用消息队列好还是使用linux的链表来实现好咧?rn rn 谢谢!
关于使用API实现串口通行的问题?
各位网友,这是我在PB中使用API申明的函数,但在以下这几个函数中会出现的问题,系统并不认识COMMPROP、DCB、COMMTIMEOUTS 这种类型。rn在下并不熟悉PB中使用API的方法,请高手指点。rn如有现成的程序能否给在下发一个过来,swordmanli@163.net,非常感谢!rnrn//Function Boolean GetCommProperties(ulong hFile,&rn//ref COMMPROP lpCommProp ) Library "Kernel32.dll"rnrn//Function Boolean BuildCommDCBA(ref string lpDef,&rn//ref DCB lpDCB ) Library "Kernel32.dll"rnrn//Function Boolean SetCommState(ulong hCommDev,&rn//ref DCB lpdcb ) Library "Kernel32.dll"rnrn//Function Boolean GetCommState(ulong hCommDev,&rn//ref DCB lpdcb ) Library "Kernel32.dll"rnrn//Function Boolean SetCommTimeouts(ulong hCommDev,&rn//ref COMMTIMEOUTS lpctmo ) Library "Kernel32.dll"rn
nrf24l01
nrf24l01; 51单片机控制nRF24L01收发数据程序.docx
串口通行中的同步问题
如何来实现串口通信的同步,比如我发了个命令,然后要求下面的单片机发回来所采集到的数据,然后我再向单片机发命令,再接受单片机的返回 ,rn1:sendorder()rn2:receive()rn3:sendorder()rn4:receive()rn怎么实现啊,我现在用的MSComm控件,使用OnComm事件的话,无法保证在发送命令给单片机之前收到数据,就是说可能2还没有执行,3就执行了,会不会出现这种情况啊,该怎么解决呢。rn还有一个问题就是我想2后判断是否在1秒内收到了数据,怎么实现呢,用SLEEP吗?
关于2.4G无线模块NRF24L01的使用问题
我用了两块STM32的开发板,一块用于收,一块用于发,板上都有无线模块的插口,直接使用插口是能够实现通讯的,然后我试了下用杜邦线把无线模块和芯片引脚相连发现就出问题了,而且是连无线模块都检测不到,是不是用杜邦线连会不稳定呢?求问大神
关于 NRF24L01 多发一收的问题 请教
最近准备做一个项目,涉及到NRF24L01 多发一收。rn发送端,低功耗,定时唤醒,发送。rn接收端,始终接收,并且显示。rn现在有个问题不清楚:rn1、假如同时多个发送端发送,会不会丢包?如果丢包,该怎么解决丢包问题呢?rn2、接收端是怎么区分收到的数据来自哪个模块rn3、其他模块如果对该频段有干扰,该怎么办呢rn求大神们指点。。。
NRF24l01关于发送本地地址、接收地址的问题
大家好,我想问一下,在NRF24l01的通信中发送端装载接收地址是什么意思,还有本地地址?请问这些地址该怎么理解?在一对多的发送中,通过什么来保证配对?是接收地址吗?那个详细的说明书可以发我一份吗??非常感谢!!跪求!!liuman198826@163.com
NRF24L01编程,nrf24l01中文资料
这是我网上找的希望对你们有用,这些资料非常有用,肯定会对NRF24L01的爱好者有帮助!
nrf24l01模块相关问题
nrf模块和外部的芯片时钟有影响吗?
NRF24L01接收问题
在对nrf24l01编程时,如果将RX_mode();函数(即打开接收函数)在while(1)中调用,那么将会很难接收到数据,甚至接收不到,通过测试找到原因:如果每秒钟发送一包数据,然后在发送完成后打开接收,这样可以很好的接收到数据。分析原因:如果在while(1)中一直调用打开接收的话,那么将会一直处于正在打开状态。所以很难接收到数据,如果只在需要的时候打开一次,就没有问题。打开之后就不需要再次...
linux下的nRF24L01驱动问题
无线nRF24L01模块(一个设为发送模块,一个设为接收模块)在单片机上能一对一的进行通信(简单的发送数据),而后我们改成linux字符设备驱动,采用io口模拟spi通信,在单独一个模块内,读写函数都能正常读写出来,但模块间就无法通信了。rn附上读写函数:rn//发送 datarnstatic ssize_t nrf_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)rnrn if( copy_from_user(&TxBuf, buf, count ) ) //从内核空间复制到用户空间 完全复制成功 返回0rn rn printk(KERN_WARNING"Can’t Send Data !\n"); rn return -EFAULT;rn rn printk(KERN_WARNING"nrf_write! \n");rn SPI_RW_Reg(WRITE_REG+STATUS,0XFF);//NRF24L01读写寄存器函数 STATUS 0x07状态寄存器rn nRF24L01_TxPacket(buf); rn return count;rnrn//接收数据rnstatic ssize_t nrf_read(struct file *filp,char __user *buff,size_t count,loff_t *offp)rnrn printk(KERN_WARNING"run into read !\n");rn if( copy_to_user(buff, TxBuf, count ) ) //从内核空间复制到用户空间 完全复制成功 返回0rn rn printk(KERN_WARNING"Can’t recieve Data !\n"); rn return -EFAULT;rn rn printk(KERN_WARNING"nrf_read! \n");rn SPI_RW_Reg(WRITE_REG+STATUS,0XFF);rn nRF24L01_RxPacket(TxBuf);rn return count;rnrn在附上测试函数:rn fd = open("/dev/NRF24L01", O_RDWR); //打开nrf24l01为可读写文件rnrnrn if(fd < 0)rnrn rnrn perror("Can't open /dev/NRF24L01 \n");rnrn exit(1);rnrn rn printf("open /dev/nrf24L01 success \n");rn while(1)rn rn wr=write(fd, TxBuf , sizeof(TxBuf)); //写的测试rn printf("wr=%d\n",wr);rn rn /* //读的测试rn if((wr=read(fd,Buf,sizeof(TxBuf)))>0) //读的话 从设备中读取数据 rn rn printf("recieve data :");rn for( i=0;i
nrf24l01传输速率问题!!!!!
最近做了一个无线传输模块。可nrf24l01的速率就是上不去,就算啥也不干,发送端只发送字符串,接收端不做任何处理,发现发送端的传输速率也才7KB/S不到,这问题卡了我半年了,希望有哪位大神给我指点迷津!!!!或者是有利用它实现过无线通信的朋友能告诉我你们的传输速率是多少么。
NetMeeting windows 通行软件
NetMeeting windows 通行软件 NetMeeting windows 通行软件 NetMeeting windows 通行软件
通行时间估计 读书笔记
Learning to Estimate the Travel Time Didichuxing 中文提示:通行时间估计 特征提取: 对路段中所有可能获取的数据进行特征提取 包括交叉路口,route,信号灯信息 路段长度、宽度、车道数、本段在路网中的索引号。 时间数据:rush hours、off-peak hours. 当天是一年中的什么时间   holiday指示和高峰指示(ind...
SOCKET通行問題
大家好,我想問一下,我現在需要完成這樣一個任務:在不固定時間給客戶端發送消息。這樣的程序需要如何實現,我想應該用到了亂數產生器。不知道還需要什麽方面的知識才可以實現。請指教
通行失真校正上海交通大学
为了修正广角镜头的桶形畸变,本文提出了一种基于样条函数的修正方法.依据镜头桶形畸变产生的物理 机制,本文首先制作了一个同心圆标定模板并用该模板对广角镜头进行标定.然后利用样条函数的光滑性和桶形 畸变的径向连续性,采用三次样条函数拟合桶形畸变规律。最后,用该样条函数拟合的桶形畸变规律对同一个视 觉系统拍摄的变形图像进行恢复.在实验中,该方法能够对畸变图像进行快速恢复并表现出良好的效果.因此对 于固定焦距视觉系统,在不考虑视觉系统具体参数的情况下,新的方法能够快速有效地对广角镜头桶形畸变进行 修正.
UDP通行程序
服务器端:rn 1 #includern 2 #includern 3 #includern 4 #includern 5 #includern 6 #includern 7 #includern 8 #define LOCALPORT 4567 /*the const port*/rn 9 int main(int argc ,char *argv[])rn 10 int mysock,len;rn 11 struct sockaddr_in addr;rn 12 int i=0;rn 13 char msg[256];rn 14 int addr_len;rn 15 rn 16 if((mysock=socket(AF_INET,SOCK_DGRAM,0))<0)rn 17 perror("error");rn 18 exit(1);rn 19 rn 20 elsern 21 rn 22 printf("socket created .\n");rn 23 printf("socket id :%d\n",mysock);rn 24 rn 25 addr_len =sizeof(struct sockaddr_in);rn 26 bzero(&addr,sizeof(addr));rn 27 addr.sin_family-AF_INET;rn 28 addr.sin_port=htons(LOCALPORT);rn 29 addr.sin_addr.s_addr=htonl(INADDR_ANY);rn 30 rn 31 if(bind(mysock,&addr,sizeof(addr))<0)rn 32 perror("connect");rn 33 exit(1);rn 34 rn 35 elsern 36 rn 37 printf("bind ok.\n");rn 38 printf("local port :%d\n",LOCALPORT);rn 39 rn 40 while(1)rn 41 bzero(msg,sizeof(msg)); /*empty the msg*/rn 42 len= recvfrom(mysock,msg,sizeof(msg),0,&addr,&addr_len);rn 43 printf("%d",i);rn 44 i++;rn 45 printf("message from :%s\n",inet_ntoa(addr.sin_addr));rn 46 printf(" message length :%d\n",len);rn 47 printf("message :%s\n\n",msg);rn 48 sendto(mysock,msg,len,0,&addr,addr_len);rn 49 rn 50 return 0;rn 51 rn客户端:rn 1 #includern 2 #includern 3 #includern 4 #includern 5 #includern 6 #includern 7 #includern 8 #includern 9 #define REMOTEPORT 4567 /*the const port*/rn 10 #define REMOTEIP "127.0.0.1" /*the const ip */ rn 11 int main(int argc ,char *argv[])rn 12 int s, len;rn 13 struct sockaddr_in addr;rn 14 int addr_len;rn 15 char msg[256];rn 16 int i=0;rn 17rn 18 if((s=socket(AF_INET,SOCK_DGRAM,0))<0) /*create a socket*/rn 19 perror("error");rn 20 exit(1);rn 21 rn 22 elsern 23 rn 24 printf("socket created .\n");rn 25 printf("socket id :%d\n",s);rn 26 printf("remote ip :%s\n",REMOTEIP);rn 27 printf("remote port :%d\n",REMOTEPORT);rn 28 rn 29 len =sizeof(struct sockaddr_in);rn 30 bzero(&addr,sizeof(addr));rn 31 addr.sin_family-AF_INET;rn 32 addr.sin_port=htons(REMOTEPORT);rn 33 addr.sin_addr.s_addr=inet_addr(REMOTEIP);rn 34 rn 35 while(1)rn 36 bzero(msg,sizeof(msg)); /*empty the msg*/rn 37 len= read(STDIN_FILENO,msg,sizeof(msg));rn 38 sendto(s,msg,len,0,&addr,addr_len);rn 39 printf("\ninput message :%s",msg);rn 40 len =recvfrom(s,msg,sizeof(msg),0,&addr,&addr_len);rn 41 rn 42 printf("%d",i);rn 43 i++;rn 44 printf("Received message :%s \n",msg);rn 45 rn 46 return 0;rn 47 rn我先在终端打开了服务器端,输出如下:rnsocket created .rnsocket id :3rnbind ok.rnlocal port :4567rn然后,又在另一个终端打开客户端,运行结果如下:rnrnsocket created .rnsocket id :3rnremote ip :127.0.0.1rnremote port :4567rn接着,我在客户端输入字符串,socketrn结果出来:input message :socketrnrn然后就没消息了,终端一直在运行,却始终没给我一个结果。rn不知为什么?请大侠指点。。。谢谢。。。rn(两个终端为同一个虚拟机下的)rnrn
进程通行之报文消息队列
报文和消息队列又是进程间通行的一种手段(用于发送大量信息,它没有信号那种异步性和命名管道很像,能发送接收大量数据,但管道的缺点是数据没有组织性)。   它的特点,他的生命周期很长,一个消息队列创建后,让他消亡的方式有2种: 1.从启系统,整个内存的刷新。 2.自己手动销毁他。 说他克服了数据组织问题,我们知道一个管道,你在1点写了一些数据,读进程没有去读。你2点时候又写了一批数据,那么这2批数据就...
c#如何通行PHP
c#如何通行PHPrnC#如何通信PHP提交的session或者提交的信息
计算道路的通行能力
今年的数学建模上有这样的题,想问下驾驶员条件对通行能力的修正系数怎么确定的呢,不知道哪位大神知道呢,不胜感激
电子邮件与即时通行
电子邮件:   主要沟通方式即时通信:   大数据文件传输   
互联网上通行的套路
什么都不说了,看图。简单的一个吐槽,会是这样的结果,怪不得度娘上查不到关于阿里云计算、虚拟机的信息,包括负面信息。CSDN也是这样吗?
统计道路通行车辆
统计道路通行车辆,可以设计时间粒度,空间粒度,统计道路通行车辆,可以设计时间粒度,空间粒度
modbus 通行简介
有关 modbus通信的基本知识,重点介绍使用方法
nrf2401单通道双向通行
要实现单通道双向通行该怎么实现啦,遇到的问题是,单方面的接受都可以,但是但我给对方发个数据之后对方才可以给我发数据,我接到之后再继续发,就不行了呀,这两个问题一直无法解决呀我呀,希望版帮忙啦。rnrn#include rn#include rn#include rn#include "lcd.h"rn#define uchar unsigned charrn#define uint unsigned intrnrn#define FOSC 11059200rn#define BAUD 9600rn#define TIMER1 0XFD //256-(110592/(12*32*96))rn#define TIMER0H (65535-3*FOSC/12/1000)/256rn#define TIMER0L (65535-3*FOSC/12/1000)%256 //定时3MSrn//----------------------------------------------------------------------------------------------------------rn//内部寄存器定义rn//----------------------------------------------------------------------------------------------------------rn//sfr P4 = 0xc0;rn//sfr ADC_CONTR = 0xC5;rn//sfr AUXR = 0x8E;rn//sfr ADC_DATA = 0xC6;rn//sfr P1_ADC_EN = 0x97;rn//定义I/O口rnsbit POW_UP = P3^2;rnsbit CE = P3^3;rn//sbit DR2 = P3^3;rn//sbit SCK2 = P3^2;rn//sbit MOSI = P1^3; //DATA1rn//sbit MISO = P1^7; //DR1rnsbit DATA = P1^7 ;rnsbit SCK = P3^6; //clk1rn//sbit DOUT2 = P1^5;rnsbit CS = P3^4;rnsbit DR1 = P3^5;rnsbit LED1 = P2^0;rnsbit LED2 = P2^1;rnsbit LED3 = P2^2;rn sbit LED4 = P2^3;rn sbit LED5 =P2^4;rn sbit LED6 =P2^5;rn/********************* I/O define end*****************************************************/rnrnrn#define FRESELE 0x28 //频道选择rn#define DATANUM 4 //有效数据位数rnrn#define time0h (65535-3000)/256rn#define time0l (65535-3000)%256 //定时3MSrnrnvoid SpiWriteByte();rnrnuchar xdata CofigBuf[18]=rn rn 0x00, //接收频道二有效数据长度rnrn 40, //接收频道一有效数据长度rnrn 0x00,0xcd,0xef,0x12,0xb1, //接收频道二地址rnrn 0x00,0xcd,0xef,0x12,0xb0, //接收频道一地址rnrn 0x83, //32位地址,16位CRC,使能CRCrn //bit7~2:ADDR_W,最大40位rnrn //bit1:CRC_Lrn //Logic 0: 8 bit CRCrn //Logic 1: 16 bit CRCrnrnrn //BIT0:CRC_ENrn //Logic 0: On-chip CRC generation/checking disabledrn //Logic 1: On-chip CRC generation/checking enabledrnrnrn 0x4f, //ShockBurst模式,250 kbps,16M晶振,0dBm最大功率rnrn //Bit 15:RX2_ENrn //Logic 0: One channel receivern //Logic 1: Two channels receivernrn //Bit 14:rn //Communication Mode:rn //Logic 0: nRF2401 operates in direct mode.rn //Logic 1: nRF2401 operates in ShockBurst. modernrn //Bit 13:rn //RF Data Rate:rn //Logic 0: 250 kbpsrn //Logic 1: 1 Mbpsrnrn //Bit 12-10:Selects the nRF2401 crystal frequency to be used:rn // D12 D11 D10 Crystal Frequency [MHz]rn // 0 0 0 4rn // 0 0 1 8rn // 0 1 0 12rn // 0 1 1 16rn // 1 0 0 20rnrn //Bit 9-8:RF_PWR: Sets nRF2401 RF output power in transmit mode:rn // D9 D8 P [dBm]rn // 0 0 -20rn // 0 1 -10rn // 1 0 -5rn // 1 1 0rnrnrnrn 0x44 //2400+4*1=2404MHZ=2.404G,发送模式rnrn //Bit 7 – 1:RF_CH#: Sets the frequency channel the nRF2401 operates on.rn //Channelrf = 2400MHZ + RF_CH# * 1.0MHZrnrn //Bit 0:Set active mode:rn //Logic 0: transmit modern //Logic 1: receive modern ;rnrnrnuchar Addr[4]=0xcd, 0xef, 0x12, 0xb2; //地址rnuchar TxBuf[5]=0xff, 0xef, 0x00, 0x6f, 0x00; //发送绶冲区rnuchar RxBuf[2];//=0x01, 0x02, 0xe0, 0xb0, 0xc0; //接收绶冲区rnuint timer[2]; //超时计数器rnrnrnrnrnvoid Delay100us(uchar n)rnrn uchar i;rn while(n--)rn rn for(i=0; i<35; i++);rn rnrnrnvoid delay(unsigned int s) //1msrnrn unsigned int i,j;rn for(i=s; i>0; i--);rn for(j=450; j>0; j--);rnrnrnvoid CpuInit(void)rn uint i;rn CE = 0;rn CS = 0;rn POW_UP = 1;rn Delay100us(40);rn CE=0;rn CS = 0;rn Delay100us(30);rnrnrnvoid TimerInit(void)rnrn TH0 = TIMER0H;rn TL0 = TIMER0L;rn ET0 = 1; //定时器0中断允许rn TF0 = 0;rn TR0 = 1; //启动定时器0rn EA = 1; //开全局中断rn rnrnvoid ResetTimer(uchar n)rnrn ET0 = 0; // Disable Timer0 interruptrn timer[n & 0x01] = 0; // Clear timer[n]rn ET0 = 1; // Enable Timer0 interruptrnrnrnrnuint ReadTimer(uchar n)rnrn uint tmp;rn ET0 = 0; // Disable Timer0 interruptrn tmp = timer[n]; // Clear timer[n]rn ET0 = 1; // Enable Timer0 interruptrn return tmp;rn rnrnvoid UartInit(void)rnrn SCON = 0x50; //串口方式1,允许接收rn TMOD = 0x21; //定时器1工作方式2,定时器0工作方式1rn TH1 = TIMER1;rn TL1 = TIMER1;rn TR1 = 1; //启动定时器1rn rnrnvoid SpiWriteByte(uchar dat)rnrn uchar i;rnrn SCK = 0;rn _nop_();rn _nop_();rn for(i=0; i<8; i++)rn rn if((dat & 0x80) == 0x80)rn rn // MOSI = 1;rn //MISO = 1;rn DATA=1;rn rn elsern rn //MOSI = 0;rn //MISO = 0;rn DATA=0;rn rn rn SCK = 1;rn delay(1);rn // _nop_();rn // _nop_();rn dat <<= 1;rn SCK = 0;rn delay(1);rn // _nop_();rn // _nop_();rn rnrnrnuchar SpiReadByte(void)rnrn uchar i,temp;rn temp = 0;rnrn// MOSI = 1;rn// MISO = 1;rn DATA=1;rnrn SCK = 0;rn _nop_();rn _nop_();rn for(i=0; i<8; i++)rn rn temp <<= 1;rn SCK = 1;rn // _nop_();rn // _nop_();rn delay(1);rn if(DATA)rn temp++;rn SCK = 0;rn delay(1);rn // _nop_();rn // _nop_();rn rn return temp;rnrnrnrnvoid SetTxMode(void)rnrn unsigned char ch;rn Delay100us(2);rn POW_UP = 1; rn CE = 0; rn CS = 1;rn Delay100us(0);rn ch = FRESELE<<1;rn SpiWriteByte(ch);rn SCK=1;rn SCK=0;rn CS = 0;rn CE=1; rn Delay100us(2);rnrn rnvoid SetRxMode(void)rnrn unsigned char ch;rn Delay100us(2);rn POW_UP = 1; rn CE=0; rn CS = 1;rn Delay100us(0);rn ch = FRESELE<<1;rn SpiWriteByte(ch | 0x01);rn SCK=1;rn SCK=0;rn CS = 0;rn CE=1; rn Delay100us(2); //200usrnrnrnvoid Nrf2401Init(void)rnrn uchar i;rn POW_UP = 1;rn CE = 0;rn CS = 0;rn Delay100us(3);rn for(i=0; i<18; i++)rn rn SpiWriteByte(CofigBuf[i]);rn rn CS = 0;rn Delay100us(30);rnrnrnrnrnrnvoid TranData(void)rnrnrn uchar i;rn SetTxMode();rn CE = 1;rn Delay100us(2);rn for(i=0; i<4; i++)rn rn SpiWriteByte(Addr[i]); //发送地址rn rn rn Delay100us(1);rn for(i=0; i<5; i++)rn rn SpiWriteByte(TxBuf[i]); //发送五位rn LED5=~LED5;rn Delay100us(100); rn rn CE = 0;rn Delay100us(13);rnrnrnuchar ReceivePacket(void)rnrn uchar i;rn SetRxMode();rn CE = 1;rn ResetTimer(1);rn if(DR1)rn for(i=0;i<5;i++)rn RxBuf[i] = SpiReadByte();rn rn return 1;rn rn return 0;rnrnrnvoid timer0() interrupt 1rnrnrn EA = 0;rn TH0+=TIMER0H;rn TL0+=TIMER0L;rn timer[0]++;rn timer[1]++;rn EA = 1;rn rnrnvoid main()rnrn uchar temp,i,j;rn ///////////////////rn CpuInit(); //SPI初始化rn TimerInit(); // 定时器0初始化rn UartInit(); // 串口初始化rn Nrf2401Init(); //Nrf2401Init初始化,这里配置成32位地址。rn// delay(200);rn TranData();rn delay(500);rn while(1)rn rn for(i=0;i<30;i++)rn for(i=0;i<30;i++) rn temp=ReceivePacket(); //接收数据存在接收缓冲区nei rn if(temp==1)rn rn for(j=0;j<5;j++)rn P2=RxBuf[i];rn delay(100);rn rn TranData();rn delay(500); rn LED3=0;rn delay3(100);rn LED3=1;rn delay(100);rn temp=0;rn rn rn rn rn
通行原理资料呢
蛮好 通信原理复习资料。。蛮好 通信原理复习资料
android 程序与PC通行
这是一个通过Socket手机和电脑进行通信,手机作为客服端,电脑作为服务端。
三位通行 三位通行+汉字通行证,注册.exe
三位通行+ 三位通行+汉字通行证,注册.exe
红外通行协议
红外通信NEC协议 协议说明 发送端 接收端 协议特点
3250 串口通行代码
ARM smart3250 串口通信 希望对你有帮助。也希望大家下载。
通行电子电路ppt
通信电子电路备课,主要是高频部分的讲解,主要分为8章进行讲解
4412cpu之间的通行方式
这几天晚上闲着无事,看着4412的datasheet,看到中断部分。因为4412是4核处理器,肯定设计到cpu之间通信的问题。rn下图中的cpu之间是通过中断来实现的,记得以前看到一篇文章,说多核cpu之间是通过软件来实现通信的。rn现在一下晕了,本人菜鸟,有没有高人来解惑~rn[img=https://img-bbs.csdn.net/upload/201509/01/1441074487_616232.png][/img]
问【fcuandy 和 dawugui】一个关于普通行 列转换的问题!!
/*题目如下rnrn教师号  星期号 是否有课rn 1    2   有rn 1    3   有rn 2    1   有rn 3    2   有`rn 1    2   有rn写一条sql语句让你变为这样的表rn教师号 星期一 星期二 星期三rn 1       2   1 rn 2   1   rn 3       1rn各星期下的数字表示:对应的教师在星期几已经排的课数*/rnrnif exists(select *from master where name='userinfo')rndrop table userinforngorncreate table userinforn(rn 教师号 int not null,rn 星期号 char(2) not null,rn 是否有课 char(4) not nullrn)rnrnselect * from userinforninsert into userinfornvalues (1,'2','有')rninsert into userinfornvalues (1,'3','有')rninsert into userinfornvalues (2,'1','有')rninsert into userinfornvalues (3,'2','有')rninsert into userinfornvalues (1,'2','有')rnrnrnselect 教师号,rnmax(case 星期号='1' then 这里如何来获取有几节课的总数? else ' ' end)星期一,rnmax(case 星期号='2' then 这里如何来获取有几节课的总数? else ' ' end)星期二,rnmax(case 星期号='3' then 这里如何来获取有几节课的总数? else ' ' end)星期三rnFrom userinforngroup by 教师号rnrn在 then 这个地方我不知道要如何去写了 因为是要统计是否有课 和有课的总数 我不知道如何写条件来获取这个总数rn想了很久 我想可能是我基础语法理解不清楚 所以还是希望你们帮我解答下,最好辛苦你们把具体的逻辑思想稍微做个解释给rn我说明下 好吗?
关于VB,mscomm控件和西门子plc通行的问题
Private Sub MSComm1_OnComm()rn If Command2.Caption = "停止接受" Thenrn Select Case CommEventrn Case comEvReceivern temp = MSComm1.Inputrn ReDim Preserve temp(UBound(temp)) As Bytern For i = LBound(temp) To UBound(temp)rn Text2 = Text2 & str$(temp(i)) & " "rn Next irn End Selectrn rn End Ifrn rnEnd Subrnrnusb/ppi电缆的发送信号和接受信号都亮起,但是没有显示到text2上,是代码有问题还是其他什么原因,希望各位提供帮助,不甚感激~
关于Java聊天程序通行问题!!麻烦大家帮忙看看!!拜谢!!!
我写了一个聊天程序,客户端向服务器发消息,服务器接收到后在强制转化为Message对象时会报 ClassNotFoundException的错误,但后来我调试发现rn 1:那个服务器和test.java 同时在eclipse 或netbeans 上 单机运行时就没有问题。rn 2:服务器和test.java 分别在eclipse 或netbeans 就会报错。rn 3:服务器和test.java 同时在eclipse 或netbeans 上 ,但是在两台机子间通信,也会出错。rn rn 我把代码精简了,麻烦大家帮忙看看!!!rn在clientThread 中 Message message=(Message) link.input.readObject();报错rn是不是我那个Message写错了??rn麻烦大家帮忙看看!!!rn拜谢!!!!!!!!!!!!!!!!!!!!!!!rnrnrnrnrnpublic class ClientThread extends Thread rn rn private Link link;rn private boolean isStop;rn rn public ClientThread(Link link)rn rn this.link=link;rn rn isStop=false;rn rn public void run()rn rn while(!isStop)rn rn tryrn rn Message message=(Message) link.input.readObject();rn switch(message.Type)rn rn case Message.TALK_TO_FRIEND:rn case Message.ADD_FRIEND:rn rn rn catch (ClassNotFoundException e) rn e.printStackTrace();rn System.out.println("没找到类"); rnrn catch (IOException e) rn e.printStackTrace();rn System.out.println("IO");rn rn rn rn rnrnrnpublic class Link rn rn public Socket socket ;rn public ObjectOutputStream output = null;rn public ObjectInputStream input = null;rn public Link next = null;rn rnrnrnrnrnpublic class Message implements Serializable rn rn private static final long serialVersionUID = 1L; rn //和好友聊天rn public final static int TALK_TO_FRIEND=1;rn //添加好友rn public final static int ADD_FRIEND=2;rn //更改用户信息rn public final static int MODIFY_USER_INFO=3;rn //在群中讲话rn public final static int TALK_IN_GROUP=4;rn //删除群成员rn public final static int DELETE_MEMBER_IN_GROUP=5;rn //建群rn public final static int CREATE_GROUP=6;rn //加入群rn public final static int JOIN_GROUP=7;rn //更改群信息rn public final static int MODIFY_GROUP_INFO=8;rn //登陆rn public final static int LOGIN=9;rn //注册rn public final static int REGISTER=10;rn //获得好友列表rn public final static int GET_FRIEND_LIST=11;rn //获得群列表rn public final static int GET_GROUP_LIST=12;rn //删除好友rn public final static int DELETE_FRIEND=13;rn //获得个人资料rn public final static int SEARCH_USERS_ID=14;rn //模糊查询rn public final static int SEARCH_USERS_NAME=15;rn //退出rn public final static int EXIT=16; rn //删除群rn public final static int DELETE_GROUP=17;rn //确认添加好友rn public final static int CONFIRM_ADD_FIREND=18;rn //服务器关闭rn public final static int SERVER_STOP=19;rn rn rn public int Type;rn public String message;rn public Font font;rn public Color color;rn public Object object1;rn public Object object2;rn public Message()rn rn Type=0;rn message=null;rn font=null;rn color=null; rn object1=null;rn object2=null;rn rn rn rn rnrnimport java.io.IOException;rnimport java.io.ObjectInputStream;rnimport java.io.ObjectOutputStream;rnimport java.io.OutputStream;rnimport java.net.*;rnimport java.sql.*;rnimport java.util.*;rnrnpublic class Server rn rn private int port;rn private String IP;rn private ServerSocket serverSocket; rn private ServerListener listener;rn private boolean isStop;rnrn rn rn public Server(int port)rn rn rn this.port=port;rn rn rn rn rn rn public void startServer()rn rn rn try rn serverSocket = new ServerSocket(port);rn System.out.println("Start Server");rn this.listener=new ServerListener(serverSocket);rn listener.start();rn rn catch (IOException e) rn rn e.printStackTrace();rn rn rn rn rn rn public static void main(String[]args)rn rn //开启服务器rn Server server =new Server(8888);rn server.startServer(); rn ///建立客户端与服务器连接rnrn rnrnrnimport java.io.*;rnimport java.net.*;rnrn/**rn * @author lirn *rn */rnpublic class ServerListener extends Threadrn rn private ServerSocket server;rn rnrn //服务器监听类rn public ServerListener(ServerSocket server) rnrn this.server = server;rn rn rn rn public void run()rn while(true)rn tryrn rn Link link = new Link();rn //监听端口rn link.socket = server.accept();rn //初始化link 结构体rn link.output = new ObjectOutputStream(link.socket.getOutputStream());rn link.output.flush();rn link.input = new ObjectInputStream(link.socket.getInputStream());rn //初始化线程rn ClientThread newThread=new ClientThread(link);rn //开启线程rn newThread.start();rn rn rn catch(Exception e)rn rn rn rnrnrnpublic class Test rnrn /**rn * @param argsrn */rn public static void main(String[] args) rn rnrn try rnrn Socket socket =new Socket("127.1.0.0",8888);rn ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());rnrn rnrn Message message=new Message();rn message.Type=Message.LOGIN;rn output.writeObject(message);rn output.flush();rn rn rn rnrn catch (UnknownHostException e) rn // TODO Auto-generated catch blockrn e.printStackTrace();rn catch (IOException e) rn //TODO Auto-generated catch blockrn e.printStackTrace();rn rnrnrn rnrnrn
nrf24l01一对多
nrf24l01实现无线一对多通信,C51例子
nRF24L01 程序
无线通讯 nRF24L01 SPCE061V004
nRF24L01程序
无线,通信,详细的程序,配置,无线nRF24L01的程序, 调试成功,方便
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池