OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3115|回复: 3

F103VC移植CANOPEN遇到的一些问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-4-22
在线时间
2 小时
发表于 2020-4-24 10:01:21 | 显示全部楼层 |阅读模式
2金钱
网上找的CANOPEN 移植都有移植CAN Festival,想不移植CAN festival ,自己改F10X_can的代码实现移植CANOpen,但是到了底层接收数据遇到了问题,具体情况如下:先说下我为什么要改读取函数,下面是CAN标准数据帧的格式:
STD.png
CANOpen中SDO报文的规定
SDO.png
CANOpen中NMT报文的规定
NMT.png
于是我产生了疑惑,CANopen中的规定是往标准数据帧中套呢,还是说信号本身就和标准帧有所不同,
因为我是想实现板子与驱动器的通讯,于是我咨询了驱动器的技术支持,得到了如下回答:
1587692959(1).png
于是,因为CANOPEN中SDO报文和NMT报文以及PDO报文的帧格式与CAN标准的帧格式有所区别,我决定修改底层代码实现通讯

下面是具体代码问题:
这是CAN接收中断函数
1587691383(1).png
可以看到 CAN_Receive(CAN1, CAN_FIFO0, &rx_message);  是实现CAN接收的函数,进入这个函数,如图:
1587691651(1).png 我发现数据都是从CANX结构体中sFIFOMailBox数组中读取出来的        CANx->sFIFOMailBox[FIFONumber].RIR
找到其定义,如图
    1.png
2.png
发现CAN的数据都是存在这个FIFO邮箱的结构体里,4个32位数,第一个是ID,第二个是RIR,IDE之类的,第三、四个是数据,然而结构体数据从何而来,如何实现的,函数我翻了.C .H文件都没找到。

于是我卡住了。。。。
而且,RIR IDE 那一段为何用(RDTR)32位保存呢?是像串口那样8位一读,所以CAN信号线上实际也是32位吗,还是读取之后填充的?实现这些的代码都在哪?
我知道FIFO读取数据是硬件流控制,但是从FIFO邮箱中读取数据的具体实现代码在哪?
以上是我遇到的问题,希望大家指导一下小弟,也欢迎大家讨论。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14412
金钱
14412
注册时间
2018-8-3
在线时间
1156 小时
发表于 2020-4-24 14:48:39 | 显示全部楼层
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2020-4-22
在线时间
2 小时
 楼主| 发表于 2020-4-26 11:22:08 | 显示全部楼层
emm,售后理解错误,报文为标准CAN数据帧的帧格式,即以标准数据帧为载体。分享一下我的程序,欢迎讨论
/******pan.baidu.com/s/10gYmkU1fLzYYvdnl6bM0Aw[/url]******/
提取码:   k60f
回复

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-5-25
在线时间
2 小时
发表于 2020-5-12 19:18:12 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 17:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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