AUTOSAR MCAL CAN Driver 接口函数

本文详细介绍了MCAL CAN Driver中的关键API,包括初始化、波特率设置、控制器状态转换、轮询函数以及报文发送和接收。Can_Init用于初始化CAN模块,Can_SetBaudrate设置控制器波特率,Can_SetControllerMode改变控制器状态。轮询函数Can_MainFunction_Write和Can_MainFunction_Read分别处理发送成功和接收报文的情况。Can_Write是发送报文的接口,而Can_Irq.c中的中断处理函数在中断模式下替代轮询。CAN驱动配置文件Can_Cfg.c/h定义了CAN的相关配置。这些API是理解AUTOSAR中CAN通信的基础。

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

1. 单控制器服务接口函数

(1) Can_Init

void Can_Init(const Can_ConfigType* Config)

初始化函数,输入为CAN模块配置结构体指针,在MCU启动时调用,初始化CAN模块的时钟、波特率、引脚、接收发送邮箱等一系列寄存器。完毕后将CAN控制器的状态由CAN_CS_UNINIT转换为CAN_CS_STOPPED。

(2)Can_SetBaudrate

Std_ReturnType Can_SetBaudrate(uint8 Controller,uint16 BaudRateConfigID)

设置CAN模块某个控制器的波特率,输入为控制器ID和波特率ID,所有波特率要被定义为一个结构体,并分配ID,共波特率切换时调用。

(3)Can_SetControllerMode

Std_ReturnType Can_SetControllerMode(uint8 Controller,Can_ControllerStateType Transition)

转换某个CAN控制器的状态。CAN控制器在初始化完毕后处于STOPPED状态,要调用这个函数转换为STARTED状态后才能参与网络通信。

2. 轮询函数

轮询函数要在应用程序中被周期性调用。

(1)Can_MainFunction_Write
void Can_MainFunction_Write(void)

当发送成功确认没有被配置为中断模式时,该函数中会逐个查询当前是否有Hth的报文发送成功,如果有,就会调用下面这个函数一层层向上层报告发送成功:

CanIf_TxConfirmation(PduIdType CanTxPduId)

Hth通常对应一个MO或报文发送邮箱。CanTxPduId、Hth ID和MO ID是一一对应的。

(2)Can_MainFunction_Read

void Can_MainFunction_Read(void)

当报文接收没有被配置为中断模式时,该函数会查询当前所有MO或接收报文邮箱是否有报文被成功接收,如果有,就会下面这个函数来向上层报告有报文被接收:

CanIf_RxIndication(const Can_HwHandleType Hrh, const Can_IdType CanId, const PduInfoType* PduInfoPtr)

Hrh ID、MO ID或接收报文邮箱ID是一一对应的。

(3)Can_MainFunction_BusOff

void Can_MainFunction_BusOff(void)

当Busoff处理方式没有被配置为中断模式时,该函数会检查CAN 控制器是否处于Busoff状态,如果是,则会报相应的故障,并将CAN控制器状态转换为CAN_CS_STOPPED,并调用下面的函数向上层报告CAN Busoff:

CanIf_ControllerBusOff(uint8 ControllerId)

3. Can_Write

Std_ReturnType Can_Write(Can_HwHandleType Hth, const Can_PduType* PduInfo)

typedef struct
{
  PduIdType swPduHandle;
  uint8 length;
  Can_IdType id;
  uint8* sdu;
} Can_PduType;

Can_Write函数是供CANIF层发送报文调用的接口,在下面的函数中被调用:

Std_ReturnType CanIf_Transmit(PduIdType TxPduId, const PduInfoType* PduInfoPtr)

输入参数1 Hth对应着使用哪个MO或发送邮箱进行发送,输入参数2 PduInfoPtr是要发送的内容,包含的参数如代码中的结构体所示,有CAN ID、数据、长度以及PDU ID。在发送该帧报文的时候会把PDU ID和Hrh的对应关系记录下来,在Can_MainFunction_Write函数中进行发送成功确认的时候,要使用相同的对应关系。

4. Can_Irq.c

Can_Irq.c文件中是CAN接收、发送和Busoff中断处理函数,如果定义CAN接收、发送成功确认和Busoff为中断模式,则上面的三个轮询函数不再起作用,而是在中断中调用CANIF层的相应函数进行处理。

5.Can_Cfg.c/h

Can_Cfg.c/h文件是CAN驱动配置文件,在配置文件中药配置CAN控制器的属性、波特率、Hrh、Hth等信息,具体配置内容参考《AUTOSAR_SWS_CANDriver》中10.2章节。

本文只是简要梳理一下MCAL CAN Driver中的常用API,不全面,详细内容请参考《AUTOSAR_SWS_CANDriver》。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孟的孟不是很老的孟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值