硬汉嵌入式论坛

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

[有问必答] CAN连续发送,会卡死或者数据发不出去,大家有解决方案吗?

[复制链接]

3

主题

4

回帖

13

积分

新手上路

积分
13
发表于 2023-5-29 19:10:13 | 显示全部楼层 |阅读模式
CAN连续发送,会卡死或者数据发不出去,大家有解决方案吗?


例如 以20ms一个发送周期,连续发送多个设备的CAN报文,

if(TIM6.CAN_SEND_FLAG)
{
     TIM6.CAN_SEND_FLAG=0;
     can1_tx(&MOTOR1);
     can1_tx(&MOTOR2);
     can1_tx(&MOTOR3);
     can1_tx(&MOTOR4);
}
加了delayms(10),就会好了。
如果不加延时,就会有数据丢失,请问这种情况,不加延时,大家是如何处理的啊?

另外希望硬汉哥也会给予指点!
万分感谢!


回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2023-5-29 22:57:14 | 显示全部楼层
连续两帧发布,中间需插入CAN的帧间隔,连续3个以上隐性电平即可
回复

使用道具 举报

3

主题

1222

回帖

1231

积分

至尊会员

积分
1231
发表于 2023-5-30 08:58:12 | 显示全部楼层
你硬件邮箱FIFO不就能容纳三帧吗?
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-5-30 10:00:09 | 显示全部楼层
HAL_CAN_IsTxMessagePending()这个函数是用来检查邮箱的挂起状态的
回复

使用道具 举报

8

主题

43

回帖

67

积分

初级会员

积分
67
发表于 2023-5-30 10:02:52 | 显示全部楼层
HAL_CAN_GetTxMailboxesFreeLevel()这个是用来检查邮箱是否可用的
Snipaste_2023-05-30_10-01-41.png
我这样用是可以连续发送的,你可以参考下
回复

使用道具 举报

5

主题

192

回帖

212

积分

高级会员

积分
212
发表于 2023-6-2 10:52:37 | 显示全部楼层
if(HAL_CAN_GetTxMailboxesFreeLevel(phcanx->hcan) != 0)   HAL库的这个函数可以查询是否有可用的邮箱
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 4 天前 | 显示全部楼层
TRX 发表于 2023-5-30 10:02
HAL_CAN_GetTxMailboxesFreeLevel()这个是用来检查邮箱是否可用的

我这样用是可以连续发送的,你可以参 ...

大佬牛逼,谢谢你
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 07:05 , Processed in 0.226995 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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