STM32canopen调试
问题1:用usbcan监测不到can口的报文
属于接线问题
CANopen程序总使用的是can1 对应的接下口在J1的1和2口,而其接口排序是从外向里排序,故最外面的为1号接口,由于接线时,按照左边的顺序来数的(左右接口排序对称),把can1H接到了can2L上,can1L接到了can2H上。最后通过用万用表测can收发器的引脚与接口的通断找到了对应的接口。

问题2:还是收不到报文
此时注意到用于can收发的定时器TIM4的配置没更改过来

问题3: 当读数据的时候 while循环可以退出,但当写数据的时候 while循环不能退出
在解决前两个问题时,把定时器设置好了,但是在设置定时器时,最后一个还是没改成TIM4,就是虽然吧TIM4配置好了,但最后还是没打开,导致TIM4的中断还是没开启
而读数据的循环之所以能够退出是因为他的退出条件是
while (getReadResultNetworkDict (&ObjDict1_Data, 0x04, &rdata, &size,&abortCode) == SDO_UPLOAD_IN_PROGRESS);
而getReadResultNetworkDict函数可以返回值有3种情况

可以返回 SDO_TINISHED 这种情况是SDO处理过程完全正确
d->transfers[line].state 这个值通常返回的是SDO_UPLOAD_IN_PROGRESS,所以又会返回来循环执行
SDO_ABORTED_INTERNAL 这个属于中断退出
实际上根据while的条件,退出while循环的可能有两种,一种是正常处理完毕 一种是中断退出
后来分析得到的结果是虽然这里退出了 但属于终断退出
而getWriteResultNetworkDict函数可以返回值有2种情况

SDO_TINISHED 或者非 SDO_TINISHED
因此,当中断时,写的while循环会一直等待。
问题4: 可以读到数据,但在写的时候从站返回05 04 00 00 错误码,也就是SDO协议超时

最后发现是can口在配置时 没有配置滤波器参数,打开滤波器参数之后,可以写数据成功

问题5:从上面发现,有些报文后面,主站还是会发出80 00 00 00 的错误码,其属于通用型的错误 而且虽然can口监测到了冲站返回的报文,但是对象字典里面并没有数据,也就是数据并没有存到对象字典中,查看while循环退出后的返回值为0x85,表明也是中断退出。
尝试几次之后发现,如果所读的对象字典的数据的长度不为4个字节(小于4),则会返回错误码 如果数据长度为4个字节,则不会返回错误码,如果数据长度大于4个字节,则while循环不会退出。推测这个可能是SDO读取数据没完成,因为跟踪readNetworkDict函数发现 里面有件SDO数据的长度固定为8个字节

但后来想了 can在传输数据时,每次只能传输8个字节。但能否把SDO的数据长度改为可变的,当数据长度小于4个字节时,can口一次性传完,当数据长度大于4个字节时,分多次连续传输。
但是后来又发现,即使所读取的对象字典的数据长度为4个字节,主站不会发送错误代码,但如果数据不是4个NUS8类型的数据,读完之后,对象字典里面的数据仍然全为0,这说明数据在保存的时候也出了问题。
STM32canopen调试的更多相关文章
- C# Web应用调试开启外部访问
在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...
- NodeJs之调试
关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...
- 微信公众号开发之VS远程调试
目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...
- 写出易调试的SQL(修订版)
h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...
- tomcat开发远程调试端口以及利用eclipse进行远程调试
一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里: SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...
- Hawk 4.7 单步调试
单步调试的意义 已经编写的工作流,可能会因为某些外界环境的变化而出错,此时需要排除错误,我们可以使用单步调试. 单步调试的本质,相当于只使用前n个模块,这样就能看到每个步骤下,流的改变. 例子 还是上 ...
- Visual Studio 2012远程调试中遇到的问题
有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办? Vs已经提供给开发者远程调试的工具 下面简单讲讲该怎么用,前期准备:1.本地登录账户 ...
- iOS逆向工程之Hopper+LLDB调试第三方App
LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...
- 写出易调试的SQL
h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...
随机推荐
- 在Oracle里,表的别名不能用as,列的别名可以用as
列的别名也可以不用as,如:select t.a xxx from table t 在Oracle数据库中,数据表别名是不能加as的,例如: select a.appname from appinfo ...
- DML语言练习,数据增删改查,复制清空表
Connected Connected as TEST@ORCL SQL> select * from t_hq_bm; BUMBM BUMMC DIANH ---------- ------- ...
- WPF学习(一)--布局控件简介
WPF的4种基本布局介绍 1.Grid的布局 这个就没啥特别好说的,其实,基本上复杂的布局,都需要用到Grid. 主要就是对行和列进行进行设置和定义. 1.行表格 列表格: 包含行和列的表格 2.St ...
- Pro Git 读书笔记
一. 起步 1. 集中式版本控制缺点:中央服务器的单点故障. 分布式版本控制优点:客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来. 这么一来,任何一处协同工作用的服务器发生故障,事后 ...
- .Net身份验证概述
一直以来,所有的系统基本都会有用户的登陆验证过程,整个过程其实也不难理解,就是对于cookie的解析.微软的.Net平台围绕用户身份验证授权也有好几个版本了,从早期的Membership到Identi ...
- 执行quartz报错java.lang.NoClassDefFoundError: javax/transaction/UserTransaction
使用maven ,可以在 http://mvnrepository.com 中去查找 pom 配置如何写 <!-- https://mvnrepository.com/artifact/org. ...
- Teradata 语句简单优化
Teradata 基本查询语言和SQL server 是一致的.有很小的区别. 功能没有SQL 全面,界面没有SQL 好看~ 1. teradata 里面经常会报一种错误: no enough spo ...
- TCP/IP详解 笔记八
UDP协议 UDP是传输层协议,提供无连接不可靠的数据传输,其优点失效率高,确定确定是无序不可靠. 报文格式 UDP头部 TCP和UDP的端口号是独立的 UDP长度是指UDP数据报的总长度 UDP的校 ...
- FFTW中文参考
据说FFTW(Fastest Fourier Transform in the West)是世界上最快的FFT.为了详细了解FFTW以及为编程方便,特将用户手册看了一下,并结合手册制作了以下FFTW中 ...
- 使用JMeter创建数据库(Mysql)测试
我的环境:MySQL:mysql-essential-5.1.51-win32 jdbc驱动:我已经上传到csdn上一个:http://download.csdn.net/source/3451945 ...