硬汉嵌入式论坛

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

[有问必答] STM32中,关于CAN通信相关

[复制链接]

27

主题

94

回帖

175

积分

初级会员

积分
175
发表于 2020-12-14 18:50:47 | 显示全部楼层 |阅读模式
1.png

CAN一次只能接发8个数据,所以要做分包处理嘛,第一次接触can,不知道这种需要多次分包的CAN要怎么传输数据呢?

求大佬们指导,最好有个参考教程!
回复

使用道具 举报

0

主题

159

回帖

159

积分

初级会员

积分
159
发表于 2020-12-15 08:04:40 | 显示全部楼层
用状态机进行展包处理,比如ID为01表示 要传送一段报文 长度信息放在这个ID为01的数据里,然后ID为02时表示开始按8字节顺序传数据,最后ID03比表示数据完毕,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2020-12-15 08:19:27 | 显示全部楼层
这个规则里面没有给出数据长度,仅给出数据帧个数?
回复

使用道具 举报

27

主题

94

回帖

175

积分

初级会员

积分
175
 楼主| 发表于 2020-12-15 08:31:12 | 显示全部楼层
eric2013 发表于 2020-12-15 08:19
这个规则里面没有给出数据长度,仅给出数据帧个数?

对,数据长度是不固定的
回复

使用道具 举报

27

主题

94

回帖

175

积分

初级会员

积分
175
 楼主| 发表于 2020-12-15 08:31:57 | 显示全部楼层
laxsystem01 发表于 2020-12-15 08:04
用状态机进行展包处理,比如ID为01表示 要传送一段报文 长度信息放在这个ID为01的数据里,然后ID为02时表示 ...

老哥,要按照上面这个协议来,因为是别人定的协议
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2020-12-16 08:39:45 | 显示全部楼层
Mark 发表于 2020-12-15 08:31
对,数据长度是不固定的

长度不固定的话,接收端怎么知道你发送了多少字节数据呢

手动计算CAN DLC?
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2020-12-18 17:20:09 | 显示全部楼层
可以通过stm的can底层获得DLC的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2020-12-18 17:52:49 | 显示全部楼层
叶子君 发表于 2020-12-18 17:20
可以通过stm的can底层获得DLC的

只能这样了,每帧数据后DLC值累加,看总数据个数
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2020-12-21 13:43:56 | 显示全部楼层
eric2013 发表于 2020-12-18 17:52
只能这样了,每帧数据后DLC值累加,看总数据个数

第一帧说明了接下来几帧是数据帧了,所以总长度就是 (帧数 -1) * 7 +(最后一帧dlc - 1)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106905
QQ
发表于 2020-12-22 09:44:03 | 显示全部楼层
叶子君 发表于 2020-12-21 13:43
第一帧说明了接下来几帧是数据帧了,所以总长度就是 (帧数 -1) * 7 +(最后一帧dlc - 1)

对,只能这样
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 13:08 , Processed in 0.222011 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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