|
发表于 2014-1-17 09:03:54
|
显示全部楼层
NRF的手册最好先好好看一下:
硬件连接 NRF24L01: 主要就分有SPI接口 SPI_CSN使能管脚 NRF_CE使能管教 IRQ管脚
其中SPI_CSN部分用控制用户数据用的 NRF_CE主要用于控制配置NRF24L01模块的内部寄存器 IRQ主要标志芯片状态变化
当你发送一个数据的时候,无非通过2中方式发送
一种是通过事件方式 也就是比如按了一个按键了,就像程序上红字部分按键后有了个IRQ=1,为了区分我改成了KEY_Down_Flag=1,然后再调用NRF发送
另外一种方式就是定时发送,网上程序一般是while(1){ RF_Send() ; delay_ms(1000); }每一秒钟发送一个数据 达到发送的目的
对于发送没有什么好讲的
如果发送的过程中你需要保证你的数据100%被对方接受了 那发送后你还需要获取NRF的状态来搞清数据有没有被对方接受
定时发送的结构就变为
while(1)
{
send();
wihile(1 || 超时)
{
if(IRQ == 0)
{
sta =获取NRF状态
if(sta == 发送完成){记录下发送状态 break;}
.......
}
判断下发送状态 超时 了还是 发送完成了 你的处理
//delay_ms(1000);
}
}
如果发送你想用中断的方式知道系统的发送状态
while(1)
{
RF_Send();
while(1 ||超时)
{
if(中断里的发送状态 == 发送完成){ break; }
}
根据发送的情况进行处理
delay_ms(1000)
}
PIN_IRQ
{
sta = 获取状态
清除NRF中断状态
if(sta == 发送完成)
{
中断里的发送状态 = 发送完成
}
....
}
这种结构可以保证中断占用很短的时间 ,因为本来中断的任务标志状态用的 而具体做什么交给CPU完成
以上只是介绍了思路 代码很多细节没有考虑
楼主需要1.首先搞清楚系统的程序架构(譬如这个前后台程序) 2.NRF的手册 特别是那不到10个寄存器的配置 3.真正搞清单片机中断与CPU的结合使用,以及中断真正要做的内容
才能玩好这个模块啊 |
|