OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 19398|回复: 5

大神指导NRF24L01发送出错

[复制链接]

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-8-23
在线时间
0 小时
发表于 2013-8-23 18:13:39 | 显示全部楼层 |阅读模式
&nbsp;<!--StartFragment --><div>最近用51单片机研究射频卡522,事先给空白卡里面写入学号信息,刷卡也能读取了,但是问题来了:“每次刷卡,刷一两次(可以正常读取卡信息哦)后,若显示读卡失败“ERR”时,读卡模块就卡住了,不会读取新过来的卡的数据了”<br />
需要每次单片机重新复位,才能继续读取新卡数据。<br />
以下是部分主程序部分,另外NRF2401和RC522调用函数子程序网上基本一样的,所以这里版面问题没扔出来。<br />
////////////////////////////////////////////////////<br />
//入口主函数<br />
void main( )<br />
{&nbsp;&nbsp; <br />
&nbsp; unsigned char status;<br />
&nbsp; unsigned char t; <br />
&nbsp;&nbsp; CE=0;<br />
&nbsp;&nbsp;&nbsp; SCK=0;<br />
&nbsp;&nbsp;&nbsp; CSN=1;&nbsp;<br />
&nbsp;&nbsp; UartInital();<br />
&nbsp;&nbsp;&nbsp; InitializeSystem( );&nbsp;//初始化<br />
&nbsp;&nbsp;&nbsp; while (1)<br />
&nbsp;&nbsp;&nbsp; {&nbsp; <br />
&nbsp;status=PcdRequest( PICC_REQALL, &amp;RevBuffer[0] ) ;&nbsp;<br />
&nbsp; if( status!= MI_OK )&nbsp;//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节&nbsp;<br />
&nbsp;&nbsp; {&nbsp;&nbsp; status=PcdRequest( PICC_REQIDL, &amp;RevBuffer[0] ) ;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( status != MI_OK ){&nbsp;//寻天线区内未进入休眠状态的卡,返回卡片类型 2字节&nbsp;<br />
&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp; }<br />
&nbsp; status=PcdAnticoll( &amp;RevBuffer[2] );<br />
&nbsp;if(&nbsp; status!= MI_OK ){&nbsp; //防冲撞,返回卡的序列号 4字节 <br />
&nbsp;&nbsp;DisplayListChar(10,1,lyERR);&nbsp;//错误返回<br />
&nbsp;continue;&nbsp;<br />
&nbsp;}<br />
&nbsp;memcpy(MLastSelectedSnr,&amp;RevBuffer[2],4);<br />
&nbsp;status=PcdSelect(MLastSelectedSnr);<br />
&nbsp;if(status!= MI_OK ){&nbsp;//选卡<br />
&nbsp;&nbsp;DisplayListChar(10,1,lyERR);<br />
&nbsp;&nbsp;continue;<br />
&nbsp;}<br />
&nbsp;status=PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, MLastSelectedSnr);<br />
&nbsp;if( status!= MI_OK){&nbsp;// 校验卡密码A<br />
&nbsp;&nbsp;DisplayListChar(10,1,lyERR);<br />
&nbsp;&nbsp;continue;&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;status=PcdRead(1,&amp;RevBuffer[2]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;if(PcdRead(1,&amp;RevBuffer[2])!= MI_OK) // 读卡了?<br />
&nbsp;{ <br />
&nbsp;<br />
&nbsp;status=PcdRead(1,&amp;RevBuffer[2]);&nbsp; <br />
&nbsp;&nbsp; if(status!= MI_OK)//再一次读卡确认<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;DisplayListChar(10,1,lyERR);<br />
&nbsp; &nbsp;&nbsp;continue;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;}<br />
&nbspcdHalt();&nbsp;//终止卡的操作&nbsp;</div>
<h2>就是以下2401部分导致刷卡刷正确一次卡死的问题所在。以下若删了,刷卡没问题(所以证明我的RFID-RC522程序没错的,问题出在下面主程序的小部分)。按说while循环里面怎么可能刷一次就卡住了呢,我猜仅仅发送了一次卡住没继续循环了,仅个人观点,大神来看看</h2>
<div><br />
<strong>&nbsp;DisplayListChar(0,1,&amp;RevBuffer[2]);<br />
&nbsp;for( t=0;t&lt;=strlen(&amp;RevBuffer[2]);t++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tx_Buf[t]=*(&amp;RevBuffer[2]+t); </strong></div>
<div><strong>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;UartSend_string(Tx_Buf);<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nRF24L01_TxPacket(Tx_Buf)==TX_DS)//发送数组中的数据&nbsp; 或者使用这一句 nRF24L01_TxPacket(unsigned char * tx_buf)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;</strong></div>
<div><strong>&nbsp;&nbsp;&nbsp; }</strong></div>
<div><strong>&nbsp;&nbsp;delay(200);&nbsp;//间隔时间<br />
&nbsp;&nbsp;<br />
&nbsp; }<br />
}</strong></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><br />
&nbsp;</div>
<div>那位大神帮忙看看,刷卡一两次后就要单片机复位,RC522模块才能继续读取新的卡,这是什么情况啊,起码来一个新卡,重新读吧?该怎么改好呢,跪求大神指点一二</div>
<div><br />
以下是NRF2401的部分程序:#ifndef __2401_H__<br />
#define __2401_H__</div>
<div>&nbsp;</div>
<div>#define uchar unsigned char<br />
#define uint unsigned int<br />
//定义的端口为模块上标的端口//<br />
sbit MISO=P3^4;<br />
sbit MOSI=P3^0;<br />
sbit IRQ=P3^3;<br />
sbit CE=P3^5;<br />
sbit CSN=P3^1;<br />
sbit SCK=P3^2;<br />
uchar&nbsp; bdata sta;&nbsp;&nbsp; //状态标志bdata就是可位寻址内部数据存储区<br />
sbit RX_DR = sta ^6;//接收数据准备就绪<br />
sbit TX_DS =sta^5;//已发送数据<br />
sbit MAX_RT =sta^4;<br />
#define TX_ADR_WIDTH&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp; // 5 uints TX address width<br />
#define RX_ADR_WIDTH&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp; // 5 uints RX address width<br />
#define TX_PLOAD_WIDTH&nbsp; 10&nbsp;&nbsp; // 32 uints TX payload<br />
#define RX_PLOAD_WIDTH&nbsp; 10&nbsp; // 32 uints TX payload</div>
<div>&nbsp;</div>
<div><br />
uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址<br />
uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址<br />
uchar idata Tx_Buf[TX_PLOAD_WIDTH]={0};//发送数据</div>
<div>#define READ_REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00&nbsp;&nbsp; // 读寄存器指令<br />
#define WRITE_REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x20&nbsp; // 写寄存器指令<br />
#define RD_RX_PLOAD&nbsp;&nbsp;&nbsp;&nbsp; 0x61&nbsp;&nbsp; // 读取接收数据指令<br />
#define WR_TX_PLOAD&nbsp;&nbsp;&nbsp;&nbsp; 0xA0&nbsp;&nbsp; // 写待发数据指令<br />
#define FLUSH_TX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xE1&nbsp; // 冲洗发送 FIFO指令<br />
#define FLUSH_RX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xE2&nbsp;&nbsp; // 冲洗接收 FIFO指令<br />
#define REUSE_TX_PL&nbsp;&nbsp;&nbsp;&nbsp; 0xE3&nbsp;&nbsp; // 定义重复装载数据指令<br />
#define NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0xFF&nbsp;&nbsp; // 保留<br />
//**********************************SPI(nRF24L01)寄存器地址**/<br />
#define CONFIG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x00&nbsp; // 配置收发状态,CRC校验模式<br />
//以及收发状态响应方式<br />
#define EN_AA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x01&nbsp; // 自动应答功能设置<br />
#define EN_RXADDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x02&nbsp; // 可用信道设置<br />
#define SETUP_AW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x03&nbsp; // 收发地址宽度设置<br />
#define SETUP_RETR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x04&nbsp; // 自动重发功能设置<br />
#define RF_CH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x05&nbsp; // 工作频率设置<br />
#define RF_SETUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x06&nbsp; // 发射速率、功耗功能设置<br />
#define STATUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x07&nbsp; // 状态寄存器<br />
#define OBSERVE_TX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x08&nbsp; // 发送监测功能<br />
#define CD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x09&nbsp; // 地址检测&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
#define RX_ADDR_P0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0A&nbsp; // 频道0接收数据地址<br />
#define RX_ADDR_P1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0B&nbsp; // 频道1接收数据地址<br />
#define RX_ADDR_P2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0C&nbsp; // 频道2接收数据地址<br />
#define RX_ADDR_P3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0D&nbsp; // 频道3接收数据地址<br />
#define RX_ADDR_P4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0E&nbsp; // 频道4接收数据地址<br />
#define RX_ADDR_P5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0F&nbsp; // 频道5接收数据地址<br />
#define TX_ADDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x10&nbsp; // 发送地址寄存器<br />
#define RX_PW_P0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x11&nbsp; // 接收频道0接收数据长度<br />
#define RX_PW_P1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x12&nbsp; // 接收频道0接收数据长度<br />
#define RX_PW_P2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x13&nbsp; // 接收频道0接收数据长度<br />
#define RX_PW_P3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x14&nbsp; // 接收频道0接收数据长度<br />
#define RX_PW_P4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x15&nbsp; // 接收频道0接收数据长度<br />
#define RX_PW_P5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x16&nbsp; // 接收频道0接收数据长度<br />
#define FIFO_STATUS&nbsp;&nbsp;&nbsp;&nbsp; 0x17&nbsp; // FIFO栈入栈出状态寄存器设置</div>
<div>//******************************************延时函数<br />
//长延时<br />
void Deelay(unsigned int s)&nbsp;//延时约1ms,当s=1时;<br />
{<br />
&nbsp;unsigned int i,j;&nbsp;&nbsp;&nbsp;&nbsp;<br />
for(i=0;i&lt;1000;i++)for(j=0;j&lt;s;j++);<br />
}<br />
//短延时<br />
void deelay_ms(unsigned int x)&nbsp; //延时约0.1ms,当x=1时<br />
{<br />
&nbsp;&nbsp;&nbsp; unsigned int i,j;<br />
&nbsp;&nbsp;&nbsp; i=0;<br />
&nbsp;&nbsp;&nbsp; for(i=0;i&lt;x;i++)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j=108;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(j--);<br />
&nbsp;&nbsp;&nbsp; }<br />
}</div>
<div>//****IO口模拟SPI总线代码********/<br />
uchar SPI_RW(uchar byte)//这一段程序看懂了,觉得写得挺好<br />
{<br />
&nbsp;uchar bit_ctr;<br />
&nbsp;for(bit_ctr=0;bit_ctr&lt;8;bit_ctr++)<br />
&nbsp;{<br />
&nbsp;&nbsp; MOSI=(byte&amp;0x80);<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; byte=(byte&lt;&lt;1);<br />
&nbsp;&nbsp; SCK=1;<br />
&nbsp;&nbsp; byte|=MISO;<br />
&nbsp;&nbsp; SCK=0;<br />
&nbsp;}<br />
&nbsp;return(byte);<br />
}<br />
uchar SPI_RW_Reg&nbsp; (uchar&nbsp; reg,uchar value) // 向寄存器REG写一个字节,同时返回状态字节<br />
{<br />
&nbsp;&nbsp;&nbsp; uchar status;<br />
&nbsp; CSN=0;<br />
&nbsp; status=SPI_RW(reg);<br />
&nbsp;&nbsp;&nbsp; SPI_RW(value);<br />
&nbsp; CSN=1;<br />
&nbsp; return(status);<br />
}<br />
uchar SPI_Read (uchar&nbsp; reg )//读取寄存器值的函数<br />
{<br />
&nbsp;&nbsp;&nbsp; uchar reg_val;<br />
&nbsp; CSN=0;<br />
&nbsp; SPI_RW(reg);<br />
&nbsp;&nbsp; reg_val=SPI_RW(0);<br />
&nbsp; CSN=1;<br />
&nbsp; return(reg_val);<br />
}<br />
uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)//发射缓冲区访问函数<br />
{<br />
&nbsp;uchar status,byte_ctr;<br />
&nbsp;&nbsp; CSN = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Set CSN low, init SPI tranaction<br />
&nbsp;&nbsp; status = SPI_RW(reg);&nbsp;&nbsp;&nbsp; // Select register to write to and read status byte<br />
&nbsp;&nbsp; for(byte_ctr=0; byte_ctr&lt;bytes; byte_ctr++) // then write all byte in buffer(*pBuf)<br />
&nbsp;&nbsp;&nbsp; SPI_RW(*pBuf++);<br />
&nbsp;&nbsp; CSN = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Set CSN high again<br />
&nbsp;&nbsp; return(status);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // return nRF24L01 status byte<br />
}<br />
//******************发送模式代码*************/<br />
/*void TX_Mode(void)<br />
{<br />
&nbsp;CE=0;<br />
&nbsp;SPI_RW_Reg(FLUSH_TX,0x00);<br />
&nbsp;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);&nbsp;&nbsp;&nbsp; // Writes TX_Address to nRF24L01<br />
&nbsp;&nbsp; SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack<br />
&nbsp;SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Enable Auto.Ackipe0<br />
&nbsp;&nbsp; SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);&nbsp; // Enable Pipe0<br />
&nbsp;&nbsp; SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...1a<br />
&nbsp;&nbsp; SPI_RW_Reg(WRITE_REG + RF_CH, 40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Select RF channel 40 //不一样零:: 通道选择0<br />
&nbsp;&nbsp; SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);&nbsp;&nbsp; // TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR<br />
&nbsp;SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //不一样零:没这一句 设置接收数据长度,本次设置为32字<br />
&nbsp;&nbsp; SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);<br />
&nbsp;CE=1;<br />
&nbsp;delay_ms(100);<br />
}<br />
void Transmit(unsigned char * tx_buf)<br />
{<br />
&nbsp;CE=0;&nbsp;&nbsp; //StandBy I模式 <br />
&nbsp;<br />
&nbsp;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 发射//缓冲区访问函数&nbsp; 装载接收端地址<br />
&nbsp;SPI_RW_Reg(FLUSH_TX,0x00);&nbsp; //不一样二:这一句多了 寄存器访问函数<br />
&nbsp;SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);&nbsp;&nbsp; // 装载数据 <br />
&nbsp;SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);&nbsp;&nbsp; // IRQ收发完成中断响应,16位CRC,主发送<br />
&nbsp;CE=1;&nbsp;&nbsp; //置高CE,激发数据发送<br />
&nbsp;delay_ms(150);<br />
} */<br />
unsigned char&nbsp; nRF24L01_TxPacket(unsigned char * tx_buf)<br />
{<br />
&nbsp;CE=0;<br />
&nbsp;<br />
&nbsp;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);&nbsp;&nbsp;&nbsp; // <br />
&nbsp;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); <br />
&nbsp;SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); <br />
&nbsp;<br />
&nbsp;SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);&nbsp; // <br />
&nbsp;SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); //<br />
&nbsp;SPI_RW_Reg(WRITE_REG + RF_CH, 0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);&nbsp;&nbsp; // <br />
&nbsp;SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);&nbsp;&nbsp;&nbsp;&nbsp; // <br />
&nbsp;CE=1;<br />
&nbsp;// deelay_ms(150);<br />
&nbsp;//while(IRQ!=0);</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; sta=SPI_Read(READ_REG +&nbsp; STATUS);&nbsp;// read register STATUS's value<br />
&nbsp;SPI_RW_Reg(WRITE_REG+STATUS,sta);&nbsp;// clear interrupt flag(TX_DS)<br />
&nbsp; if(sta&amp;MAX_RT)<br />
&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; SPI_RW_Reg(FLUSH_TX,0xff);&nbsp; &nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Deelay(10);<br />
&nbsp;&nbsp;return&nbsp; MAX_RT;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; if(sta&amp;TX_DS)<br />
&nbsp;&nbsp;&nbsp;&nbsp; return TX_DS;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return 0xff;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div><br />
}</div>
<div><br />
#endif&nbsp;<br />
<br />
<br />
<div>那位大神帮忙看看,刷卡一两次后就要单片机复位,RC522模块才能继续读取新的卡,这是什么情况啊,起码来一个新卡,重新读吧?该怎么改好呢,跪求大神指点一二</div>
<div><br />
<br />
</div>
</div>
细水长流
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-8-23
在线时间
0 小时
 楼主| 发表于 2013-8-24 08:57:35 | 显示全部楼层
自己顶一个,跪求大神来袭指导
细水长流
回复 支持 反对

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-8-23
在线时间
0 小时
 楼主| 发表于 2013-8-24 21:23:37 | 显示全部楼层
哎。。。等了一两天了都没个人答。。。伤心中。。。
细水长流
回复 支持 反对

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-8-23
在线时间
0 小时
 楼主| 发表于 2013-8-25 09:23:21 | 显示全部楼层
反复验证,我的刷卡程序是正确的,NRF24L01发送小部分程序----还是这一小部分的问题,单个发送接收,这程序没错,但是把这小部分2401的扔进去,就使得刷卡刷一次就死掉不执行了,需要单片机复位
细水长流
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-8-25 22:51:51 | 显示全部楼层
共用1个SPI么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2013-8-23
在线时间
0 小时
 楼主| 发表于 2013-8-27 14:01:38 | 显示全部楼层
查出来了,是串口通信和2401端口共用时冲突了
细水长流
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 18:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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