S32K的flexcan组件使用(RxFIFO+中断)

本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的flexcan组件(RxFIFO+中断)

开发平台:S32 Design Studio for ARM Version 2.2

SDK版本:S32_SDK_S32K1xx_RTM_3.0.0

使用芯片:S32K148

注:本文讲述CAN使用Rx FIFO功能中断方式实现无过滤CAN报文接收,DMA方式见这篇文章!

S32K的flexcan组件使用(RxFIFO+DMA)_我是阿衰的博客-CSDN博客

组件例程免费下载方式在文末!!!

1. 配置CAN所使用的引脚

2. 添加flexcan组件到工程(使用多个CAN就添加多个)

3. 打开对应的flexcan配置页面

4. 根据所需进行配置(这里介绍使用RxFIFO功能中断方式)

5. 配置好参数后点击如下图按钮或选项即可将配置数据更新至代码

6. 在代码中加入CAN初始化的代码即可使用CAN

// 自定义数据缓存结构体
typedef struct {
	uint16_t CAN_ID;
	uint8_t CAN_DATA[8];
}CANDataStruct;
// CAN接收数据结构体
CANDataStruct CANrecMsg1;
CANDataStruct CANrecMsg2;
// 配置RxFIFO接收必须使用该结构体声明的变量
static flexcan_msgbuff_t recvMsg1;
static flexcan_msgbuff_t recvMsg2;
// CAN0初始化
void CAN0_Init(void)
{
	FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);
    FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM1, FLEXCAN_RX_FIFO_ID_FORMAT_A, 0);
	FLEXCAN_DRV_InstallEventCallback(INST_CANCOM1, canRxCallback, NULL);
    // 开启RxFIFO接收 之后在接收中断函数中加入此函数实现不间断接收
    FLEXCAN_DRV_RxFifo(INST_CANCOM1, &recvMsg1);
}
// CAN1初始化
void CAN1_Init(void)
{
	FLEXCAN_DRV_Init(INST_CANCOM2, &canCom2_State, &canCom2_InitConfig0);
    FLEXCAN_DRV_SetRxFifoGlobalMask(INST_CANCOM1, FLEXCAN_RX_FIFO_ID_FORMAT_A, 0);
	FLEXCAN_DRV_InstallEventCallback(INST_CANCOM2, canRxCallback, NULL);
    FLEXCAN_DRV_RxFifo(INST_CANCOM2, &recvMsg2);
}
// CAN接收中断回调函数
void canRxCallback(uint8_t instance, flexcan_event_type_t eventType,
  	uint32_t buffIdx, flexcan_state_t *flexcanState)
{
    // RxFIFO接收完成
  	if(eventType == FLEXCAN_EVENT_RXFIFO_COMPLETE) {
        // CAN0接收
  		if(instance == INST_CANCOM1)
  		{
  			CANrecMsg1.CAN_ID = recvMsg1.msgId;
  			memcpy(CANrecMsg1.CAN_DATA, recvMsg1.data, 8);
            // 每次接收完成需要再设置接收,所以将此函数放在这里就可以不间断接收
  			FLEXCAN_DRV_RxFifo(INST_CANCOM1, &recvMsg1);
  		} // CAN1接收
  		else if(instance == INST_CANCOM2)
  		{
  			CANrecMsg2.CAN_ID = recvMsg2.msgId;
  			memcpy(CANrecMsg2.CAN_DATA, recvMsg2.data, 8);
  			FLEXCAN_DRV_RxFifo(INST_CANCOM2, &recvMsg2);
  		}
  	}
}

7. CAN发送使用该函数

// CAN发送时要使用到的  意为 标准帧 8byte 数据帧
flexcan_data_info_t can1_data_std_info = {
  .msg_id_type = FLEXCAN_MSG_ID_STD,
  .data_length = 8U,
  .is_remote = false
};

uint8_t Tx[8] = {0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};

// 通过 CAN0 邮箱10 以默认配置 发送 ID是0x111 数据为0,0x1,0x2,0x3,0x4,0x5,0x6,0x7的报文
FLEXCAN_DRV_Send(INST_CANCOM1, 10, &can1_data_std_info, 0x111, Tx);

组件例程下载地址:

https://download.csdn.net/download/m0_50669075/85034829

S32K148更多例程和源码以及最新内容下载地址:

nxp_s32k148_template: 使用NXP的S32KDS软件基于S32_SDK_S32K1xx_RTM_3.0.0编写的的S32K148各组件测试例程,亲测可用,带有注释,适用于S32K14X系列的芯片。 (gitee.com)

END

  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿衰0110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值