打印

STM32使用CAN通讯时,FIFO 0和FIFO 1不能同时使用。

[复制链接]
10657|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 redlake 于 2010-4-5 11:15 编辑

  使用STM32做一个项目,要用到CAN,设计使用5个过滤器组,分别关联到FIFO 0和FIFO 1,接收采用中断接收,理论上关联到FIFO 0的过滤器组过滤的数据使用到USB_LP_CAN_RX0_IRQHandler中断处理函数。
  而关联到FIFO 1的过滤器组过滤的数据使用到CAN_RX1_IRQHandler中断处理函数。实际测试发现,所有有过滤器组无论设置关联到哪一个FIFO,都会只使用一个FIFO,即只会使用到一个中断处理函数。
  这个FIFO就是激活活状态的最低号码的过滤器组所选择的关联FIFO。
  同时还发现对过滤器激活寄存器CAN_FA0R设置没有任何效果,过滤器组始终是激活的。
  请问各位碰到过这个问题吗?CPU为STM32F103RBT6。其它CPU还没测试。

CAN过滤器组关联FIFO问题.jpg (240.55 KB )

CAN过滤器组关联FIFO问题.jpg
沙发
司徒老鹰| | 2010-4-5 12:05 | 只看该作者
没碰到过……不妨试试其他的

使用特权

评论回复
板凳
redlake|  楼主 | 2010-4-5 20:15 | 只看该作者
经过测试,当过滤器位宽设为16位时,出现以上问题,此时CPU会接收任何CAN总线上传输的数据,且只使用一个FIFO,而不进行任何过滤。当过滤器位宽设为32位时,一切正常。请问一下,有哪位正确设置过16位宽度的过滤器?指点一二。或是STM32过滤器本身在设置为16位宽度时就不正常。

使用特权

评论回复
地板
redlake|  楼主 | 2010-4-6 09:51 | 只看该作者
自己顶!

使用特权

评论回复
5
wangyuan_avr| | 2010-4-7 10:23 | 只看该作者
我也遇到了。现在只是用一个滤波器。我其实很想发挥两个fifo的效率。ST的can例程等于什么也没写,现在急需一个can的14个过滤器使用并外加两个fifo管理的例程。

使用特权

评论回复
6
IJK| | 2010-4-7 12:25 | 只看该作者
经过测试,当过滤器位宽设为16位时,出现以上问题,此时CPU会接收任何CAN总线上传输的数据,且只使用一个FIFO,而不进行任何过滤。当过滤器位宽设为32位时,一切正常。请问一下,有哪位正确设置过16位宽度的过滤器? ...
redlake 发表于 2010-4-5 20:15


过滤器位宽设为16位时,可以正常使用啊,我用的是IdList方式。

使用特权

评论回复
7
coslight| | 2013-9-6 08:30 | 只看该作者
同样苦恼此事啊,一直想将两个FIFO都用上,但是不知道可以用吗?

使用特权

评论回复
8
看我吴钩| | 2013-11-8 15:45 | 只看该作者
楼主,问题解决了吗?我也不是很明白,具体哪个FIFO中哪个邮箱接收,应该和报文滤波器组设置有关,设置报文过滤器标识符,使报文存入到指定的FIFO之中(FIFO0或者FIFO1),同时还需要设置FIFO0或者FIFO1的中断请求方式(接收到报文,FIFO满,FIFO溢出),如果两个设置的都为FIFO满中断,则两个FIFO都缓存3帧,而后进入中断处理。

使用特权

评论回复
9
fg888fg888| | 2018-4-12 14:41 | 只看该作者
本人在研究can的两个FIFO时,也同样遇到了这个问题,目前已经解决。
在解决问题之前,首先需要知道,fifo是与滤波器联合使用的,也就是说使用滤波器过滤时,才能同时使用两个FIFO,如果滤波器起不到作用,或者两个FIFO过滤的是一组ID,那么单片机默认使用FIFO0,如果两个滤波器过滤的是不同ID,两个FIFO才能同时使用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

14

帖子

0

粉丝