当前位置:   article > 正文

S32K的flexcan组件can fd使用_s32design studio配置canfd

s32design studio配置canfd

本文摘要:本文章介绍如何使用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

  1. #include "main.h"
  2. // CAN接收数据结构体
  3. CANDataStruct CANrecMsg1;
  4. // CAN发送数据结构体
  5. CANDataStruct CANsendMsg1;
  6. // 系统
  7. static flexcan_msgbuff_t recvMsg1;
  8. // CAN接收到数据标志
  9. AllCANFlagStruct AllCANFlag;
  10. // CAN发送时要使用到的 意为 使能FD 标准帧 64byte 数据帧
  11. flexcan_data_info_t can1_data_std_info = {
  12. .msg_id_type = FLEXCAN_MSG_ID_STD,
  13. .data_length = 64U,
  14. .fd_enable = true,
  15. .fd_padding = 0xCC,
  16. .enable_brs = false, // 不开启数据域波特率切换
  17. .is_remote = false
  18. };
  19. // can接收发送回调函数
  20. void canRxCallback(uint8_t instance, flexcan_event_type_t eventType,
  21. uint32_t buffIdx, flexcan_state_t *flexcanState)
  22. {
  23. (void)flexcanState;
  24. (void)buffIdx;
  25. // Rx完成
  26. if(eventType == FLEXCAN_EVENT_RX_COMPLETE) {
  27. if(instance == INST_CANCOM1)
  28. {
  29. // 只有当上次报文被处理后才更新新的报文
  30. if(!AllCANFlag.CANRecData_flag1) {
  31. CANrecMsg1.CAN_ID = recvMsg1.msgId;
  32. memcpy(CANrecMsg1.CAN_DATA, recvMsg1.data, 64);
  33. AllCANFlag.CANRecData_flag1 = 1;
  34. #ifdef DEBUG_printf
  35. SEGGER_RTT_printf(0,"CAN0 received ID:0x%x DATA:", CANrecMsg1.CAN_ID);
  36. for(uint8_t i = 0; i < 64; i++) SEGGER_RTT_printf(0,"0x%02x ", CANrecMsg1.CAN_DATA[i]);
  37. SEGGER_RTT_printf(0,"\n");
  38. #endif
  39. }
  40. FLEXCAN_DRV_Receive(INST_CANCOM1, 0, &recvMsg1); // 接收成功后再配置接收 实现不间断接收
  41. }
  42. }
  43. }
  44. // can发送
  45. void set_CANTransmitData(CANDataStruct *CANStruct, uint8_t MAILBOX)
  46. {
  47. while(FLEXCAN_DRV_Send(INST_CANCOM1, MAILBOX, &can1_data_std_info, CANStruct->CAN_ID, CANStruct->CAN_DATA) == STATUS_BUSY);
  48. }
  49. // CAN初始化
  50. void CAN1_Init(void)
  51. {
  52. FLEXCAN_DRV_Init(INST_CANCOM1, &canCom1_State, &canCom1_InitConfig0);
  53. FLEXCAN_DRV_SetRxMbGlobalMask(INST_CANCOM1, FLEXCAN_MSG_ID_STD, 0); // 使用MB0接收
  54. FLEXCAN_DRV_InstallEventCallback(INST_CANCOM1, canRxCallback, NULL);
  55. FLEXCAN_DRV_ConfigRxMb(INST_CANCOM1, 0, &can1_data_std_info, 0); // 0不过滤ID !0为接收到的ID
  56. FLEXCAN_DRV_Receive(INST_CANCOM1, 0, &recvMsg1); // 配置接收
  57. #ifdef DEBUG_printf
  58. SEGGER_RTT_printf(0,"CAN0 init success\n");
  59. #endif
  60. }

8. 发送和接收示例如下

  1. /**
  2. * @brief 系统初始化
  3. * @param None
  4. * @retval None
  5. */
  6. void SYSTEM_Init(void)
  7. {
  8. CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
  9. CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_AGREEMENT);
  10. POWER_SYS_Init(&powerConfigsArr, POWER_MANAGER_CONFIG_CNT, &powerStaticCallbacksConfigsArr, POWER_MANAGER_CALLBACK_CNT);
  11. PINS_DRV_Init(NUM_OF_CONFIGURED_PINS, g_pin_mux_InitConfigArr);
  12. CAN1_Init();
  13. lptmr_Init();
  14. CANsendMsg1.CAN_ID = 0x777;
  15. for(uint8_t count = 0; count < 64; count++)
  16. {
  17. CANsendMsg1.CAN_DATA[count] = count;
  18. }
  19. }
  20. /**
  21. * @brief 任务处理
  22. * @param None
  23. * @retval None
  24. */
  25. void TASK_Schedule(void)
  26. {
  27. // 周期发送
  28. if(TIM_1s_flag)
  29. {
  30. set_CANTransmitData(&CANsendMsg1, MAILBOX_6);
  31. TIM_1s_flag = 0;
  32. #ifdef DEBUG_printf
  33. SEGGER_RTT_printf(0,"send success\n");
  34. #endif
  35. }
  36. // 收到数据回显
  37. if(AllCANFlag.CANRecData_flag1)
  38. {
  39. set_CANTransmitData(&CANrecMsg1, MAILBOX_6);
  40. AllCANFlag.CANRecData_flag1 = 0;
  41. #ifdef DEBUG_printf
  42. SEGGER_RTT_printf(0,"return success\n");
  43. #endif
  44. }
  45. }

组件例程下载地址:

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

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

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

END

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/144597
推荐阅读
相关标签
  

闽ICP备14008679号