你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H743IIT6配置CAN如何同时接收标准帧和扩展帧?

[复制链接]
Wjff 提问时间:2024-9-2 13:29 / 未解决
![image.png](data/attachment/forum/202409/02/132746ngpp0o139vggj799.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")
image.png
收藏 评论14 发布时间:2024-9-2 13:29

举报

14个回答
xmshao 回答时间:2024-9-2 14:56:19
硬件可以根据通信帧的IDE位知晓是标准帧还是扩展帧。软件上也可以根据IDE位来识别标准帧或扩展帧的数据。


过滤器部分,我不确定若配置为32位过滤器,是否可以兼顾标准帧和扩展帧,即如果收到的只是标准帧,标准ID通过过滤就OK了。这点你可以验证下。


不过,分别以16位和32位宽来配置滤波器肯定是可以的,16位滤波器过滤标准帧,32位过滤器过滤扩展帧,滤波器可以设置多个 。
butterflyspring 回答时间:2024-9-2 16:22:46
•        FDCAN外设可以提供两套接收过滤器:标准ID过滤器, 扩展ID过滤器
•        标准ID过滤器最多可128个,扩展ID过滤器最多可64个
•        标准ID过滤器的在专用SRAM中的起始位置FDCAN_SIDFC->FLSSA[13:0],扩展ID过滤器的在FDCAN_XIDFC->FLESA[13:0]
•        每个过滤器可设置成将消息存入到接收FIFO0/1,或者接收buffer.
•        消息过滤匹配流程从过滤器0开始,直到找到匹配的过滤器为止,或者最终没有匹配到任何过滤器,过滤器本身的顺序也是有意义的, 且每个过滤器可使能或者禁止.
•        可设置对匹配到过滤器的消息接收或拒绝.
•        对于没有匹配到任何过滤器的消息也可设置接收或拒绝.

STM32 H743 FD CAN FILTER.PNG


Wjff 回答时间:2024-9-2 17:11:06

butterflyspring 发表于 2024-9-2 16:22
•        FDCAN外设可以提供两套接收过滤器:标准ID过滤器, 扩展ID过滤器•        标准ID过滤器最多可128 ...

我现在用的就是两个过滤器,但是只有过滤器0能用,这是我的配置image.png

image.png
Wjff 回答时间:2024-9-3 09:20:27

xmshao 发表于 2024-9-2 14:56
硬件可以根据通信帧的IDE位知晓是标准帧还是扩展帧。软件上也可以根据IDE位来识别标准帧或扩展帧的数据。</p>
<p>...

我分别设置了两个滤波器,只有滤波器0能用,滤波器1不起作用有可能是什么原因?

butterflyspring 回答时间:2024-9-3 10:42:35
Wjff 发表于 2024-9-2 17:11
[md]我现在用的就是两个过滤器,但是只有过滤器0能用,这是我的配置![image.png](data/attachment/forum/ ...

奇怪呀,你的代码中只看到FIFO1的配置,FIFO0的信息没看到。


理论上在 INIT 函数上都应该看到,然后至少两个过滤器配置给不同的 FIFO

STM32H743 FDCAN two fifo two frame.PNG
xmshao 回答时间:2024-9-3 10:47:04
你可以这样配置看看:


sFilterConfig.IdType = FDCAN_EXTENDED_ID;
sFilterConfig.FilterIndex = 1;
sFilterConfig.FilterType = FDCAN_FILTER_DUAL;
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
sFilterConfig.FilterID1 = 0x18010600;  
sFilterConfig.FilterID2 = 0x18010600;  
HAL_FDCAN_ConfigFilter(&hfdcan, &sFilterConfig);


或者


sFilterConfig.IdType = FDCAN_EXTENDED_ID;
sFilterConfig.FilterIndex = 1;
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;
sFilterConfig.FilterID1 = 0x18010600;  
sFilterConfig.FilterID2 = 0x1FFFFFFF;
HAL_FDCAN_ConfigFilter(&hfdcan, &sFilterConfig);

不过从你过滤配置来看,似乎也没啥问题。
Wjff 回答时间:2024-9-3 14:24:08

butterflyspring 发表于 2024-9-3 10:42
奇怪呀,你的代码中只看到FIFO1的配置,FIFO0的信息没看到。</p>
<p>

我有两路CAN,用FIFO1接收的,处理函数在CAN2里

Wjff 回答时间:2024-9-3 14:25:22

xmshao 发表于 2024-9-3 10:47
你可以这样配置看看:</p>
<p>

这样配置也能接收,但我需要接收0x581和0x18010600两帧

Wjff 回答时间:2024-9-3 14:30:02

Wjff 发表于 2024-9-3 14:25
这样配置也能接收,但我需要接收0x581和0x18010600两帧

不知道为啥滤波器配置为0时不能用

xmshao 回答时间:2024-9-3 14:45:41

Wjff 发表于 2024-9-3 14:24
我有两路CAN,用FIFO1接收的,处理函数在CAN2里

我只是演示了下扩展帧的配置,标准帧配置还是那几类。

怀疑你是否代码方面有小问题,很多地方就一字之差,比方0啊1啊,别被这些小细节坑了。

Wjff 回答时间:2024-9-3 14:47:47

xmshao 发表于 2024-9-3 14:45
我只是演示了下扩展帧的配置,标准帧配置还是那几类。</p>
<p>怀疑你是否代码方面有小问题,很多地方就一字 ...

[md]应该是没有问题的,因为单独接收标准帧或者扩展帧都可以接收到,两个一起就不行了

废鱼 回答时间:2024-9-4 18:44:45

可以考虑接收所有的CAN数据,不需要单独过滤,通过判断接收的ID和CAN类型来做处理。

Wjff 回答时间:2024-9-5 09:05:17

废鱼 发表于 2024-9-4 18:44
可以考虑接收所有的CAN数据,不需要单独过滤,通过判断接收的ID和CAN类型来做处理。
...

是这样吗,我这样试过也不行image.png

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版