Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CANOpen
关于STM32裸机移植canopen出现的问题
发布于 2014-06-18 16:56:24 浏览:16208
订阅该版
根据公司需要,现在需要对canopen进行一个全面的了解。 目前也基本理解了canopen的协议内容,说说个人的成长之路吧。 - (1)先网上查找资料,了解canopen与can之间的关系。 - (2)查找CIA资料,仔细阅读DS301手册,一定要弄懂对象字典、PDO、SDO、NMT这些东西,理解之后才能更好地编程。 - (3)查找canfestival协议栈,先弄清楚这个协议栈,然后对照协议栈内容开始做stm32的裸机移植。 - (4)借鉴坛里的大牛移植方法,逐步调试结果。测试移植内容。 目前还是个新手,在裸机移植过程中也遇到了很多问题,现在还有个问题移植没能得到解决,望大神们不吝赐教: 最重要的两个函数 ```c canDispatch(&TestSlave_Data, &m); ``` ```c TimeDispatch(); ``` 根据坛里的移植意见,由于`canDispatch()`和`TimeDispatch()`存在互斥问题,故对它们设置相同的优先级分组和主次优先级。 一个STM32作为从机,PC机作为主站,然后上电后从机会发送正确的已进入Pre-optional状态的节点信息,但是主站通过发送命令让从机进入optional状态时,从机却没有反应。 经过调试发现,原本设置的节点ID会被篡改,而且对优先级设置不同,ID篡改的值也不同。 请问这可能是什么原因造成的! 下载附件 - [裸机CANOPEN移植.zip](/uploads/6324_04dce5d7d990893be56cb373a4711602.zip)
查看更多
29
个回答
默认排序
按发布时间排序
softwind
2014-06-19
这家伙很懒,什么也没写!
主站是您自己写的还是现成的主站?如果是现成的主站,是否需要配置。 从站的话,先设置本节点的NodeID,再发送BootUp命令。可以先不运行主站,使用CAN总线的调试软件按照DS301协议单独给从站发NMT(例如pre-operation, operation)命令,看看从站是否能收到命令并进行状态的切换。
天骄一射
2014-06-19
这家伙很懒,什么也没写!
首先感谢您的回答,主站其实就是PC机上一个CAN总线调试软件,主要负责查看来自从机的CAN数据和发送命令,这是没有问题的,因为用坛里移植的rtt+canopen+stm32是可行的。 从站的初始化也是没有问题的,请看我的初始化代码: ```c setNodeId(&TestSlave_Data, 0x02); //set node id @bruce ``` ```c setState(&TestSlave_Data, Initialisation); ``` 然后从机初始化完成后会向PC机发送已进入Pre-optional状态的数据。 按照DS301协议,我发送指令让从机进入optional状态却无效,然后我试着一步步调试,我发现从机也能接收来自调试软件的can的信息,并能顺利进入x `canDispatch()`函数,然后进入跟踪,发现bDeviceNodeId已经被改变了,所以在调用位于`void proceedNMTstateChange(CO_Data* d, Message *m)`中的 ```c if( ( (*m).data[1] == 0 ) || ( (*m).data[1] == *d->bDeviceNodeId ) ){ ``` 在判断后跳出了函数,执行结束。 然后我试着打印了bDeviceNodeId的值,发现bDeviceNodeId的值已经是0x04了。 我开始怀疑是中断的关系,我把定时器中断的优先级调高,发现bDeviceNodeId的值又变了。。。
softwind
2014-06-19
这家伙很懒,什么也没写!
先不要开启定时任务试试。 另外开机应该会发BooUp命令给PC机,然后自动进入preoperation状态。
天骄一射
2014-06-19
这家伙很懒,什么也没写!
恩 是的开机从机会发送BOOT-UP命令上来。 按照你的建议我注释了`TIM5_start();`,发现开机后从机不会发送boot-up命令上来
softwind
2014-06-19
这家伙很懒,什么也没写!
方便的话,把你的源代码发上来,最好是完整的工程文件。
天骄一射
2014-06-19
这家伙很懒,什么也没写!
好的 希望大牛帮我看看!顺便大家也共享下!共同学习 工程文件位于proj目录下,keil打开即可
天骄一射
2014-06-19
这家伙很懒,什么也没写!
另外我在sourceforge发现了Canopen.NET开源项目,基于c#开发的。 我上传一份,直接用C#打开即可。 下载网址:[http://sourceforge.net/directory/os:windows/freshness:recently-updated/?q=canfestival](http://sourceforge.net/directory/os:windows/freshness:recently-updated/?q=canfestival)
天骄一射
2014-06-19
这家伙很懒,什么也没写!
附件发不了了,。。貌似限额用光了。要的话私信我把
softwind
2014-06-19
这家伙很懒,什么也没写!
`test_slave()`函数中, 先把 `StartTimerLoop(&InitNodes);` 注释掉 改成 `InitNodes(&TestSlave_Data, 2);` 试一下。 另外函数 ```c void InitNodes(CO_Data* d, UNS32 id) { unsigned char deviceid=0; /****************************** INITIALISATION SLAVE *******************************/ if(strcmp(SlaveBoard.baudrate, "none")) { /*TestSlave.C是由专业工具生成的对象字典*/ /*建立映射对应关系 SDO(rx):602 SDO(tx): 582 TPDO: 182 282 382 482 RPDO: 从节点没有对象字典对应接收PDO*/ setNodeId(&TestSlave_Data, 0x02); //set node id @bruce deviceid=*(TestSlave_Data.bDeviceNodeId); /* init */ setState(&TestSlave_Data, Initialisation); //boot-up该节点 进入Pre-optional状态 deviceid=*(TestSlave_Data.bDeviceNodeId); } } ``` 中可以不调用`setNodeId()`设置NodeID,TestSlave.c文件中已经定义了变量 `UNS8 TestSlave_bDeviceNodeId = 0x02;` `CANOPEN_NODE_DATA_INITIALIZER`宏展开的时候已经定义好了。 当然调用也没关系。你先试一下。
天骄一射
2014-06-19
这家伙很懒,什么也没写!
恩 但是效果目前还是一样的。
撰写答案
登录
注册新账号
关注者
0
被浏览
16.2k
关于作者
天骄一射
这家伙很懒,什么也没写!
提问
2
回答
15
被采纳
0
关注TA
发私信
相关问题
1
CANOpen协议的简单介绍,连载之-一
2
我也来传一个CANOpen移植,RTT+STM32F107+CanOpenNode
3
菜鸟也出把力 RT-Thread+CanOpen(开源的CanFestival)
4
canfestival 例程是一个轴,要多加轴如何添加
5
移植canopen CanFestvial 在上电初始化时,开402例程,can接收线程挂掉了,什么问题引起的呢
6
canopen如何通过对象字典控制外设
7
谁有rtthread 移植好的canopen工程源码发一下
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-thread 缩写字典
2
RT Thread 源码分析笔记 :线程和调度器
3
RT-Thread项目助手v0.2.0 - 支持Env Windows
4
RttreadV5.10上,GD32F450Z RTC时间显示问题
5
rt-smart启动流程分析
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
聚散无由
2
篇文章
13
次点赞
Wade
2
篇文章
2
次点赞
catcatbing
2
篇文章
1
次点赞
xiaorui
1
篇文章
1
次点赞
zhuzhuzhu
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部