这是一篇入门帖,高手请指点一下,主要是记录我对CANOPEN协议的理解以及使用。图片还没研究好怎么上传,等后面研究好了补上。第一步;新建一个工程,配置好各种时钟之类的。当然你用的是原子的板子, 你也可以拿一个LED实验或者蜂鸣器实验的工程 直接来改,你把其他的注释掉就好了。
第二步;到网上下载CanFestival源码CanFestival-3-10,解压出来,并将文件夹名字改为CanFestival-3-10。移植需要用到的源文件在CanFestival-3-10src目录下,头文件在CanFestival-3-10include目录下。
第三部;开始移植。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢我昨天偶然间搞定了,objdictedit.py把TestMaster.od生成词典TestMaster.c就可以了,我这边移植完后感觉没怎么用上canfestival的感觉,只用TimeDispatch()就行了吗?我是有点迷茫,可否指点下?
canDispatch()和TimeDispatch()都要用上
canDispatch()需要放在CAN中断接收里面,通过这个函数把接收的数据发送给协议栈处理。
只有一个F1的板子肯定是不行的,你遵守了CANOPEN协议,那么你就应该把数据发送出来,通过USB_CAN来观察报文。
//中断接收函数
//USB_LP_CAN1_RX0_IRQHandler->HAL_CAN_IRQHandler->CAN_Receive_IT->HAL_CAN_RxCpltCallback
void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
{
__HAL_CAN_CLEAR_FLAG(hcan,CAN_IT_FMP0); //清除标志位
HAL_CAN_Receive_IT(hcan, CAN_FIFO0); //重新开启接收中断
__HAL_CAN_ENABLE_IT(hcan,CAN_IT_FMP0); //使能中断
can_msg.cob_id = hcan->pRxMsg->StdId;
can_msg.rtr = hcan->pRxMsg->RTR;
can_msg.len = hcan->pRxMsg->DLC;
for(uint8_t i =0; i < 8; i++)
can_msg.data = hcan->pRxMsg->Data;
canDispatch(&TestMaster_Data, &can_msg); //处理消息
//printf("HAL_CAN_RxCpltCallbackata[0]= 0x%X,Data[1]=0x%X ",hcan->pRxMsg->Data[0],hcan->pRxMsg->Data[1]);
UART_Mixed_TxTrigger(&muart1,(char *)hcan->pRxMsg->Data,hcan->pRxMsg->DLC);
}
我大概就这么调用的,回头买个USBCAN调试工具再看看情况吧
一周热门 更多>