乘风飞扬 发表于 2023-7-24 14:41:41

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

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

stcstc 发表于 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的四分之一,剩下来的四分之三时间应该进入空闲电平吧!
感谢飞扬的回答

乘风飞扬 发表于 2023-7-24 17:02:32

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

STC CAN控制器是通过以下指令退出BUS-OFF状态:
CANAR = MR;
CANDR &= ~0x04;//清除 Reset Mode, 从BUS-OFF状态退出
检查一下你使用的程序,看都有哪些地方有进行BUS-OFF恢复的。

神农鼎 发表于 2023-7-24 17:30:37



【新提醒】CAN 的 入门参考资料,第三方 - CAN/Lin/CANOpen - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

llyymm 发表于 2023-8-8 09:24:35

乘风飞扬 发表于 2023-7-24 17:02
STC CAN控制器是通过以下指令退出BUS-OFF状态:

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

你在两个发送指令中间加一个1ms的延时试试,先试试能否成功

llyymm 发表于 2023-8-8 09:35:07

还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时直接发送,接收端数据会冲掉的,你看看是不是这个原因,因为我的项目就遇到过,接收端我是用了两个数组保存的,接收中断如果发现接收数组1不是空的就直接存放到数组2里,如果同时接收到三个,就没办法解决了,这也是我比较困扰的地方,不知道其他朋友有没有好办法

乘风飞扬 发表于 2023-8-8 10:48:00

llyymm 发表于 2023-8-8 09:35
还有一个事情你要确认,接收端是否能及时处理接收的数据,如果第一条收到但是还没有处理完,第二条没有延时 ...

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

llyymm 发表于 2023-8-10 21:08:43

乘风飞扬 发表于 2023-8-8 10:48
CAN总线数据帧接收缓冲区有64字节,就算前面帧接收完没处理,新的帧也会收到缓冲区里,只要在缓冲区溢出 ...

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

魔右手 发表于 2023-8-22 11:03:38

例程CAN发送里使用WHILE(B_Can2Send);死等,如果CAN没接节点或者故障,单片机就会一直死等,建议 改成while(B_Can2Send && --t);

乘风飞扬 发表于 2023-8-22 11:20:43

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

增加超时退出,故障中断里清除发送标志,这样会稳妥一些,谢谢提醒。
页: 1 [2] 3
查看完整版本: CAN数据发送求助大神 | 已解决