硬汉嵌入式论坛

 找回密码
 立即注册
查看: 527|回复: 8
收起左侧

[有问必答] STM32的bxCAN的问题

[复制链接]

32

主题

103

回帖

199

积分

高级会员

积分
199
发表于 2024-1-12 16:15:10 | 显示全部楼层 |阅读模式
1、512字节的SRAM指的是哪里?指的是FIFO里的3个邮箱吗?可是主从接收FIFO加起来一共12个邮箱,512不能被3整除,没法均分。

2、问题1里截图,CAN2无法直接访问SRAM,但是图224里,CAN1、CAN2能访问的内容是一样的啊

3、筛选器匹配索引具体是什么东西呢?预期值列表、阵列索引分别是什么。
4、程序数据通常会复制到SRAM中的位置,CAN2没法直接访问SRAM,是不是这一节的内容不适用于CAN2
5、接收数据的时候已经经过一次筛选了,通过筛选的才要接收,这里又要筛选一遍?
6、一共28个筛选器组,但是示例里,左边是0——13,右边是0——14,加起来是29啊。这个图到底什么用呢?


7、一个FIFO可以和多个筛选器绑定吗?比如绑定筛选器1,4个16位标识符匹配,然后再绑定个筛选器2,4个16位标识符匹配,这样一个CAN就可以接收8个标准ID的信息了,这样可行吗?谢谢
我认识中文,但是不理解什么意思。


回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2024-1-12 16:31:56 | 显示全部楼层
补一下图,图1,问题1
双can图1.png
问题2的图
双can图2.png

问题3——6的图
can过滤器.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2024-1-13 08:35:39 | 显示全部楼层
1、他们没有倍数关系,注意CAN1有发送3+接收6 = 9, CAN2也有9, 也就是18个。从截图上来看,他们不是一个地址空间,512字节SRAM是独立的RAM空间。而发送和接收缓冲是独立的寄存器存储的。
2、框图不详细,使用CAN2的时候,必须使能CAN1的时钟才可以使用。
3、筛选器比较简单,这个是寄存器控制的,就是简单的ID过滤,有列表模式和屏蔽模式。
4、CAN1辅助完成的。
5、这个地方你应该完全没有理解,过滤就是消息来了,ID过滤,根据用户的配置,消息会被存放到FIFO0或者FIFO1
6、这个地方你也没有理解的,一个筛选器可以配置两个16bit或者1个32bit过滤。
7、可以的,可以所有筛选器都帮顶到一个FIFO上。
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2024-1-16 22:57:13 | 显示全部楼层
eric2013 发表于 2024-1-13 08:35
1、他们没有倍数关系,注意CAN1有发送3+接收6 = 9, CAN2也有9, 也就是18个。从截图上来看,他们不是一个 ...

问题5,左边是筛选器组,右边是筛选器编号,这都是已经固定好的了,是吧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106847
QQ
发表于 2024-1-17 08:53:24 | 显示全部楼层
伊森亨特 发表于 2024-1-16 22:57
问题5,左边是筛选器组,右边是筛选器编号,这都是已经固定好的了,是吧

不是,0-27的筛选器,每个筛选器可以配置为1个32bit过滤,或者两个16bit过滤。
回复

使用道具 举报

35

主题

106

回帖

211

积分

高级会员

积分
211
发表于 2024-1-24 17:14:06 | 显示全部楼层
问题1:SRAM指的是程序运行过程中保存变量的位置(具体的可以看B站硬汉哥的关于堆栈的视频)。SRAM和CAN的邮箱没有一毛钱的关系,邮箱的FIFO是在CAN模块里面。两者的物理空间就不在一起。
回复

使用道具 举报

35

主题

106

回帖

211

积分

高级会员

积分
211
发表于 2024-1-24 17:14:22 | 显示全部楼层
本帖最后由 坚持再坚持 于 2024-1-24 19:29 编辑

我也是刚结束CAN,说一下浅薄的认识:1:STM32接收的数据是暂存在ASRAM里面的,要发送的数据也是先暂存在SRAM里面的,然后再通过邮箱。
2.图2中CAN2.0B的“控制状态配置”寄存器明显多于CAN2,所以需要先配置公用的CAN2.0B。,所以才说CAN2无法直接访问SRAM。
3.CAN接收的信息是需要筛选的,不是所有的信息都接收的。具体分为列表模式和掩码模式。列表模式在16位下最多能识别4个(标志模式下的11位必须一致),掩膜下只关注其中设定的位。
4.STM32收受到了CAN协议,需要存在SRAM中,不是不适用于CAN2,是需要先配置好CAN2.0B。
5.就筛选一次,就是筛选器执行的。
6.硬汉哥,已经回复了。比如有时候需要筛选的信息不需要32位的ID,就用16位的。
7.具体的没有测速过,因为现在是刚回使用,都是正常配置。不知道对不对:在标准库中是先选择筛选器,然后让筛选器绑定FIFO。
回复

使用道具 举报

32

主题

103

回帖

199

积分

高级会员

积分
199
 楼主| 发表于 2024-1-25 10:43:06 | 显示全部楼层
坚持再坚持 发表于 2024-1-24 17:14
我也是刚结束CAN,说一下浅薄的认识:1:STM32接收的数据是暂存在ASRAM里面的,要发送的数据也是先暂存在SR ...

问题6,主要是图没看懂,初始化can的时候,需要设置一个参数,
[C] 纯文本查看 复制代码
uint8_t CAN_FilterNumber;          /*!< Specifies the filter which will be initialized. It ranges from 0 to 13. */

这个参数设置的图中的筛选器组,还是筛选器编号呢?
筛选器组的话,FIFO0和FIFO1的左边加起来是0——13
筛选器编号的话,FIFO0的筛选器编号是0——13,FIFO1的筛选器编号是0——14,不一样啊。
回复

使用道具 举报

35

主题

106

回帖

211

积分

高级会员

积分
211
发表于 2024-1-25 13:35:45 | 显示全部楼层
伊森亨特 发表于 2024-1-25 10:43
问题6,主要是图没看懂,初始化can的时候,需要设置一个参数,
[mw_shl_code=c,true]uint8_t CAN_Filter ...

筛选器编号不重要,总共有28个筛选器组,CAN_FilterNumber就是你想使用哪一个筛选器组。每个筛选器组有2个32位的寄存器,如果配置成32位的筛选模式,那么就有2个筛选器编号,如果配置成16位的,就拆分成4个筛选器编号。那个手册里面的图232应该是个示意图。中文手册就这样,翻译的比较晦涩难懂。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 13:36 , Processed in 0.361016 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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