解决nrf52832radio配置反复切换,radio不能读标签的问题
切换配置时,radio还在等待读卡的状态,官⽅读取程序如下:
/**@briefFunctionforreadingpacket.
*/
uint32_tread_packet(uint8_t*received,uint32_t*getRssisample)
{
uint32_tresult=0;
NRF_RADIO->EVENTS_READY=0U;
//Enableradioandwaitforready
NRF_RADIO->TASKS_RXEN=1U;
while(NRF_RADIO->EVENTS_READY==0U)
{
//wait
}
NRF_RADIO->EVENTS_END=0U;
//Startlisteningandwaitforaddressreceivedevent
NRF_RADIO->TASKS_START=1U;
//Waitforendofpacketorbuttonsstatechanged
while(NRF_RADIO->EVENTS_END==0U)//会⼀直在这⾥等待接收标签数据
{
if(rfidConfiged==1){
rfidConfiged=0;
break;
}
//wait
}
if(NRF_RADIO->CRCSTATUS==1U)
{
//getRssisample=NRF_RADIO->RSSISAMPLE;
if(rfidMode==1){
memcpy(received,(((char*)packet)+2),10);
}el{
memcpy(received,packet,10);
}
*getRssisample=NRF_RADIO->RSSISAMPLE;
result=1;
}
NRF_RADIO->EVENTS_DISABLED=0U;
//Disableradio
NRF_RADIO->TASKS_DISABLE=1U;
while(NRF_RADIO->EVENTS_DISABLED==0U)
{
//wait
}
returnresult;
}
如果radio仍处于读卡状态,这时切换配置,会卡死在while(NRF_RADIO->EVENTS_END==0U)这个循环⾥,就算有相应配置的标签也
读不到。
解决⽅法:停⽌读卡,切换配置,重新读卡。代码如下:
voidradio_change()
{
NRF_RADIO->EVENTS_DISABLED=0;//停⽌读卡
NRF_RADIO->TASKS_DISABLE=1u;
while(NRF_RADIO->EVENTS_DISABLED==0u){
}
radio_configure();//配置radio
NRF_RADIO->PACKETPTR=(uint32_t)packet;
NRF_RADIO->EVENTS_READY=0U;//重新读卡
//Enableradioandwaitforready
NRF_RADIO->TASKS_RXEN=1U;
while(NRF_RADIO->EVENTS_READY==0U)
{
}
NRF_RADIO->EVENTS_END=0U;
//Startlisteningandwaitforaddressreceivedevent
NRF_RADIO->TASKS_START=1U;
}
本文发布于:2022-11-15 10:00:04,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/23589.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |