基于S32K SDK FLEXCAN的通信
1 前言
在NXP S32K SDK中FLEXCAN提供了CAN和CAN FD的驱动。本文讲解基本CAN通信的程序方法。
2 基本流程
第一步:基本硬件配置
这一步主要配置S32Kxxx MCU的硬件资源。如时钟,引脚,CAN物理层。这一步利用Processor Expert完成。
第二步:定义CAN通信配置及邮箱。
第三步:初始化CAN实例及缓冲区。
第四部:定义回调函数及处理内容。
3 实例
3.1硬件资源
MCU: S32K118
使用引脚:
PTC1:按键
PTA10:LED输出
PTB1:CAN Tx
PTB0:CAN Rx
3.2 实现功能
a. 按下按键后以500Kbps波特率发送ID=1,长度为8,内容为0x01 02 03 04 05 06 07 08的数据。
b. 当接收到500Kbps波特率 ID=2的帧时,点亮LED灯。当接收到ID=4的帧时,关闭LED灯。
3.3 实现
3.3.1 MCU配置
在Processor Expert中:
a. GPIO配置
按使用引脚将PTA10, PTC1分别设置为输出和输入如下:
设置CAN通信所用引脚:
b. 设置CAN硬件参数
这部分设置在SDK生成代码后对应:canCom1.c的如下内容:
const flexcan_user_config_t canCom1_InitConfig0 = {
/*CAN通信配置结构体名:canCom1_InitConfig0*/
.fd_enable = false, /*不使用CAN FD*/
.pe_clock = FLEXCAN_CLK_SOURCE_PERIPH, /*CAN通信使用外设时钟源*/
.max_num_mb = 10,/*邮箱数量为10*/
.num_id_filters = FLEXCAN_RX_FIFO_ID_FILTERS_8, /*CAN帧ID过滤器数量为8*/
.is_rx_fifo_needed = false, /*不使用FIFO*/
.flexcanMode = FLEXCAN_NORMAL_MODE, /*正常模式*/
.payload = FLEXCAN_PAYLOAD_SIZE_8,
.bitrate = {
/*仲裁场位时间设置*/
.propSeg = 7,
.phaseSeg1 = 4,
.phaseSeg2 = 1,
.preDivider = 5,
.rJumpwidth = 1
},
.bitrate_cbt = {