基于英飞凌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>好的,我现在需要帮助用户查找关于英飞凌TC3XX微控制器MCAL配置方法或教程。用户提到了几个引用来源,可能需要从中提取有用信息。首先,我要确认用户的需求:他们需要配置指南或示例,特别是关于PORT模块、PWM、DSADC和ICU等部分。 根据提供的引用内容,引用[1]详细讲解了McalPORT模块配置,这可能是一个重要的起点。引用[2]提到了Tc4xx MCAL的PWM配置,特别是GTM部分,虽然针对的是TC4xx,但TC3xx可能有类似的结构,可以作为参考。引用[3]涉及DSADC的配置,包括频率设置和General配置,这可能对用户的ADC部分有帮助。引用[4]提到了ICU配置,特别是TIM0_5和GtmTimInselConfiguration的设置,这可能与输入捕获相关。引用[5]是一个CSDN的下载链接,可能包含更具体的文档或示例代码,但需要用户自行下载查看。 接下来,我需要整理这些信息,分模块进行说明。首先,PORT模块配置步骤,包括功能复用和电气特性设置,这部分引用[1]提供了详细说明。然后,GTM模块的PWM配置,引用[2]提到了硬件触发和差异部分,可能需要结合TC3xx的具体手册。DSADC的配置需要参考引用[3],涉及时钟分频和滤波器设置。ICU配置则需要查看引用[4]中的TIM和GtmTimInselConfiguration部分。 此外,用户可能需要官方文档,如Aurix Development Studio和MCAL用户手册,这些是标准参考资料。Infineon的官网和社区论坛也是获取示例代码和教程的好地方。CSDN的资源(引用[5])可能包含实际项目中的配置示例,但需要注意来源的可靠性。 用户可能还关心常见问题,比如时钟配置错误或引脚复用冲突,这些问题在配置过程中容易出现,需要强调检查时钟设置和复用选项。最后,生成的相关问题需要覆盖模块功能、配置工具、时钟设置、常见错误和与其他模块的交互,这些都是用户在配置MCAL时可能遇到的后续问题。</think>根据提供的引用内容和系统级要求,以下是关于英飞凌TC3XX微控制器MCAL配置的详细说明: ### 一、TC3XX MCAL基础配置方法 1. **PORT模块配置** - 引脚功能复用需通过`PCTL`寄存器设置,例如将P10.0配置为PWM输出: ```c PORT_10.PCTL.B.PC0 = 0x03; // 选择ALT3功能 ``` - 电气特性配置需设置: * `ESRx`寄存器设置压摆率(Slew Rate) * `PDISC`寄存器禁用下拉电阻 * 引用[1]中详细说明了PDR/PS寄存器配置时序要求 2. **GTM模块PWM配置** 根据引用[2]的硬件触发逻辑: ```c GTM_TOM0_CH0.CTRL.B.CLK_SRC = 1; // 选择CMU_CLK0时钟源 GTM_CMU_CLK0.CLK_CTRL.B.CLK_DIV = 8; // 分频系数Fmod=20MHz ``` 需特别注意`TOMx_TGCy_FUPD_CTRL`寄存器的硬件触发同步配置 3. **DSADC配置要点** 如引用[3]所示: - 主时钟分频:$f_{CLK} = \frac{160MHz}{8} = 20MHz$ - 滤波器系数设置: $$H(z) = \frac{b_0 + b_1z^{-1}}{1 + a_1z^{-1}}$$ 需在`DSADC_MODCFG`寄存器中配置系数表 ### 二、配置工具链参考 1. 官方推荐使用**Aurix Development Studio**中的MCAL配置向导 2. 关键文档: - 《AurixTC3xx_UM_Part1-UserManual-v02_00-EN.pdf》第12章 - 《MCAL_User_Manual_TC3xx_ADS_v4.0》第4.5节PWM配置时序图 ### 三、典型配置问题分析 1. **时钟配置错误** 当出现$PWM_{output} \neq f_{expected}$时,检查: $$f_{PWM} = \frac{f_{GTM}}{(period+1) \times prescaler}$$ 需验证CMU_CLK分频和TOM通道级联配置[^2] 2. **引脚复用冲突** 使用`PORTx_IOCR`寄存器检查多路复用器状态,确保同一bank内不重复使用ALT模式
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值