大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是MCAL的CAN模块配置介绍,希望能对你有所帮助
一、CAN模块配置介绍
之前也分享过Autosar的基础知识,不清楚且有兴趣的同学可参考之前的文章:
在做车载相关的项目中,一般都会用CAN(或CAN FD)通信,当然也有Lin,FlexRay,更高级的甚至用以太网。初学者对这几个常用的车载总线不太清楚的,可以移步之前的文章:
先简单介绍一下Autosar中CAN是如何通信的,数据流,Autosar如何配置。
先来回顾一下Autosar的架构:
COM------PDUR------CANIF------CAN上面这些是属于Autosar里面的BSW模块,除了这些需要配置,MCAL也需要进行配置才行,也就是非Autosar架构中的底层驱动,类似于SDK。
本文也主要分享MCAL的CAN配置需要配置哪些东西

二、CAN控制器的配置
2.1 General配置
CanBusoffProcessing:BusOff的处理方式,中断(INTERRUPT)或者轮询(POLLING)
CanControllerActivation:是否激活这路CAN
CanControllerId:节点号,从0开始增加,必须连续。
CanRxProcessing:接收到报文后的处理方式,中断(INTERRUPT)或者轮询(POLLING)
CanTxProcessing:成功发送报文后的处理方式。中断(INTERRUPT)或者轮询(POLLING)。
CanWakeupFunctionalityAPI :Can唤醒的一些API函数是否可用,只有当支持CAN唤醒时,这个选项才可以勾选。
CanWakeupProcessing:CAN唤醒的处理方式,中断(INTERRUPT)或者轮询(POLLING)
CanWakeupSupport:是否支持CAN唤醒
CanControllerDefaultBaudrate :波特率的配置
CanPeripheralBusClockRef:CAN时钟源选择
2.2 波特率配置
配置界面:
标准CAN的波特率配置:
CanControllerProSeg:传播段
CanControllerSeg1:相位缓冲段1
CanControllerSeg1:相位缓冲段2
CanControllerSyncJumpWidth:同步跳转宽度
这几个参数的含义的话,之前调试过CAN驱动的应该就知道了,这里简单介绍一下,就是CAN波特率的计算方法:
波特率 =(CAN时钟 / 波特率分频系数) / 位时间
而 位时间 = tq + tBS1 + tBS2
CAN总线里通过对CAN 节点里的CANBTR寄存器的控制,来实现不同波特率的通信。
1)同步段:一个位的起始位置,CAN-bus规定跳变沿为同步信号,
2)传播段:发送节点发送一个位跟接收节点接收到这个位之间存在网络传播延迟,传播段则是为了补偿这段传播延迟。
3)相位缓冲段1和相位缓冲段2:由于采样点位置在相位缓冲段1跟相位缓冲段2之间,通过设置相位缓冲段1和相位缓冲段2的值,可以调整采样点位置,保证每个位采样点一致。缓冲段的长度调节范围则是由
4)同步跳转宽度(SJW):决定了缓冲段的长度调节范围。
CAN FD的波特率配置
根据实际项目需求配置对应的波特率即可
CanControllerTxBitRateSwitch:CAN波特率是否可变
三、CanHardwareObject配置
3.1 General配置
配置界面如下:
1)配置这个HOH的类型是basic CAN (多个Pdu对应一个HardwareObject)还是Full CAN(一个Pdu对应一个HardwareObject)
2)配置CAN 报文是标准帧还是扩展帧。
3)配置HOH的ID号,从0开始
4)配置这个HOH是用来接收还是发送的
5)配置这个HOH属于哪一个CAN通道
3.2 Filter配置
要接收的CANID都需要在filter中配置,CAN标准帧在StandardFilter,扩展帧的话是在ExtendFilter中添加
每一个item就是一个filter,每个filter里面可以配置ID0,ID1,filter type。对于每个接收报文的HOH来说,只有通过了这个filter,接收的CAN报文就会被分配到这个HOH,再往上传递到CANIF
Filter的类型有:
a)CAN_FILTER_ELEMENT_DISABLED:不使能filter
b)CAN_RANGE_FILTER:ID0 =< 接收ID <= ID1 则通过,也就是在ID0和ID1的范围内都能接收到
c)CAN_CLASSIC_BIT_MASK_FILTER:接收ID & ID1 == ID0 则通过,也就是这种类型的过滤,如果ID1配置为0X7FF,则只能接收到当前配置的CAN ID。
d)CAN_DUAL_ID_FILTER:ID0和ID1都通过,即只能接收ID0和ID1
ID0和ID1的配置是取决于filter type的,下面以CAN_CLASSIC_BIT_MASK_FILTER类型为例介绍ID0和ID1的配置。
原理:能通过的报文ID数量完全取决于屏蔽码(掩码),设得宽,则可以通过的多(所有位为0,则任意报文ID都可以通过),设得窄,则通过的少(所有位设为1,则只有一个能通过)
至此,MCAL的CAN模块就配置完成了,配置完成后,点击保存,然后再右键选择Verify Project,看看是否有报错,没报错就点击Generate Project,生成配置代码,然后同步到编译整个项目的工程中
最后,如果觉得有帮助,希望你能一键三连(分享,点赞,在看),你们的认可是我持续输出的动力,感激不尽
欢迎大家骚扰,请备注“公众号”