CHIPON 芯旺微的KF32A156系列的CAN FD模块的使用介绍

原创扣字不易,转载请注明源出处。

hello大家好,今天主要来说KF32A156系列(包括KF32A146/KF32A136)的CAN FD模块的使用(这里均已A02版本为准)。毕竟是车规级的芯片嘛,can的使用是最重要的外设之一,所以先把CAN FD的使用放在前面。
首先介绍一下CAN FD模块的相关介绍 :
CANFD 模块是 CAN 的升级版本,它同时支持 CANFD(CAN with Flexible Data rate)协议和 CAN 2.0B 协议,两种协议下均可收发标准帧和扩展帧。在收发 CAN FD 帧时,帧数据长度最大可以达到 64 字节,发送速率可以达到 8Mb/s。

can2.0和canfd协议我这里就不详细介绍了,网上资料也比较多。

使用CANFD模块的建议先放在前面:

1、务必使用外部晶振做为工作时钟的来源;
2、尽可能使用1个发送邮箱,其余的可以根据需要配置为多个接收邮箱;

(一)了解一下芯旺微canfd的结构

canfd外设本身配置就是配置寄存器,邮箱是芯片硬件在RAM里面开辟的单独空间,发送can帧的数据都是往ram的邮箱里面去丢,接收can帧也是去ram里面进行存取。下面是操作代码的部分。

*

1、寄存器部分

基本配置其实库函数已经进行了配置,具体的可以直接点进去查看库函数里面的内容,这里想说的是注意有个RSMOD,这个是复位canfd外设的位。当busoff的时候,该位是会置1,常常将其清0做为恢复busoff。
代码如下

	
	Canfd_Gpio_Init();    //配置位对应的pin脚
	Can_m_FdControllerDeInit(CANfd6);    //复位外设和初始化canfd6的时钟
	//配置canfd6外设 
	Can_m_FdControllerInit(CANfd6, Canfd_Controller_AllConfig,Initindex_0);

这里面的外设配置离不开三步走:配置所需引脚重映射为某功能 — 开启外设时钟 — 配置外设底层驱动
Canfd_Controller_AllConfig 这个参数是个结构体,点进去可以看到结构体里面的参数,好在是基本上都会有宏定义放好了,配置比较方便。

*

2、发送邮箱配置

		//这里仅仅只是对can帧的结构体进行某些参数的配置
		Canfd_Sdu.Can_MailboxHeader[0].TransceiveType = MAIL_TRANSMIT;  //配置为发送
		Canfd_Sdu.Can_MailboxHeader[0].BRS = CANFD_BRS_DISABLE;  //加速波特率切换
		Canfd_Sdu.Can_MailboxHeader[0].Can_frame = CAN_FRAME_CLASSICAL ;  //can or canfd
		Canfd_Sdu.Can_MailboxHeader[0].Id = 0x100;  //can id
	
		//更新邮箱,往Mailbox_0(也就是第一个邮箱)写入刚刚配置的参数
		Can_m_FdMailBox_Write(CANfd6, Mailbox_0,&Canfd_Sdu.Can_MailboxHeader[0]);
		
		//当配置完成后,即可执行发送函数,此函数是进行手动邮箱仲裁
		Can_m_FdTransmit(CANfd6);

3、接收邮箱配置

初始化的配置是在初始化canfd外设完成后进行的配置

//初始化的配置
Canfd_Sdu.Can_MailboxHeader[0].TransceiveType = MAIL_RECEIVE;
for(uint8_t i = 1 ; i<=20 ; i++)
	{
		//调用更新邮箱的函数,配置为接受邮箱
		Can_m_FdMailBox_Write(CANfd6, i,&Canfd_Sdu.Can_MailboxHeader[0]);
	}

//中断服务函数里面,判断到接收中断后,去查询接收邮箱
	if (Can_Controller_InterruptFlag.RxIntFlag == 0x01)
	{

		for(uint8_t i = 1 ; i<=20 ; i++)
			{
			if(Can_m_FdGetMailBoxState(CANfd6,i) == MAIL_RECEIVE_SUCCESS)
			{
				/* Read recevie mailbox information and reinitialize mailbox code */
				if(Can_m_FdMailBox_Read(CANfd6, i, &Canfd_MailboxHeader_R,MAIL_RECEIVE) == CAN_OK)
				{
					//USER CODE
				}
			}

			}
	}

4、中断配置

中断一般是会开启 发送中断 、接收中断、can_busoff中断、can_error中断

好啦,以上这些配置完成后,基本上就可以进行can的收发啦。

本文制作时间20221208
如有更好的建议或疑问还请提出来哦

你可能感兴趣的:(芯旺微32位机外设使用,单片机,物联网,嵌入式硬件)