本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的flexcan组件实现can fd收发

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

SDK版本:S32_SDK_S32K1xx_RTM_3.0.0

使用芯片:S32K148

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

1. 配置CAN所使用的引脚

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

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

4. 进行配置

5. 时钟配置

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

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

#include "main.h"// CAN接收数据结构体
CANDataStruct CANrecMsg1;
// CAN发送数据结构体
CANDataStruct CANsendMsg1;
// 系统
static flexcan_msgbuff_t recvMsg1;
// CAN接收到数据标志
AllCANFlagStruct AllCANFlag;// CAN发送时要使用到的  意为 使能FD 标准帧  64byte 数据帧
flexcan_data_info_t can1_data_std_info = {.msg_id_type = FLEXCAN_MSG_ID_STD,.data_length = 64U,.fd_enable = true,.fd_padding = 0xCC,.enable_brs = false, // 不开启数据域波特率切换.is_remote = false
};
// can接收发送回调函数
void canRxCallback(uint8_t instance, flexcan_event_type_t eventType,uint32_t buffIdx, flexcan_state_t *flexcanState)
{(void)flexcanState;(void)buffIdx;// Rx完成if(eventType == FLEXCAN_EVENT_RX_COMPLETE) {if(instance == INST_CANCOM1){// 只有当上次报文被处理后才更新新的报文if(!AllCANFlag.CANRecData_flag1) {CANrecMsg1.CAN_ID = recvMsg1.msgId;memcpy(CANrecMsg1.CAN_DATA, recvMsg1.data, 64);AllCANFlag.CANRecData_flag1 = 1;
#ifdef DEBUG_printfSEGGER_RTT_printf(0,"CAN0 received ID:0x%x DATA:", CANrecMsg1.CAN_ID);for(uint8_t i = 0; i < 64; i++)    SEGGER_RTT_printf(0,"0x%02x ", CANrecMsg1.CAN_DATA[i]);SEGGER_RTT_printf(0,"\n");
#endif}FLEXCAN_DRV_Receive(INST_CANCOM1, 0, &recvMsg1); // 接收成功后再配置接收 实现不间断接收}}
}
// can发送
void set_CANTransmitData(CANDataStruct *CANStruct, uint8_t MAILBOX)
{while(FLEXCAN_DRV_Send(INST_CANCOM1, MAILBOX, &can1_data_std_info, CANStruct->CAN_ID, CANStruct->CAN_DATA) == STATUS_BUSY);
}
// CAN初始化
void CAN1_Init(void)
{FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);FLEXCAN_DRV_SetRxMbGlobalMask(INST_CANCOM1, FLEXCAN_MSG_ID_STD, 0); // 使用MB0接收FLEXCAN_DRV_InstallEventCallback(INST_CANCOM1, canRxCallback, NULL);FLEXCAN_DRV_ConfigRxMb(INST_CANCOM1, 0, &can1_data_std_info, 0); // 0不过滤ID  !0为接收到的IDFLEXCAN_DRV_Receive(INST_CANCOM1, 0, &recvMsg1); // 配置接收
#ifdef DEBUG_printfSEGGER_RTT_printf(0,"CAN0 init success\n");
#endif
}

8. 发送和接收示例如下

/*** @brief  系统初始化* @param  None* @retval None*/
void SYSTEM_Init(void)
{CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);POWER_SYS_Init(&powerConfigsArr, POWER_MANAGER_CONFIG_CNT, &powerStaticCallbacksConfigsArr, POWER_MANAGER_CALLBACK_CNT);PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);CAN1_Init();lptmr_Init();CANsendMsg1.CAN_ID = 0x777;for(uint8_t count = 0; count < 64; count++){CANsendMsg1.CAN_DATA[count] = count;}
}
/*** @brief  任务处理* @param  None* @retval None*/
void TASK_Schedule(void)
{// 周期发送if(TIM_1s_flag){set_CANTransmitData(&CANsendMsg1, MAILBOX_6);TIM_1s_flag = 0;
#ifdef DEBUG_printfSEGGER_RTT_printf(0,"send success\n");
#endif}// 收到数据回显if(AllCANFlag.CANRecData_flag1){set_CANTransmitData(&CANrecMsg1, MAILBOX_6);AllCANFlag.CANRecData_flag1 = 0;
#ifdef DEBUG_printfSEGGER_RTT_printf(0,"return success\n");
#endif}
}

组件例程下载地址:

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

END

S32K的flexcan组件can fd使用相关推荐

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

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的flexcan组件(RxFIFO+中断) 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S ...

  2. S32K的flexcan组件使用(RxFIFO+DMA)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的flexcan组件(RxFIFO+DMA) 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本: ...

  3. S32K的lin组件使用(不用LDF配置LIN)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的lin组件(不使用LDF文件配置) 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_ ...

  4. S32K的pwm_pal组件使用

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的pwm_pal组件 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_SDK_S32K ...

  5. S32K的lpit组件使用(通用定时器)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的lpit组件(通用定时器) 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_SDK_ ...

  6. S32K的lpuart组件使用(串口)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的lpuart(串口)组件 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_SDK_S ...

  7. S32K的LinStack组件使用(LDF配置LIN)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的LinStack组件 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_SDK_S32 ...

  8. S32K的wdog组件使用(看门狗)

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS中的wdog组件(看门狗) 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_SDK_S3 ...

  9. S32K的bootloader CAN总线实现

    本文摘要:本文章介绍如何使用NXP官方软件S32KDS实现CAN总线上的bootloader 开发平台:S32 Design Studio for ARM Version 2.2 SDK版本:S32_ ...

  10. S32K148实现250K转500K波特率的网关

    首先感谢几位大神的源代码和优秀的文章: 1.阿衰0110 文章和代码:S32K的flexcan组件使用(RxFIFO+中断) S32K的flexcan组件使用(RxFIFO+中断)_阿衰0110的博客 ...

最新文章

  1. FastDFS安装、配置、部署(三)-Storage配置具体解释
  2. Spring Boot—SpringMVC自动配置原理以及扩展和全面接管SpringMVC
  3. html判断变量,javascript如何判断变量是否为对象?
  4. 如何快速的解决Maven依赖冲突
  5. 手动创建git忽略push清单,node_module以及自身
  6. matlab 读取照片imread,利用matlab读取图像
  7. HDU 2643 Rank:第二类Stirling数
  8. C++官方文档-this
  9. 【python】面向对象的封装、继承、多态的练习题
  10. Tensorflow CIFAR10 (二分类)
  11. php 同时登录怎么办,php 实现同一个账号同时只能一个人登录
  12. “狼牙抓鸡”现身IT江湖
  13. Dagger2简单使用
  14. Similarity Reasoning and Filtration for Image-Text Matching
  15. java阿法狗国际象棋_[转帖]被阿法狗和AlphaZero刷屏之后,聊聊国际象棋和中国象棋AI...
  16. vue 美食杰项目 登录验证
  17. 【Python爬虫】MongoDB爬虫实践:爬取虎扑论坛
  18. Unsupervised Learning of Visual Features by Contrasting Cluster Assignments(SwAV)---论文阅读笔记
  19. 【 简化的插入排序 】 本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序
  20. 信号处理知识回顾博文收藏 (一)小波分析相关

热门文章

  1. c4d——界面认识、视图快捷键、常用的快捷键
  2. <Android开发> Android开发工具- 之-I2C TOOLS工具使用
  3. readelf文件信息说明
  4. 中国省市县数据_收货地址
  5. VS系列编译器基本调试快捷键的使用
  6. 亲测!Abaqus CAE2021插件中文乱码解决方法
  7. java 32位无符号整数_Java中32位无符号数的取法
  8. 短视频新媒体运营策划推广工作计划表模板
  9. STM32F103与MCGS的通讯
  10. 借鉴一下人家辞职申请