基于英飞凌TC397芯片Mcal配置之Can模块的配置

本文分享了作者在汽车嵌入式开发中,使用英飞凌TC397芯片时,关于Can模块的配置细节,包括Port、CanController、Irq和Os模块设置,以及常用API的使用案例。适合初学者参考,期待读者指正交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着这几年汽车嵌入式软件的迅速发展,芯片的升级也是在不断进行中,本人从事汽车嵌入式工作,目前使用的是英飞凌TC397,鉴于网上对这个芯片的使用介绍比较少,所以想把自己开发Mcal的工程中的一些小经验分享出来,本人资历浅薄,如果哪里出现纰漏错误的地方,请批评指正,此文章属于原创,如有侵权,请及时联系。

本章先主要讲Can模块的配置及一些简单API的使用,在Mcal中,can模块的配置主要涉及到Port,Can,Irq,Os等几个模块,下面主要看一下这几个模块的主要配置:首先是:

Port模块

根据需求在Port模块中将对应的pin脚设置好,如下:

Can模块

Can:

首先是CanController,需要确定选择那条通道,根据不同的地址可以配置不同的通道,这些可以在Mcal的文档中查到。

在CanController中主要是配置通道地址的选择,收发信号类型等,首先要确定你要配置哪个can通道,在这里假设要配置Can02通道,可以在对应的硬件手册中查到这个通道对应的CanControllerBaseAddress是0xf0208900,CanRxInputSelection是CANxx_RXDE,一般情况下,CanBusoffprocessing,CanRxProcessing,CanTxProcessing,CanWakeupSupport配置成中断形式的也就是 INTERRUPT类型的。如果要配成INTERRUPT类型的,则需要Irq以及Os模块来配合使用,这个后面介绍。

波特率的配置就比较简单了,根据你计算的值配置好就行,如果需要配置,则只需要在CanControllerFdBaudrateConfig中配置相应的参数即可,这里不再多说。

CanHardwareObject:

这个主要是配置每个Object对应的参数,这里有几个点需要注意。首先,对于接收的报文,需要配置CanHwFilterCode和CanHwFilterMask两个参数,用来过滤你需要接收到的报文,对于发送的则不需要,因为这个ID在上层就已经确定了。其次,对于CanObjectType,根据顺序需要先配置Receive类型的报文,然后才能配置TRANSMIT类型的,并且在同一种类型中,如果需要选择不同的Controller,CanControllerRef选项需要先选择ControllerId小的,再配置ControllerId大的,如下图:

同为RECEIVE类型的Object,配置了两个Controller,CANNODE_SQ的ID是0,CANNODE_ARS408的ID是1,所以需要先配置CANNODE_SQ对应的Object。

IRQ

如果CanController配置的都是Interrupt类型,则需要在中断模块配置对应的参数,例如:

如果项目使用的是Can00,则中断则对应IrqCanSR0、IrqCanSR1、IrqCanSR2、IrqCanSR3四个寄存器,具体四个分别是什么意思可以查看你使用的芯片手册,我是用的是英飞凌的TC397.此处我是用了IrqCanSR0、IrqCanSR1、IrqCanSR2三个中断,所以对应的选项应该宣称CAT2,对应的优先级别也要设置一下。

API及应用:

大部分Api可以根据字面意思理解出来,这里简单说一下几个常用的API。首先需要SetControllerMode,使用Can_17_McmCan_SetControllerMode(const uint8 Controller, const Can_StateTransitionType Transition),将对应的Can通道的模式设置成CAN_T_START,这样之后才能正常通讯。

对于TX来说,如果采用的是中断模式,则可以调用Can_17_McmCan_Write(const Can_HwHandleType Hth, const Can_PduType* const PduInfo )

函数发送具体的信号报文(注意这是在没有做BSW com模块的基础之上手动调用的,如果配置了Com,Canif等模块,何时发送就要交到Com层去处理,然后autosar的逻辑就会自动调用这个函数去发送报文)

如果采用的是polling模式,则还要调用Can_17_McmCan_MainFunction_Write()函数去处理回调的问题。

对于RX接收来说,如果是polling模式,则需要调用Can_17_McmCan_MainFunction_Read()来处理回调的问题。

一个简单的Example如下:

/* Put the CAN controllers into started state */

  Can_17_McmCan_SetControllerMode (Can_17_McmCanConf_CanController_CanController_0, CAN_T_START);

/*CanWrite for transmit */

Can_17_McmCan_Write( 8, &PduInfo_1[ 2]) ;

#if (CAN_17_MCMCAN_TX_POLLING_PROCESSING == STD_ON)

Can_17_McmCan_MainFunction_Write();

#endif

<think>嗯,用户现在想了解EB MCAL配置方法或者解决配置问题,特别是提到了EB MCAL配置教程或者指南。首先,我需要确认EB MCAL是什么,通常MCAL是Microcontroller Abstraction Layer的缩写,属于AUTOSAR架构中的一部分,负责直接与微控制器硬件交互。EB可能是指Elektrobit,这是一家提供汽车软件解决方案的公司,他们的EB tresos工具常用于MCAL配置。 用户的需求可能是想找到如何配置EB MCAL的具体步骤,或者遇到配置问题时如何解决。我需要先回忆一下相关的资料,比如官方文档、用户手册,或者是否有公开的教程。同时,用户提供的参考引用里提到了HighTec集成TC3xx的Demo,这可能涉及到英飞凌TC3xx系列微控制器,说明用户可能在用这个系列的芯片,所以配置方法需要与之相关。 接下来,我应该分步骤来回答用户的问题。首先,可能需要安装和配置EB tresos Studio,这是Elektrobit提供的配置工具。然后,创建或导入项目,选择正确的MCU型号,比如TC3xx系列。之后,配置各个MCAL模块,如DIO、ADC、CAN等,生成代码,最后集成到开发环境中,比如HighTec的编译环境。 另外,用户可能遇到的问题可能包括环境配置错误、模块参数设置不正确、代码生成失败,或者是集成到工程时的编译问题。需要针对这些常见问题给出解决方法,比如检查路径、确认版本兼容性、查看日志文件等。 还要注意用户提到的参考引用中的doc文件夹包含例程快速使用指导,这可能是一个重要的资源,应该建议用户查阅该文档,并参考官方提供的示例工程。此外,可能还需要指导用户如何获取EB的官方支持,比如访问他们的网站或联系技术支持。 最后,生成相关问题时要考虑用户可能的后续疑问,比如如何验证配置是否正确、如何调试MCAL模块、如何处理特定模块配置问题等。这些问题可以帮助用户更深入地理解和解决实际应用中可能遇到的挑战。</think>关于EB MCAL配置方法,以下是系统化的配置流程与关键要点: ### 一、EB MCAL配置基础环境 1. **工具安装** - 安装EB tresos Studio(最新版本推荐v23.11),需注意Java运行环境的兼容性,例如要求JDK 11或更高版本 - 集成Infineon/HighTec编译器(如针对TC3xx系列的ADS/Altium Toolchain)[^1] 2. **项目初始化** ```plaintext File -> New -> AUTOSAR Project -> 选择TC3xx芯片型号(如TC397) -> 导入MCAL模块包(BSWMD文件) ``` ### 二、MCAL模块配置流程 1. **DIO模块配置** - 在`Dio`模块中定义GPIO引脚功能,例如: $$ \text{DioChannel方向} = \begin{cases} \text{INPUT} & \text{按键检测} \\ \text{OUTPUT} & \text{LED控制} \end{cases} $$ 2. **ADC模块配置** - 设置采样时钟为$f_{ADC} = \frac{f_{PLL}}{(divider+1)}$,需满足$f_{ADC} \leq 80MHz$ - 配置转换序列时注意触发源选择(如定时器触发或软件触发) 3. **CAN模块配置** - 波特率计算公式:$$ BRP = \frac{f_{CANCLK}}{(1 + T_{seg1} + T_{seg2}) \times BaudRate} $$ - 需在`CanController`中配置验收滤波码(Acceptance Code/Mask) ### 三、代码生成与集成 1. 生成ARXML描述文件后,使用`EB tresos Generator`生成C代码 2. 在HighTec开发环境中: ```makefile # 添加MCAL库路径 LDFLAGS += -L$(MCAL_LIB_PATH)/TC39x/HSM # 包含生成的头文件 CFLAGS += -I$(PROJECT_DIR)/GeneratedData ``` ### 四、常见问题解决方案 | 问题现象 | 排查步骤 | 典型解决方案 | |---------|----------|--------------| | 代码编译报错`Undefined symbol` | 1. 检查库文件链接顺序<br>2. 验证MCAL模块是否完整生成 | 在工程属性中添加`-lMcal_Can_37xx`等库引用 | | 外设功能异常 | 1. 时钟树配置验证<br>2. 寄存器映射检查 | 使用UDE调试器查看SCU模块配置状态 | | 代码生成失败 | 分析`build.log`中的XML解析错误 | 更新BSWMD描述文件至适配当前芯片的版本 | 建议优先参考EB官方提供的`TC3xx_MCAL_Configuration_Guide.pdf`文档(通常位于安装目录的`/doc/mcal`路径下),其中包含模块参数化配置的详细约束条件,例如ADC采样保持时间的计算公式:$$ t_{sample} = \frac{(CTN+1) \times divider}{f_{ADC}} $$ 需满足$t_{sample} \geq 1.5\mu s$的硬件限制[^1]。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值