一文教会如何在S32K144上移植CCP协议

目录

1.CCP代码实现

1.1CCP接口代码实现

首先,我们需要下载CCP的代码,在vector官网上下载一个即可,优快云上也可以下载。下载之后点击exe我们会得到三个文件,分别是CCP.c,CCP.h,CCPPAR.h

下面是整个移植的文件:

                                       

 ccp.c和ccp.h,ccppar.h这三个文件由官方提供,我们直接复制即可,我们需要编写的是CAN接口函数,即ccp_can_interface.c这个函数,首先把需要移植的函数放在ccp_can_interface.h中:

这些函数都是需要我们自己编写的,全局中断函数和CAN发送函数根据我们的底层实现,其它函数均可直接照抄vector给的例子。核心函数在于ccpSend(CCP_BYTEPTR msg)和CCP_recv(void)。ccpSend函数的数据类型和名称不可修改,因为我们这个函数要在ccp.c中调用

ccp_can_interface.c文件内容如下图所示:

接收函数要注意,最后我会讲到这里要注意的地方:下面的接收函数是重点:

CCPPAR.h函数中我们需要修改数据类型和设置收发的ID:

 1.2 CAN底层配置

CAN设置由SDK生成,将CAN组件添加进去即可,不需要做任何修改。

在CAN.c文件中,只放一个回调函数即可:

其他部分均在主函数中编写:

 二.移植过程中需要重点注意的地方

实际上,如果我们阅读CCP.c文件中的ccpSendcallback这个函数的话,我们会发现,实际上他就是判断下位机端收报文是否完成的一个函数。若收到报文,就会调用一次ccpSend这个函数,发送对应的报文,所以我们的核心是ccpSend这个函数,一定要确保我们的单片机能正常发送报文,CAN收发一定要调通。移植过程中有比较坑的地方,下面我会都列举出来:

2.注意事项

2.1 如何判断我们ccp协议是否移植成功?

在移植完成后,打开cantest,发送报文,报文指定ID是我们设置的ID。发送connect这条指令,若收到从机应答,则代表移植成功:

2.2 接收发送函数和接口函数编写时的要点

CAN收发的buff函数必须写在int main()函数内,不可做任何封装,笔者没搞懂为何要这样。如果用函数封装,或模块化编程写在另一个.c文件内再引用,就会整段丢失数据。

整段丢失数据:

ccpSend函数编写时要注意,此函数是定死的,固定写为void ccpSend(CCP_BYTEPTR msg),因为msg这个数组在ccp.c中也是这个名称,故不可修改。在while循环或者函数内部调用的时候要注意的是,ccpSend(CCP_BYTEPTR msg)这个函数写进去会报错,这是因为我们函数的格式不对,不能这么写。点开CCPPAR.h这个文件夹,我们会发现msg是个char类型的指针:我们要调用时,需将其写为ccpSend(&msg),这样就不会报错了。

2.3数据段明明设置的标准帧,但是自己变成远程帧而且ID总是0?

 这还是由于我们的BUFF函数没有配置对,或者函数没有放进主函数内部造成的。若前两者都没有问题,那我们需要检查我们的CAN组件,把FD那个选项的勾去掉。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值