OpenEdv-开源电子网

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

关于NRF24L01无线通信中,如何让接收到的信息优先被响应

[复制链接]

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
发表于 2013-6-29 17:41:43 | 显示全部楼层 |阅读模式
最近在弄一个移动小车,用NRF24L01无线通信模块进行控制。想创建两种模式,一种是自动运行的模式,还有就是手动运行的模式。然而在手动模式和自动运行模式之间切换就出现问题了,发现切换的时候响应不顺畅,原因是此时程序可能还在执行其他相应的动作。要按很多下才能读到按键发送的消息,请问有没有什么方法可以让该无线通信发送的消息优先响应的。 在网上查找貌似IRQ中断可以,但是不知道该怎么设置,麻烦谁要是知道的帮忙解决下!!谢谢
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2013-6-29 21:12:02 | 显示全部楼层
你又没有考虑过当你的遥控器按下的时候,nrf已经发了n个数据包过去了,小车全接收了,然后小车在自动和手动模式之间反复切换
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
 楼主| 发表于 2013-6-29 21:50:53 | 显示全部楼层
我把NRF的中断改成下面这段代码:发现程序一运行马上就进去中断了,而且出不来,不知道是什么原因: <br />
void&nbsp;EXTI9_5_IRQHandler(void) <br />
{ <br />
&nbsp;u8&nbsp;t; <br />
&nbsp;&nbsp;for(t=0;t&lt;20;t++) <br />
&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;delay_ms(1000); <br />
&nbsp;&nbsp;&nbsp;LED0=!LED0; <br />
<br />
&nbsp;&nbsp;} <br />
&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;EXTI-&gtR=1&lt;&lt;5;&nbsp; <br />
&nbsp; <br />
} <br />
//外部中断初始化程序 <br />
void&nbsp;EXTIX_Init(void) <br />
{ <br />
RCC-&gt;APB2ENR|=1&lt;&lt;4; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOC-&gt;CRL&amp;=0XFF0FFFFF;//&nbspC5输出&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOC-&gt;CRL|=0X00800000;&nbsp;&nbsp;//上拉/下拉输入模式&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GPIOC-&gt;ODR|=1&lt;&lt;5;&nbsp;&nbsp;&nbsp;&nbsp;//PC5默认上拉&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ex_NVIC_Config(GPIO_C,5,FTIR);&nbsp;//&lt;b&gt;由上升沿改为下降沿沿触发&lt;/b&gt;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MY_NVIC_Init(2,1,EXTI9_5_IRQChannel,2);//抢占2,子优先级1,组2&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-29 23:24:31 | 显示全部楼层
没有清除中断标志位.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
 楼主| 发表于 2013-6-30 14:59:19 | 显示全部楼层
回复【4楼】正点原子:
<br>---------------------------------
<br>&nbsp;&nbsp;EXTI-&gtR=1&lt;&lt;5;&nbsp;&nbsp;//这个应该就是清除中断标志位了,今天发现原因原来是程序中的if(NRF24L01_RxPacket(tmp_buf)==0)一直会给PC5高低电平的脉冲,所以一直触发它进中断,请问原子哥这种问题有没有办法解决!!
回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
 楼主| 发表于 2013-6-30 18:11:36 | 显示全部楼层
回复【4楼】正点原子:
<br>---------------------------------
<br>原子哥&nbsp;&nbsp;那个接收模式这边IRQ为什么一直处于低电平状态,而发送模式那边IRQ是处于高电平状态呀??刚刚用万用表测过&nbsp;发现这个现象
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
 楼主| 发表于 2013-7-1 09:08:57 | 显示全部楼层
回复【7楼】正点原子:
<br>---------------------------------
<br>那请问原子哥&nbsp;那个如果要设置中断接收该怎么修改!!这问题调试了好久都没办法解决,看了NRF24L01的中文资料貌似你的程序里面都已经&nbsp;把中断打开了,但是在接收端还是一直输出低电平!!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-7-1 10:19:27 | 显示全部楼层
NRF24L01我也都是查询的方式做的,要用中断,应该先设置NRF寄存器,之后设置STM32的外部中断,两者都正确的条件下,才可以实现.
<br>另外,中断也是在有中断事件的时候,才产生的,没有中断事件的条件下,是不会有中断信号发送出来的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
 楼主| 发表于 2013-7-1 14:03:15 | 显示全部楼层
回复【9楼】正点原子:
<br>---------------------------------
<br>嗯&nbsp;我是打算让接收端收到数据信号就用IRQ产生中断,把接收部分的代码写在中断部分进行。这样子就应该不会出现按键通信时候响应不顺畅的情况!!对了&nbsp;设置NRF寄存器我看过相关资料,感觉在CONFIG寄存器那边已经使能中断了,这样子是不是就可以了呀??
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-3-4
在线时间
14 小时
发表于 2015-6-7 19:02:08 | 显示全部楼层
我倒是做好了中断响应,不过貌似很不稳定,会死机
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2015-3-4
在线时间
14 小时
发表于 2015-6-7 19:03:27 | 显示全部楼层
我觉得,加入小车正在发射包,你中断进去了,这时2401还在发射模式,是接不到你的数据的,就会死机
回复 支持 反对

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2015-10-20
在线时间
18 小时
发表于 2016-10-16 23:16:35 | 显示全部楼层
正点原子 发表于 2013-6-30 20:49
我们没用到中断接收.

怎么没有用中断接收,是不是因为中断接收有问题才没有用的???
我现在也在做一个2401,一样是发送正常(开不开中断都正常),开着中断,接收就不行

我把例程改成中断接收也不行!总是无法进入中断,为什额???
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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