Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CANOpen
关于STM32裸机移植canopen出现的问题
发布于 2014-06-18 16:56:24 浏览:16079
订阅该版
根据公司需要,现在需要对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.1k
关于作者
天骄一射
这家伙很懒,什么也没写!
提问
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如何通过对象字典控制外设
推荐文章
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
如何在master上的BSP中添加配置yml文件
2
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
3
RT-Thread 发布 EtherKit开源以太网硬件!
4
rt-thread使用cherryusb实现虚拟串口
5
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
热门标签
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
14
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部