news 2026/5/30 14:00:01

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/5/28 14:11:40

Burp Suite插件 | AI连接本地工具、数据库或远程 Agent,辅助安全测试

工具介绍 BurpAgent 将大语言模型 (LLM) 和 MCP (Model Context Protocol) 引入 Burp Suite&#xff0c;使其能够连接本地工具、数据库或远程 Agent&#xff0c;辅助安全测试。工具功能 1. 流量分析 利用 GPT-4/DeepSeek 等模型对 HTTP 请求/响应进行分析。支持自定义 Prompt 模…

作者头像 李华
网站建设 2026/5/28 19:33:42

6.面向对象初级

类与对象的概述1.类的定义&#xff1a;类是抽象的概念的&#xff0c;代表一类事物&#xff08;比如人类&#xff0c;猫类&#xff09;&#xff0c;本质是一种数据类型&#xff0c;类将这一类对象所共有的属性和行为进行定义&#xff08;比如猫都有名字&#xff0c;颜色&#xf…

作者头像 李华
网站建设 2026/5/28 23:05:48

万字长文,全面解析“黑、骇、白、红”客:他们的技术与使命

黑客 起源 “黑客”一词是英文Hacker的音译。这个词早在莎士比亚时代就已存在了&#xff0c;但是人们第一次真正理解它时&#xff0c;却是在计算机问世之后。根据《牛津英语词典》解释&#xff0c;“hack”一词最早的意思是劈砍&#xff0c;而这个词意很容易使人联想到计算机…

作者头像 李华