关于S32K1xx的flexCAN

写在前面

由于实习的项目中,选择的是一款S32K142芯片作为控制器,在汽车电子的开发中CAN是非常用重要的,因为针对在项目中对CAN的底层开发(目前只是针对于SDK版本内容,后续会更新基于FreeRTOS、MCAL)的底层配置内容。整体软件架构设计中对CAN的Canif软件设计内容。(进行一个大致的总结)

flexCAN简介

CAN总线是一种应用十分广泛的串行通信总线,由于具备差分接受和发送的特点,使得在其抗干扰以及错误检测方面的性能大大提高。FlexCAN 模块是 CAN 协议的一个高完成度版本,带有动态数据率(Flexible Data rate,CAN FD)协议和 CAN 2.0 B 版本协议,支持标准和拓展数据帧和长达 64 字节的数据传输,频率最大可达到 8Mbps。数据缓冲器存在于中一个嵌入FlexCAN的 RAM 中。S32K1xx FlexCAN符合CAN 2.0B标准,支持全功能的CAN FD ,支持标准帧、扩展数据帧,最大64字节的数据长度,可编程位速率以及内容相关寻址。对其邮箱可灵活配置成为0、8、16、32、64位数据长度,可配置成为传输或者接收,支持其标准和扩展帧。

FlexCAN模块的组成由以下模块组成:

Proyocol Engine (PE) 协议引擎子模块管理CAN总线上的串行通信,负责请求RAM访问以接收和发送消息帧、对接收消息进行验证、执行错误处理、检验CAN FD消息。

BIS InterfaceUnit 总线接口单元主要是对内部接口总线的访问,建立与CPU和其他模块的连接,访问时钟、地址、数据总线、中断输出,所以在SDK中CAN组件的配置当中,也可以选择其外设时钟,应该是由于该单元可以对时钟进行访问的基础。

Controller Host Interface 控制主机接口  主要是对接收和发送消息缓冲区的选择,负责对CAN FD和非CAN FD消息格式的仲裁以及ID匹配算法。

FlexCAN接收和发送流程框图

传输 仲裁 移动 匹配 接收。

FlexCAN有多种工作模式,普通模式、冷冻模式、回环模式、只听模式、CANFD模式等,需要让其工作起来需要进行一些配置,比如时钟的配置、使能初始化模块、配置工作模式、配置波特率、配置发送帧、配置接收帧格式等,这些在底层实现中均是需要结合对应的数据手册来实现相关配置,当然在目前的开发过程中可以过程会以SDK配置为例子在下文进行说明。

FlexCAN Message Buffer 结构

Message Buffer是可以配置成发送和接收数据,支持存储CAN 2.0标准帧和扩展帧,可以配置成为不同的字节长度比如(8+8、8+16、8+32 8+64)等,前八位位报文帧头信息,后面位数据,根据选择不同的数据长度,会有对应不同个数的MB。(下图来源于论坛文章截图),另外我们也可以通过Rx FIFO来接收报文,发送报文还是只使用MB的方式来发送。

S32K1XX SDK中提供的两个Flex CAN驱动组件

can_pal组件

首先需要对GPIO进行设置,在Components里面

并且在时钟配置中,配置对应的外设时钟,

Number of buffers 缓冲数 范围是0-32

模式 :普通 回环 使能

PE clock source :晶振时钟 外设时钟

是否使能CAN FD

Buffer payload size 报文内容 8 16 32 64



void CAN0_Callback_Func (uint32_t instance,can_event_t event,uint32_t buffIdx,void *flexcanState)
  {
	(void)flexcanState; //此处防止警报
	(void)instance;
	(void)buffIdx;
	CAN_Receive(&can_pal0_instance, RX_MAILBOX_CAN0, &recvMsg_CAN0); //接收报文并重新注册回调函数
	switch(event) //回调事件
		{
			case CAN_EVENT_RX_COMPLETE: //接收完成 事件
				IRQ_CAN0_RX =1;
				break;
			case CAN_EVENT_TX_COMPLETE: //发送完成事件
				break;
			default:
				break;
		}
  }

void CAN0_Init(void)//初始化函数
{

	  CAN_Init(&can_pal0_instance, &can_pal0_Config0);//CAN0的初始化 直接拖入
	  can_buff_config_t Rx_buffCfg =  {
	      .enableFD = false,
	      .enableBRS = false,
	      .fdPadding = 0U,
	      .idType = CAN_MSG_ID_STD,
	      .isRemote = false
	  };//接收缓存

	  can_buff_config_t Tx_buffCfg =  {
	      .enableFD = false,
	      .enableBRS = false,
	      .fdPadding = 0U,
	      .idType = CAN_MSG_ID_STD,
	      .isRemote = false
	  };//发送缓存

	  CAN_ConfigRxBuff(&can_pal0_instance, RX_MAILBOX_CAN0, &Rx_buffCfg, Rx_Filter); //注册接收配置和MSGID过滤器(如过滤器配置为0x1,则只接受msgid 0x1发来的报文)
	  CAN_ConfigTxBuff(&can_pal0_instance, TX_MAILBOX_CAN0, &Tx_buffCfg); //配置发送
	  /*设置MSGID的掩码,掩码粗略可以理解为对11bit MSGID地址的过滤
	   如果某bit位需要过滤设置为1,不过滤设置为0,例如掩码设置为0x7ff则过滤全部标准id,如果设置为0x7fe,这只能接受0x01的报文(不存在0x0的地址)*/
	  CAN_SetRxFilter(&can_pal0_instance,CAN_MSG_ID_STD,RX_MAILBOX_CAN0,0); //设置MSGID掩码,
	  CAN_InstallEventCallback(&can_pal0_instance,&CAN0_Callback_Func,(void*)0); //注册回调函数
	  CAN_Receive(&can_pal0_instance, RX_MAILBOX_CAN0, &recvMsg_CAN0); //*****重点****此函数不只有接收作用 还有续订回调函数的作用.
}

针对于flexcan组件的配置内容有对应文章介绍的十分详细,S32KSDKCAN组件详解-CANPAL-FLEXCAN,学习S32K系列CAN组件的使用和原理_S32K3的CAN节点地址资源-CSDN文库

软件程序中CAN底层到上层软件设计

后续再进行更新。。。。。。

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
S32K1xx参考手册是一本关于S32K1xx系列微控制器的手册。S32K1xx系列微控制器是NXP半导体公司推出的一款高性能、低功耗的汽车电子解决方案。 该参考手册包含了关于S32K1xx系列微控制器的详细信息,包括芯片的特性、功能模块、寄存器定义、外设控制、电源管理等方面的内容。手册以清晰的结构和详细的文字进行介绍,方便用户快速了解和使用S32K1xx系列微控制器。 首先,手册介绍了S32K1xx系列微控制器的特性和优势。它采用了ARM Cortex-M4核心,具有高性能、低功耗、丰富的外设功能和灵活的扩展性。同时,S32K1xx系列微控制器还支持汽车级别的安全性和可靠性要求,适用于各种汽车电子应用领域。 其次,手册详细介绍了S32K1xx微控制器的功能模块。这些功能模块包括中央计时器(CMT)、通用定时器(GPT)、嵌入式调试接口(ETM)、模拟前端(AFE)等,这些模块提供了多种外设接口和功能,满足了不同应用场景的需求。 此外,手册还给出了S32K1xx微控制器的寄存器定义和外设控制的详细说明。通过了解和正确配置这些寄存器和外设,开发人员可以充分发挥S32K1xx系列微控制器的性能和功能,实现各种各样的应用需求。 最后,手册提供了关于S32K1xx微控制器的电源管理方面的内容。它介绍了如何配置和管理芯片的功耗,以及如何通过电源管理单元(PMU)实现优化的功耗控制和精确的电源管理。 总之,S32K1xx参考手册是一本非常重要的资料,对于使用S32K1xx系列微控制器进行开发的人员来说,是一个必备的参考工具。通过阅读和使用该手册,开发者可以更好地了解S32K1xx系列微控制器的特性和功能,并能够快速、高效地进行开发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值