news 2026/4/25 16:54:12

Aurix TC387 Can配置记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Aurix TC387 Can配置记录

一、MCMCAN介绍

fSYN is supplied from fMCANH and fASYN is supplied from fMCAN from CCU. fSYN is used as the clock source for Register and RAM interface,fASYN is used to generate the nominal and fast CAN FD baudrates. It is recommended to use fASYN as 80, 40, 20 MHz from the Peripheral clock or also from fOSC , in order to achieve commonly used nominal and fast CAN FD baudrates. The condition that fSYN >= fASYN is essential for proper functioning of MCMCAN.

借用TC387的例程,但例程中未设置波特率,未变更CAN引脚,使用的是默认配500K和1M的波特器应该是CANFD测试使用的。需增加如下代码才能设置波特以及变更引脚

1、假如使用P02.0和P02.1引脚用为CAN引脚,先定义引脚如下,后面会调用。

IFX_CONST IfxCan_Can_Pins can02_pins = { &IfxCan_TXD00_P02_0_OUT, IfxPort_OutputMode_pushPull, &IfxCan_RXD00A_P02_1_IN, IfxPort_InputMode_pullUp, IfxPort_PadDriver_cmosAutomotiveSpeed4 };

2、初始化中调用引脚,以及设置波特率

g_mcmcan.canNodeConfig.baudRate.baudrate = 250000; //250KBaud即设置波特率

g_mcmcan.canNodeConfig.pins = &can02_pins;//即更换CAN引脚

void initCAN0(void) { /*******CAN module configuration and initialization*******/ IfxCan_Can_initModuleConfig(&g_mcmcan.canConfig, &MODULE_CAN0); IfxCan_Can_initModule(&g_mcmcan.canModule, &g_mcmcan.canConfig); /*******CAN00 node configuration and initialization*******/ IfxCan_Can_initNodeConfig(&g_mcmcan.canNodeConfig, &g_mcmcan.canModule); g_mcmcan.canNodeConfig.nodeId = IfxCan_NodeId_0; g_mcmcan.canNodeConfig.clockSource = IfxCan_ClockSource_both; g_mcmcan.canNodeConfig.frame.type = IfxCan_FrameType_transmitAndReceive; g_mcmcan.canNodeConfig.frame.mode = IfxCan_FrameMode_standard; //Classic CAN g_mcmcan.canNodeConfig.txConfig.txMode = IfxCan_TxMode_dedicatedBuffers;//IfxCan_MessageIdLength_extended;//IfxCan_TxMode_dedicatedBuffers; g_mcmcan.canNodeConfig.txConfig.dedicatedTxBuffersNumber = 255; g_mcmcan.canNodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_8; g_mcmcan.canNodeConfig.rxConfig.rxMode = IfxCan_RxMode_dedicatedBuffers; g_mcmcan.canNodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_8; g_mcmcan.canNodeConfig.filterConfig.extendedListSize = 255; //Extended Frame g_mcmcan.canNodeConfig.filterConfig.messageIdLength = IfxCan_MessageIdLength_extended; g_mcmcan.canNodeConfig.messageRAM.extendedFilterListStartAddress = 0x100; //Extended Frame g_mcmcan.canNodeConfig.messageRAM.rxBuffersStartAddress = 0x200; g_mcmcan.canNodeConfig.messageRAM.txBuffersStartAddress = 0x400; g_mcmcan.canNodeConfig.messageRAM.baseAddress = MODULE_CAN0_RAM + NODE0_RAM_OFFSET; g_mcmcan.canNodeConfig.baudRate.baudrate = 250000; //250KBaud //transmit interrupt g_mcmcan.canNodeConfig.interruptConfig.transmissionCompletedEnabled = TRUE; g_mcmcan.canNodeConfig.interruptConfig.traco.priority = ISR_PRIORITY_CAN_TX; g_mcmcan.canNodeConfig.interruptConfig.traco.interruptLine = IfxCan_InterruptLine_0; g_mcmcan.canNodeConfig.interruptConfig.traco.typeOfService = IfxSrc_Tos_cpu0; //receive interrupt g_mcmcan.canNodeConfig.interruptConfig.messageStoredToDedicatedRxBufferEnabled = TRUE; g_mcmcan.canNodeConfig.interruptConfig.reint.priority = ISR_PRIORITY_CAN_RX; g_mcmcan.canNodeConfig.interruptConfig.reint.interruptLine = IfxCan_InterruptLine_1; g_mcmcan.canNodeConfig.interruptConfig.reint.typeOfService = IfxSrc_Tos_cpu0; //binding pin g_mcmcan.canNodeConfig.pins = &can02_pins; IfxCan_Can_initNode(&g_mcmcan.can00Node, &g_mcmcan.canNodeConfig); /*******CAN filter configuration and initialization*******/ g_mcmcan.canFilter.number = 0; g_mcmcan.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxBuffer; g_mcmcan.canFilter.id1 = 0x18ff1101; g_mcmcan.canFilter.rxBufferOffset = IfxCan_RxBufferId_0; IfxCan_Can_setExtendedFilter(&g_mcmcan.can00Node, &g_mcmcan.canFilter); g_mcmcan.canFilter.number = 1; g_mcmcan.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxBuffer; g_mcmcan.canFilter.id1 = 0x18FF1102; g_mcmcan.canFilter.rxBufferOffset = IfxCan_RxBufferId_0; IfxCan_Can_setExtendedFilter(&g_mcmcan.can00Node, &g_mcmcan.canFilter); g_mcmcan.canFilter.number = 2; g_mcmcan.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxBuffer; g_mcmcan.canFilter.id1 = 0x18FF1103; g_mcmcan.canFilter.rxBufferOffset = IfxCan_RxBufferId_0; IfxCan_Can_setExtendedFilter(&g_mcmcan.can00Node, &g_mcmcan.canFilter); }

其中发送函数中需注意:

txData是32位的,所以只需要两组即可发送所有数据。

IfxCan_Can_initMessage(&g_mcmcan.txMsg); g_mcmcan.txMsg.dataLengthCode = IfxCan_DataLengthCode_8;//8 bytes g_mcmcan.txMsg.frameMode = IfxCan_FrameMode_standard; //Classic CAN g_mcmcan.txMsg.bufferNumber = 0; g_mcmcan.txMsg.messageId = 0x0C1E1507; g_mcmcan.txData[0]= RCU_Message1.Engine_Total_Hours; g_mcmcan.txData[1] =(RCU_Message1.Engine_coolant_temperature + 40)| ((RCU_Message1.Engine_Speed*1000/125)<<8) | ((RCU_Message1.Engine_Oil_Pressure/4)<<24); g_mcmcan.txMsg.messageIdLength=IfxCan_MessageIdLength_extended; //Extended Frame while(IfxCan_Status_notSentBusy == IfxCan_Can_sendMessage(&g_mcmcan.can00Node, &g_mcmcan.txMsg, &g_mcmcan.txData[0]) );
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 16:11:58

在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

作者头像 李华
网站建设 2026/4/23 13:12:49

AI圈炸锅!GraphRAG让大模型不再“一本正经地胡说八道“,小白程序员也能上手的知识图谱增强技术!

前言 传统RAG系统通过检索——生成两阶段法有效缓解了大模型知识陈旧和幻觉问题&#xff0c;但是在处理复杂问题仍存在局限。依赖非结构化的文本向量的检索方式&#xff0c;很难捕捉到实体之间的深层关系&#xff0c;导致上下文不精确、信息碎片化&#xff0c;甚至有发模型幻觉…

作者头像 李华
网站建设 2026/4/23 13:12:17

书籍-沃尔特·克里斯塔勒《德国南部中心地原理》

沃尔特克里斯塔勒《德国南部中心地原理》详细介绍 书籍基本信息 书名&#xff1a;Die zentralen Orte in Sddeutschland&#xff08;德国南部中心地原理&#xff09; 作者&#xff1a;沃尔特克里斯塔勒&#xff08;Walter Christaller&#xff0c;1893-1969&#xff09;【德国地…

作者头像 李华
网站建设 2026/4/25 13:24:30

如何在边缘设备中实现多语言支持?

在边缘设备中实现多语言支持&#xff08;Multilingual Support&#xff09;&#xff0c;尤其是在工业场景&#xff08;如 MES 智能维保、人机交互、工单生成等&#xff09;中&#xff0c;需要兼顾资源受限性&#xff08;内存、算力&#xff09;、低延迟响应和语言覆盖广度。以下…

作者头像 李华
网站建设 2026/4/23 13:23:24

什么是“标签”?

“标签”&#xff08;Label&#xff09;是机器学习中最基础、也最容易混淆的概念之一。一、什么是“标签”&#xff1f;&#xff08;Label&#xff09;标签 正确答案 它是你希望模型最终能预测出来的目标值。举个生活化的例子&#xff1a;你给模型看一张猫的照片 → 标签是 “…

作者头像 李华