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: "微软雅黑", "宋体", ...
随机推荐
- '$.browser.msie' 为空或不是对象
最近决定整改一下jquery 的版本,于是就将 jquery 从 1.7.2 升级到了 1.9.1 结果就发现原有的插件报错了. '$.browser.msie' 为空或不是对象,这个是jQuery错 ...
- BZOJ1968 [Ahoi2005]COMMON 约数研究
Description Input 只有一行一个整数 N(0 < N < 1000000). Output 只有一行输出,为整数M,即f(1)到f(N)的累加和. Sample Input ...
- 洛谷P2014 TYVJ1051 选课
题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...
- c链表实现遇到的错误
想完成一个链表发现有错误,代码如下: //http://ac.jobdu.com/problem.php?pid=1511 //֮ǰÓÃlistʵÏֵ쬽ñÌìÊÔÒ»ÏÂÓÃstruct ...
- easyui之datagrid的使用
http://www.cnblogs.com/ruanmou001/p/3840954.html 一.神马是easyui jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery ...
- 【ASP.NET Web API教程】6.1 媒体格式化器
http://www.cnblogs.com/r01cn/archive/2013/05/17/3083400.html 6.1 Media Formatters6.1 媒体格式化器 本文引自:htt ...
- MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论
MySQL ACMAIN_CHM06-26 16:36 等级 84次回复 [求证&散分]MySQL 中 where id in (1,2,3,4,...) 的效率问题讨论 庆祝本月大版得 ...
- HTTP负载测试——Tsung
参考资料:http://blog.jobbole.com/87509/ 如何生成每秒百万级别的 HTTP 请求? 在进行负责测试时要牢记一件重要的事:你能在 Linux 上建立多少个 socket 连 ...
- 快速搭建ssh(最终版)
一个月又忘了.还是做个笔记.自己看下就能想起来... 1.在MyEclipse中新建web Project 2.首先整合struts
- 整理时下流行的浏览器User-Agent大全
总结整理时下流行的浏览器User-Agent大全 此文章转至:http://www.360doc.com/content/12/1012/21/7662927_241124973.shtml 用于学习 ...