问题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调试的更多相关文章

  1. C# Web应用调试开启外部访问

    在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...

  2. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  3. 微信公众号开发之VS远程调试

    目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...

  4. 写出易调试的SQL(修订版)

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

  5. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

  6. Hawk 4.7 单步调试

    单步调试的意义 已经编写的工作流,可能会因为某些外界环境的变化而出错,此时需要排除错误,我们可以使用单步调试. 单步调试的本质,相当于只使用前n个模块,这样就能看到每个步骤下,流的改变. 例子 还是上 ...

  7. Visual Studio 2012远程调试中遇到的问题

    有的时候开发环境没问题的代码在生产环境中会某些开发环境无法重现的问题,或者需要对生产环境代码进行远程调试该怎么办? Vs已经提供给开发者远程调试的工具 下面简单讲讲该怎么用,前期准备:1.本地登录账户 ...

  8. iOS逆向工程之Hopper+LLDB调试第三方App

    LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...

  9. 写出易调试的SQL

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

随机推荐

  1. Struts2 数据校验流程

  2. The first gui program by Qt

    #include<QApplication> #include<QPushButton> int main(int argc, char **argv) {     QAppl ...

  3. 更改PATH后,别忘了及时重启或刷新

    在windows环境下配了MinGW gcc编译器,结果编译时总提示找不到头文件.第一反应就是更改环境变量,但是将gcc目录添加到PATH中,再次运行编译依旧报错.多方查找后发现这样一句话:PATH在 ...

  4. iOS边练边学--父子控件之作为导航控制器的子类产生的问题以及网易新闻练习

    一.导航控制器的子类 作为导航控制器的子类,并且是导航控制器子类中的第一个,系统会默认给子控件添加EdgeInsert属性,把导航栏的宽度挤出来.但是系统只会默认修改第一个. 解决办法1:系统帮忙给第 ...

  5. SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。

    今天在用VS2013自带的LocalDB调整数据库时出错,在网上也搜到许多方案,如卸载SQLServer LocalDB的程序.重新创建实例等都没有解决我的问题,也重新修改以及修复Vs,问题依旧存在, ...

  6. BZOJ2115 [Wc2011] Xor

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  7. 与Java Web Service相关的若干概念(JAX-WS,JAX-RS)

    WS ,JAX-WS ,JAX-RS,REST,Restlet,SOAP l  JWS: 是指与webservice相关的J2EE(其实现在应该叫做Java EE吧)技术叫做 JWS(全称就是 jav ...

  8. eclipse中运行python脚本中有注释为中文的内容,报错:SyntaxError: Non-ASCII character '\xe5'

    '''Created on 2015年7月2日 @author: liujuan'''import sysreload(sys) 以上为注释的有个日期中文的,结果运行报错:SyntaxError: N ...

  9. UVA1262Password(第K字典序)

    题目链接 紫书P323 题意:两个6*5的字母矩阵,两个矩阵每列相同的字母,每列取一个,求按照字典序第k小的序列 分析: 对于第一个样例来说,我们得到{ACDW}.{BOP}.{GMOX}.{AP}. ...

  10. codeforce626D (概率)

    D. Jerry's Protest time limit per test 2 seconds memory limit per test 256 megabytes input standard ...