硬汉嵌入式论坛

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

[BSP视频教程] BSP视频教程第25期:CAN/CANFD/CANopen专题,CAN知识点干货分享, 收发执行过程和错误帧处理(2023-01-03)

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2023-1-3 02:38:23 | 显示全部楼层 |阅读模式
CAN的知识点非常多,我们预计将制作3-4期专题视频,针对第1期视频,花了好几天时间将重要的知识全部给大家做个整理分享,了解后,大家会有个全面的认识。

大大方便以后实战测试和CAN规范查阅。


视频教程:

https://www.bilibili.com/video/BV1RM411h7tN



视频提纲:



参考资料:
1、CAN总线35周年特别篇 -- CAN总线的前世今生
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104480

2、WiKi百科CAN总线
https://en.wikipedia.org/wiki/CAN_bus

3、瑞萨CAN入门教程
https://www.armbbs.cn/forum.php?mod=viewthread&tid=14546

4、Kvaser入门教程
https://www.kvaser.com/can-protocol-tutorial/

5、MDK的CAN入门教程
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104463

6、CANFD教程:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=104728

7、博世的CAN2.0和CANFD规格书
https://www.armbbs.cn/forum.php?mod=viewthread&tid=117358







评分

参与人数 3金币 +42 收起 理由
cschen + 2 很给力!
KOALA + 20 很给力!
missfox + 20

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-3 02:44:41 | 显示全部楼层
更新完毕。
回复

使用道具 举报

4

主题

51

回帖

68

积分

初级会员

积分
68
发表于 2023-1-3 07:50:35 | 显示全部楼层
测试阶段那里讲的不好,不应该介绍使用二极管的接法(毕竟看不到PHY出来之后的电平)。应该直接说购买两块开发或者H7-Tools进行配套实验,这样才有实战价值
回复

使用道具 举报

19

主题

76

回帖

133

积分

初级会员

积分
133
发表于 2023-1-3 08:48:03 | 显示全部楼层
硬漢哥給力
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-3 10:06:42 | 显示全部楼层
ndx1986 发表于 2023-1-3 07:50
测试阶段那里讲的不好,不应该介绍使用二极管的接法(毕竟看不到PHY出来之后的电平)。应该直接说购买两块 ...




这个也是个非常好的知识点,给大家分享下,之前好几个网友咨询是否可以不使用PHY芯片也能使用CAN,这个是可以测试阶段玩的,测试软件应用层,STM32芯片大部分都是双CAN,所以可以测试。

然后就是也可以看电平效果,不过这个不是差分电平了。用来了解PHY芯片之前的电平也非常不错。

image.png


回复

使用道具 举报

1

主题

26

回帖

29

积分

新手上路

积分
29
发表于 2023-1-3 10:20:39 | 显示全部楼层
这个讲解真是太有用了,后面希望可以把采样率这个知识点科普一下。
错误帧的检测这个非常重要,一般CAN盒只是包错误帧,但很难检测出来是具体那个地方出错,我们的H7-TOOL要是能有这种功能可就太棒
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-3 10:23:15 | 显示全部楼层
ppcult 发表于 2023-1-3 10:20
这个讲解真是太有用了,后面希望可以把采样率这个知识点科普一下。
错误帧的检测这个非常重要,一般CAN盒 ...

H7-TOOL可以方便检测错误状态,有寄存器可以读取,后面TOOL升级把这些内容都展示出来。
回复

使用道具 举报

23

主题

1403

回帖

1472

积分

至尊会员

积分
1472
发表于 2023-1-3 10:35:37 | 显示全部楼层
cool,非常好,坐等后续更新。
代码不规范,亲人两行泪!
回复

使用道具 举报

31

主题

76

回帖

169

积分

初级会员

积分
169
发表于 2023-1-3 13:41:24 | 显示全部楼层
请教下大佬,两个节点同时发送数据的话,ID大的数据在仲裁失败后,是这次数据就不发送了,还是等ID小的数据发完以后,继续发送本次数据
回复

使用道具 举报

0

主题

5

回帖

5

积分

新手上路

积分
5
发表于 2023-1-3 14:06:09 | 显示全部楼层
支持,可以跟着系统性的学习canopen
回复

使用道具 举报

4

主题

51

回帖

68

积分

初级会员

积分
68
发表于 2023-1-3 14:20:05 | 显示全部楼层
eric2013 发表于 2023-1-3 10:06
这个也是个非常好的知识点,给大家分享下,之前好几个网友咨询是否可以不使用PHY芯片也能使 ...

实际项目中,大部分的问题都出在总线匹配电阻、采样点的位置不统一上。这些靠自己闭环玩发现不了的。个人理解,还是应该至少有两个独立CAN节点(可以是CAN分析仪或者H7-Tool这种)才能更好的体会CAN的特点。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-3 14:40:23 | 显示全部楼层
ndx1986 发表于 2023-1-3 14:20
实际项目中,大部分的问题都出在总线匹配电阻、采样点的位置不统一上。这些靠自己闭环玩发现不了的。个人 ...

不影响,这也是一个知识点,非常有必要给大家介绍下。

第3期是专门的实战,肯定不会这么玩。学习这个东西,我觉得应该灵活些,可以了解有这么东西,但不一定要实际项目中使用。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-3 15:37:15 | 显示全部楼层
ssimple 发表于 2023-1-3 13:41
请教下大佬,两个节点同时发送数据的话,ID大的数据在仲裁失败后,是这次数据就不发送了,还是等ID小的数据 ...

仲裁失败的节点,在总线空闲的时候会尝试重新传输。
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2023-1-3 18:25:09 | 显示全部楼层
还有CAN节点的负载能力问题,采样点问题,下期视频可以说说。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-4 01:03:08 | 显示全部楼层
byccc 发表于 2023-1-3 18:25
还有CAN节点的负载能力问题,采样点问题,下期视频可以说说。

嗯,安排上。
回复

使用道具 举报

1

主题

32

回帖

35

积分

新手上路

积分
35
发表于 2023-1-5 19:15:49 | 显示全部楼层
接触CAN还是刚从事嵌入式开发的时候。当时FD刚出来,还没有广泛使用。现在已经快忘光了。借着这个机会重新学习一下。
多谢多谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-6 00:21:20 | 显示全部楼层
watershade 发表于 2023-1-5 19:15
接触CAN还是刚从事嵌入式开发的时候。当时FD刚出来,还没有广泛使用。现在已经快忘光了。借着这个机会重新 ...

一起学习。
回复

使用道具 举报

8

主题

39

回帖

63

积分

初级会员

积分
63
发表于 2023-1-6 17:01:10 | 显示全部楼层
硬汉哥,请教一下,我目前遇到一个情况是,CAN发送会漏帧。目前是这样的,我的设备正常情况下有1000ms的心跳报文(目前2条)持续发送,也有200ms的其他报文在发(目前3条报文),进入其他菜单之后读取当前菜单的参数,以20ms的周期读取当前菜单中的参数2次。测试发现,这中间会有1个参数只读一次,会漏掉一次。周期性发送的报文的ID小,也就是优先级会高于菜单中读取参数的ID。正如您文章中讲的,我理解的两个ID同时启动发送,一个竞争失败,另一个发送成功之后,是不是竞争失败的这个会立即发呢?帮忙分析下呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-7 00:23:21 | 显示全部楼层
sunshine666 发表于 2023-1-6 17:01
硬汉哥,请教一下,我目前遇到一个情况是,CAN发送会漏帧。目前是这样的,我的设备正常情况下有1000ms的心 ...

使能重发没,可以使能下试试。
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2023-1-10 20:44:17 | 显示全部楼层
补充一个早年硬汉哥分享的CAN 中文资料。英文原版虽然好,但是看起来还是费劲,可以先看中文大致了解一下
回复

使用道具 举报

2

主题

12

回帖

18

积分

新手上路

积分
18
发表于 2023-1-10 20:44:40 | 显示全部楼层
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2023-1-12 21:07:17 | 显示全部楼层
STM32H7B0遇到一个奇怪的问题,CANFD帧数据速率5Mbps以下收发正常,6-12Mbps  数据接收正常,发送进入busoff,感觉延时补偿没有用,开不开都一样。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-13 14:02:18 | 显示全部楼层
siasevan 发表于 2023-1-12 21:07
STM32H7B0遇到一个奇怪的问题,CANFD帧数据速率5Mbps以下收发正常,6-12Mbps  数据接收正常,发送进入busof ...

用那款CANFD PHY芯片
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2023-1-13 14:08:21 | 显示全部楼层
eric2013 发表于 2023-1-13 14:02
用那款CANFD PHY芯片

ADM3050  最高支持12Mbps
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-1-14 09:32:20 | 显示全部楼层
siasevan 发表于 2023-1-13 14:08
ADM3050  最高支持12Mbps

身下就是合理的参数配置了,后面我也测试下8Msps,看看是否可行。

另外考虑使用特别备注了CANFD SiC试试。

https://www.nxp.com/products/int ... -improvement:CAN-FD
回复

使用道具 举报

4

主题

21

回帖

33

积分

新手上路

积分
33
发表于 2023-1-14 10:47:24 | 显示全部楼层
eric2013 发表于 2023-1-14 09:32
身下就是合理的参数配置了,后面我也测试下8Msps,看看是否可行。

另外考虑使用特别备注了CANFD SiC试 ...

可以试试,可能发送延时补偿没有配置好,按理说也不应该,5Mbps发送接收非常稳定,不丢帧不报错误帧,12Mbps接收也正常,不丢帧,5Mbps以上发送会出现错误,唯一影响就是发送延时补偿。这个节后抓下波形看看。
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-2-4 16:00:23 | 显示全部楼层
硬汉哥以后出ethernet和ethercat的教程嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-2-4 17:16:53 | 显示全部楼层
fcz 发表于 2023-2-4 16:00
硬汉哥以后出ethernet和ethercat的教程嘛

安排,工业协议栈一条龙,都搞下。
回复

使用道具 举报

2

主题

14

回帖

20

积分

新手上路

积分
20
发表于 2023-2-4 23:15:18 | 显示全部楼层
eric2013 发表于 2023-2-4 17:16
安排,工业协议栈一条龙,都搞下。

顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2023-3-27 19:28:16 | 显示全部楼层
太强了我汉哥!!!!!
回复

使用道具 举报

8

主题

39

回帖

63

积分

初级会员

积分
63
发表于 2023-4-4 11:22:37 | 显示全部楼层
下期预计什么时候出来呢?期待下期。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-4-4 13:33:43 | 显示全部楼层
sunshine666 发表于 2023-4-4 11:22
下期预计什么时候出来呢?期待下期。

本周应该可以录制。
回复

使用道具 举报

8

主题

39

回帖

63

积分

初级会员

积分
63
发表于 2023-4-4 20:21:53 | 显示全部楼层
eric2013 发表于 2023-4-4 13:33
本周应该可以录制。


期待期待。硬汉哥。最近在整CAN的时候,发现掩码模式下,过滤的不是那么干净。这个是掩码模式的特征决定了,还是与算法有关系呢?这一块可以深入讲解下么。还有就是实际项目中,如何使用掩码模式比较稳妥。如下配置:设定7E0 ~ 7E9 。实测7EA~7EF没有过滤掉,也会进来。

uint16_t StdIdArray[10] ={0x7e0,0x7e1,0x7e2,0x7e3,0x7e4,
                                                                0x7e5,0x7e6,0x7e7,0x7e8,0x7e9}; //定义一组标准CAN ID
        uint16_t      mask,num,tmp,i;

        CAN_FilterStruct.FilterBank = 2;                                //使用过滤器2
        CAN_FilterStruct.FilterMode = CAN_FILTERMODE_IDMASK;                //配置为掩码模式
        CAN_FilterStruct.FilterScale = CAN_FILTERSCALE_32BIT;        //设置为32位宽
        CAN_FilterStruct.FilterIdHigh =(StdIdArray[0]<<5);                //验证码可以设置为StdIdArray[]数组中任意一个,这里使用StdIdArray[0]作为验证码
        CAN_FilterStruct.FilterIdLow =0;

        mask =0x7ff;                                                //下面开始计算屏蔽码
        num =sizeof(StdIdArray)/sizeof(StdIdArray[0]);
        for(i =0; i<num; i++)                //屏蔽码位StdIdArray[]数组中所有成员的同或结果
        {
                tmp =StdIdArray ^ (~StdIdArray[0]);        //所有数组成员与第0个成员进行同或操作
                mask &=tmp;
        }
        CAN_FilterStruct.FilterMaskIdHigh =(mask<<5);
        CAN_FilterStruct.FilterMaskIdLow =0|0x02;                 //只接收数据帧

        CAN_FilterStruct.FilterFIFOAssignment = 0;               
        CAN_FilterStruct.FilterActivation = ENABLE;
        CAN_FilterStruct.FilterBank = 14;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-4-6 00:55:20 | 显示全部楼层
sunshine666 发表于 2023-4-4 20:21
期待期待。硬汉哥。最近在整CAN的时候,发现掩码模式下,过滤的不是那么干净。这个是掩码模式的特征决 ...

你这个貌似还是F1,F4的标准库设置,早期的标准这个配置设置的太难用了,还需要用户去手动移位。

可以考虑使用CMSIS-Driver的CAN驱动,很好用了,直接调用函数填API即可,次之是HAL库的CAN驱动,配置方便了些。

本身这个滤波是比较简单的东西。标准库搞得配置麻烦。
回复

使用道具 举报

13

主题

52

回帖

91

积分

初级会员

积分
91
发表于 2023-4-7 11:09:59 | 显示全部楼层
eric2013 发表于 2023-4-4 13:33
本周应该可以录制。

坐等,一直想搞搞can
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-4-10 15:14:14 | 显示全部楼层
正需要搞这部分东西,对FIFO和Buffer挺蒙的。就等出下一期了,等的好久。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-4-10 16:49:52 | 显示全部楼层
tengagic 发表于 2023-4-10 15:14
正需要搞这部分东西,对FIFO和Buffer挺蒙的。就等出下一期了,等的好久。

嗯,得加油了。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-4-20 01:29:31 | 显示全部楼层
硬汉哥,请教个问题。CANFD测试时不使用transceiver的话,使用上面那个接二极管的电路也是可以的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
 楼主| 发表于 2023-4-21 00:51:43 | 显示全部楼层
jingnij 发表于 2023-4-20 01:29
硬汉哥,请教个问题。CANFD测试时不使用transceiver的话,使用上面那个接二极管的电路也是可以的吗?

经典CAN是可以的,CANFD不知道行不行
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-8-3 10:23:48 来自手机 | 显示全部楼层
仲裁段那里写错了图片里写的“禁止高7bit都是隐性0”
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:34 , Processed in 0.311710 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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