S32K144-11.can

发布时间:2024年01月25日

CAN有接收邮箱和发送邮箱

”发送邮箱“是用于CAN总线数据发送的,总共有3个,并且存在优先级关系。优先级越高表示其里面的数据会被优先发送。数据在发送前都会被送到优先级最高且空闲的发送邮箱,然后依次发送。最后说明一点:发送邮箱有3个,且每个邮箱只能装一个报文

”接收邮箱“是用于CAN总线数据接收用的,在接收数据端会有一个过滤器处于”接收邮箱“的前面,过滤器使用于删选”标识符“的,只有标识符符合的报文才会被放入到”接收邮箱“当中。注意:”接收邮箱不同于发送邮箱,接收邮箱只有2(FIFO0FIFO1)个,但是每一个有三层,每层都可以存放一个报文,即每一个接收邮箱可以接收三个报文。但读取时只能读到最先收到的报文,等这个读完之后,才能读下一个报文”。

1.can 的pin设置

2.can初始化;

#define tx_mailbox 1 邮箱

#define rx_mailbox 0

#define rx_filter 0 筛选器不过滤

void can_init(void){

CAN_Init(&can_pal1_instance, &can_pal1_Config0);

// 接收结构体配置

can_buff_config_t can_buffrx_config={

.enableBRS =0,

.enableFD=0,

.fdPadding=0,

.idType = CAN_MSG_ID_STD,

.isRemote = 0,

};

//发送结构体配置

can_buff_config_t can_bufftx_config={

.enableBRS =0,

.enableFD=0,

.fdPadding=0,

.idType = CAN_MSG_ID_STD,

.isRemote = 0,

};

CAN_ConfigTxBuff(&can_pal1_instance,tx_mailbox,&can_bufftx_config);

CAN_ConfigRxBuff(&can_pal1_instance,rx_mailbox,&can_buffrx_config,rx_filter);

//设置筛选器接收ID的全局掩码设置

CAN_SetRxFilter(&can_pal1_instance,CAN_MSG_ID_STD,rx_mailbox,rx_filter);

//安装中断回调函数

CAN_InstallEventCallback(&can_pal1_instance,&can_callback,NULL);

}

//配置接收函数

void can_callback(uint32_t instance,can_event_t eventType,uint32_t buffIdx, void *flexcanState)

{

switch(eventType){

case CAN_EVENT_RX_COMPLETE:

break;

case CAN_EVENT_TX_COMPLETE:

break;

default:

break;

}

}

//发送函数

void can_send(uint32_t data,uint32_t id,uint8_t len){

can_message_t can_msg;

can_msg.cs = 0;

can_msg.data[0] =data;

can_msg.id= id;

can_msg.length=len; //字节

CAN_Send(&can_pal1_instance,tx_mailbox,&can_msg);

}

//接收函数

CAN_Receive(&can_pal1_instance,rx_mailbox,&can_msg);

文章来源:https://blog.csdn.net/m0_68085105/article/details/135834113
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。