注意:本篇文章仅作为个人学习记录,由于本人技术水平有限,可能会有出错,欢迎各位指正,以便后续更改。
配置CAN通信涉及到MCU时钟,Port的IO端口配置,以及CAN的收发。
一、MCU配置
MCU时钟源配置,需要在MCU路径McuClockSettingConfig>McuClockReferencePoint 中配置添加时钟树所需的MCU资源参考点。
注意:在此位置添加时钟参考点频率为无效值时,需要在McuClockSettingConfig>PCC中增加时钟树外设,定义外设名称,外设时钟,分频,时钟频率。
二、Port配置
选择板子CAN3,依照原理图,配置对应的CAN3,需配置PTE15、PTE16
在对应的引脚号下面,可选相应的功能端口,在板子上实际接通得是CAN3
CAN的Tx引脚配置
PortPin Id:Port容器E的引脚ID
PortPin PCRn :选择使用的实际ID
PortPin Mode :引脚的功能选择,这里选择CAN5发送
PortPin Pull Enable :是否启用上拉电阻或下拉电阻
PortPin Direction:选择引脚方向为输入
CAN的Rx引脚配置
三、CAN配置
1、General配置
2、Controller配置
2.1 新建一个CAN Controller
2.2 Can controller的General配置
双击进入新建的CanController进行配置
这里的Can CPU Module Reference Clock和Can CPU Function Reference Clock,就为时钟选取,这里选了默认的系统时钟和MCU配置的CAN5时钟,收发模式及busoff均设置为中断方式。
2.3 波特率配置
新建波特率配置
双击进入配置
Can Module Clock (Hz):此参数为在CAN口配置的时钟频率CAN5
Can Controller BaudRate (Kbps) :设置CAN通信波特率默认为500
Can Controller BaudRate Config ID:ID默认为0
Can Controller Prescaller:分频系数,设置为2
Can Total Needed Tq number:Tq number系数是由时钟,分频系数,波特率计算出来的,计算公式:BaudRate = 时钟源 /(Prescaller x Tq number),计算可得值为12
Can Synchronization Segment (1 -> 1) :CAN同步段,设置为1。
Can Propagation Segment :CAN传播段
Can Phase Segment 1-2:CAN相位缓冲段1和2
Can Resynch Jump Width:同步跳跃宽度设置为1
Can Sample Point:采样点
说明:采样点 = (Synchronization Segment + Propagation Segment + Phase Segment 1)/ Tq number;且Synchronization Segment + Propagation Segment + Phase Segment 1 + Phase Segment 2 = Can Total Needed Tq number。
注意:Tq number不可过大,过大了就把分频系数调大,计算出来的Tq值就小。
2.4 CANFD配置
勾选 CAN FD Support,配置方法和CAN相似
2.5 CANFD第二采样点配置
3、配置CanHardwareObject
3.1 添加CanHardwareObject接受和发送
注意:Object的每一路CAN,必须按照先接受后发送,先FULL,后BASIC的排列;Can Object ID (MB Handle) 必须依次排列;
双击进入新建的接受类
Can Implementation Type :CAN是BASIC,还是FULL,FULL指接受固定的id,BASIC接受多个id,可设置id过滤,接受范围内的id报文
Can MB Type :发送或接受选择
Can Controller Reference:关联CanController
双击进入新建的发送类
3.2 设置id滤波
滤波由两个重要参数组成Filter Code 与 Filter Mask ,两者关系为 ID & Filter mask = Filter Code ,求掩码看重不重要,1表示重要,0表示不重要。例如id范围为0x600-0x67f
①第一位 6 -0110每一位都关心,故Filter mask为111=7,Filter Code为0110 = 6
②第二位 0~7 - 0000~0111,只关心第一位必须为0,所以Filter mask为1000=8,因为第一位必须为0,所以&操作后Filter Code第一位必须为0,其他位也为0,所以Filter Code 为0000=0
③第三位0~F - 0000~1111,这四位都不关心,所以Filter mask 为0000=0,Filter Code也为
0000 = 0
所以 Filter mask = 0x780,Filter Code = 0x600.
注意:如果Can Implementation Type 选择BASIC,必须勾选此选项,可设置为0,表示接受所有ID报文。