armok. 发表于 2022-6-26 15:36:04

基于STM32CANOpen例程(从站心跳).zip

(VIP++福利贴:本资源由坛友 大东城主   提出申请,由阿莫网上搜集与上传,版权归原作者。)

能实现基本的canopen通信,实现心跳报文,代码中需要改变的内容为对象字典还有canopen文件夹下的.c文件,如果需要添加子协议如DS401协议,就需要添加其定义好的子协议,就能在代码中正常运行了

armok. 发表于 2022-6-26 15:36:14

jsh560 发表于 2022-11-30 20:47:11


博主你好,最近我也在学习CAN通信,有几个问题可以请教下吗:
远程帧和数据帧非常相似,不同之处在于:
(1)RTR位,数据帧为0,远程帧为1;
(2)远程帧由6个场组成:帧起始,仲裁场,控制场,CRC场,应答场,帧结束,比数据帧少了数据场。
(3)远程帧发送特定的CAN ID,然后对应的ID的CAN节点收到远程帧之后,自动返回一个数据帧。


如上解释,下位机ARM,根据过滤器里面的设置可以设置为接收远程帧或数据帧,比如我过滤器设置为接收远程帧,ARM接收到了,这个时候下位机ARM怎么知道我接收到的是个远程帧,也没一个标志位啥的?! 程序开发者以什么为依据(接收到远程帧也没一个标志位什么的),虽然CAN通信里面“(1)RTR位,数据帧为0,远程帧为1;” 但目前我看到的资料里面 没有说明RTR位是可以提取的勒?   请问我这个问题可以通过什么方法去实现勒?谢谢

tim4146 发表于 2022-12-1 07:31:34

jsh560 发表于 2022-11-30 20:47
博主你好,最近我也在学习CAN通信,有几个问题可以请教下吗:
远程帧和数据帧非常相似,不同之处在于:
( ...
(引用自3楼)

can控制器收到报文后产生中断,中断里面你读取的can报文是一个结构体,结构体里面会告诉你收到的报文的各种信息的

jsh560 发表于 2022-12-1 21:56:16

tim4146 发表于 2022-12-1 07:31
can控制器收到报文后产生中断,中断里面你读取的can报文是一个结构体,结构体里面会告诉你收到的报文的各 ...
(引用自4楼)

嗯 看到了RxMessage.IDE使用这个语句可以读出相关信息,但“查询模式 CAN_RX0_INT_ENABLE 为0        ,默认中断模式CAN_RX0_INT_ENABLE为1,在中断函数接收处理        ” 不知道这个去应用会不会影响效率 哈哈
页: [1]
查看完整版本: 基于STM32CANOpen例程(从站心跳).zip