CANopen——笔记

Posted 晓凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CANopen——笔记相关的知识,希望对你有一定的参考价值。

1. c语言的typedef高级用法 typedef void (*post_sync_t)(CO_Data*);

http://zhidao.baidu.com/link?url=_lDBGq_ukEjYngcgn4yVGnJum_wrrxfyUUTWRvFZ7WyXPm9Urm6shNAShHNByuYzCQT8C6Sq9hjHbgKoEqoSEK

 

2. 弄清楚为什么要用TIM_IT_CC1,而不是用TIM_IT_UPDATE?

http://www.dndev.com/cgi-bin/forum/topic.cgi?forum=2&topic=2263
这个是Canfestival移植到STM32平台上的例程,TIM5是利用了STM32的Timer5来实现定时中断的功能,相当于提供一个时钟节拍,

在中断服务程序中调用Canfestival协议栈的TimeDispatch()函数实现一些定时任务,STM32有很多定时器,这里只是用到Timer5而已。

其他的单片机也有自己的定时器,在定时中断或定时线程(针对多线程)中调用TimeDispatch()就可以了。

TimeDispatch()和CanDispatch()是Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

 

Ret = writeNetworkDictCallBackAI(d, /* CO_Data* d*/
nodeId, /* UNS8 nodeId*/
0x1010, /* UNS16 index*/
1, /* UNS8 subindex*/
4, /* UNS8 count*/
0, /* UNS8 dataType*/
(void *)&data,/* void *data*/
CheckSDOAndContinue,/* Callback*/
0, /* no endianize*/
0); /* no block mode */


check_and_start_node
start_node
masterSendNMTstateChange
canSend
writeNetworkDictCallBackAI
CheckSDOAndContinue
start_and_seek_node
start_node
masterSendNMTstateChange
canSend
setState
check_and_start_node
init_consise_dcf
read_consise_dcf_next_entry
readNetworkDictCallbackAI
CheckSDOAndContinue
SaveNode


write_consise_dcf_next_entry
writeNetworkDictCallBackAI
CheckSDOAndContinue
_writeNetworkDict
GetSDOClientFromNodeId



read_consise_dcf_next_entry
get_next_DCF_data
readNetworkDictCallbackAI
CheckSDOAndContinue

emergencyInit
RegisterSetODentryCallBack
scanIndexOD

switchCommunicationState
StartOrStop


sendEMCY
canSend

EMCY_setError
sendEMCY

EMCY_errorRecovered
sendEMCY

proceedEMCY

OnHeartbeatProducerUpdate
heartbeatStop
heartbeatInit
RegisterSetODentryCallBack
scanIndexOD

proceedNODE_GUARD
canSend


heartbeatInit

masterSendNMTstateChange
canSend

masterSendNMTnodeguard
canSend

masterRequestNodeState
masterSendNMTnodeguard
canSend

canDispatch
proceedNMTstateChange
setState
getNodeId

slaveSendBootUp //Transmit the boot-Up frame when the slave is moving from initialization state to pre_operational state.
canSend


NMT报文数据由2个字节组成,第0个字节是cs;第1个字节是节点ID;
cs可取值如下:
NMT_Start_Node
NMT_Stop_Node
NMT_Enter_PreOperational
NMT_Reset_Node
NMT_Reset_Comunication
节点ID取值0~127之一;
节点保护的ID是0x700;
m.cob_id = 0x0000; /*(NMT) << 7*/
m.rtr = NOT_A_REQUEST;
m.len = 2;
m.data[0] = cs;
m.data[1] = Node_ID;

 

TimeDispatch()和CanDispatch()函数。其中,Canfestival协议栈最重要的两个函数。

Canopen协议栈的基础DS301协议里有很多功能要求需要通过定时来实现或完成。
这些都是DS301协议的要求,TimeDispatch()只是CanFestival协议栈对DS301相关功能要求的实现而已。

 

以上是关于CANopen——笔记的主要内容,如果未能解决你的问题,请参考以下文章

CANopen笔记2

电脑可以直接连接canopen设备吗

canopen总线是啥?

CAN与CANOpen

CAN与CANOpen

CANopen学习