找回密码
 立即注册
楼主: 4214351***

CAN数据发送求助大神 | 已解决

[复制链接]
  • TA的每日心情
    开心
    昨天 10:55
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4043

    积分

    论坛元老

    积分
    4043
    发表于 2023-7-24 14:41:41 | 显示全部楼层
    stcstc 发表于 2023-7-24 10:14
    楼主这个程序是官方例程修改的,例程我没有修改我这个怎么一直1ms发送一次呢?定时器的值修改和计算器1000 ...

    如果使用屠龙刀板子,将两路CAN的收发器都焊上,就可以进行收发通信了。
    屠龙刀例程包里面“14-CAN1-CAN2总线标准帧扩展帧同时使用收发测试”这个例程可以直接烧录到板子上进行测试。
    只开一路CAN控制器想自发自收是不行的,要同时打开两组CAN并将它们连在一起才可以进行通信。

    点评

    以下来至百度//,,,,,,,,,,,,,, 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,则退出离线状态 1:一旦硬件检测到128次11位连续的隐性位,则自动退出   发表于 2023-7-24 15:46
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    2

    主题

    13

    回帖

    74

    积分

    注册会员

    积分
    74
    发表于 2023-7-24 15:57:35 来自手机 | 显示全部楼层
    乘风飞扬 发表于 2023-7-24 14:41
    如果使用屠龙刀板子,将两路CAN的收发器都焊上,就可以进行收发通信了。
    屠龙刀例程包里面“14-CAN1-CAN2 ...

    以下来至百度// 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续的隐性位,则退出离线状态 //
    刚刚百度其它论坛的描述,如果按128次应答错误就重复发128次,实测一帧数据1ms左右数据串也只占定时器1000ms的四分之一,剩下来的四分之三时间应该进入空闲电平吧!
    感谢飞扬的回答
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:55
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4043

    积分

    论坛元老

    积分
    4043
    发表于 2023-7-24 17:02:32 | 显示全部楼层
    stcstc 发表于 2023-7-24 15:57
    以下来至百度// 0:离线状态的退出过程是,软件对INRQ位进行置1随后清0后,一旦硬件检测到128次11位连续 ...

    STC CAN控制器是通过以下指令退出BUS-OFF状态:
    1. CANAR = MR;
    2. CANDR &= ~0x04;  //清除 Reset Mode, 从BUS-OFF状态退出
    复制代码

    检查一下你使用的程序,看都有哪些地方有进行BUS-OFF恢复的。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9305

    回帖

    1万

    积分

    管理员

    积分
    13960
    发表于 2023-7-24 17:30:37 | 显示全部楼层
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 10:39
  • 签到天数: 47 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1163

    积分

    金牌会员

    积分
    1163
    发表于 2023-8-8 09:24:35 | 显示全部楼层
    乘风飞扬 发表于 2023-7-24 17:02
    STC CAN控制器是通过以下指令退出BUS-OFF状态:

    检查一下你使用的程序,看都有哪些地方有进行BUS-OFF恢 ...

    你在两个发送指令中间加一个1ms的延时试试,先试试能否成功
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 10:39
  • 签到天数: 47 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1163

    积分

    金牌会员

    积分
    1163
    发表于 2023-8-8 09:35:07 | 显示全部楼层
    还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时直接发送,接收端数据会冲掉的,你看看是不是这个原因,因为我的项目就遇到过,接收端我是用了两个数组保存的,接收中断如果发现接收数组1不是空的就直接存放到数组2里,如果同时接收到三个,就没办法解决了,这也是我比较困扰的地方,不知道其他朋友有没有好办法
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:55
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4043

    积分

    论坛元老

    积分
    4043
    发表于 2023-8-8 10:48:00 | 显示全部楼层
    llyymm 发表于 2023-8-8 09:35
    还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时 ...

    CAN总线数据帧接收缓冲区有64字节,就算前面帧接收完没处理,新的帧也会收到缓冲区里,只要在缓冲区溢出之前读取就不会丢失。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 10:39
  • 签到天数: 47 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1163

    积分

    金牌会员

    积分
    1163
    发表于 2023-8-10 21:08:43 | 显示全部楼层
    乘风飞扬 发表于 2023-8-8 10:48
    CAN总线数据帧接收缓冲区有64字节,就算前面帧接收完没处理,新的帧也会收到缓冲区里,只要在缓冲区溢出 ...

    我CAN网络有8个模块,有一块是代替上位机接收其他7块CAN数据,并根据数据发送CAN指令让下位机执行,我用的是早期的官方CAN程序,看来我要抽时间看看新代码了
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    回帖

    24

    积分

    新手上路

    积分
    24
    发表于 2023-8-22 11:03:38 | 显示全部楼层
    例程CAN发送里使用WHILE(B_Can2Send);死等,如果CAN没接节点或者故障,单片机就会一直死等,建议 改成while(B_Can2Send && --t);
    回复 支持 1 反对 0 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:55
  • 签到天数: 131 天

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4043

    积分

    论坛元老

    积分
    4043
    发表于 2023-8-22 11:20:43 | 显示全部楼层
    魔右手 发表于 2023-8-22 11:03
    例程CAN发送里使用WHILE(B_Can2Send);死等,如果CAN没接节点或者故障,单片机就会一直死等,建议 改成wh ...

    增加超时退出,故障中断里清除发送标志,这样会稳妥一些,谢谢提醒。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-4 10:54 , Processed in 0.107115 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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