历史上的今天

今天是:2024年09月03日(星期二)

正在发生

2021年09月03日 | 【FDCAN】STM32G0B1+FDCAN+HAL库调试记录

发布者:DazzlingSpirit 来源: eefocus关键字:FDCAN  HAL库 手机看文章 扫描二维码
随时随地手机看文章

前言

本文是本人以STM32G0B1为平台,记录下调试总结,仅供参考,若有不对的地方,还劳烦指正。


一、实验环境?

1)MCU:STM32FG0B1VCT6 2)CAN工具:广成CAN总线分析仪双通道can转usb模块USBCAN调试解析工具can卡

在这里插入图片描述

3)CAN收发器:TCAN1042DRQ1

4)STM32CubeMX版本:V6.3.0

在这里插入图片描述

5)固件版本:STM32Cube FW_G0 V1.5.0

6)仿真器:ST-LINK V2

7)MDK: V5.30.0.0

在这里插入图片描述

二、CAN和FDCAN区别

1.介绍

CAN:1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议.


CAN_FD:随着人们对数据传输带宽要求的增加,传统的CAN总线由于带宽的限制难以满足这种增加的需求。此外为了缩小CAN网络(max. 1MBit/s)与FlexRay(max.10MBit/s)网络的带宽差距,2011年BOSCH公司推出了CAN FD 。


2.FDCAN有哪些优点(个人角度):

1)速度更快,最快可以达到10M,普遍采用5M。

2)一包数据长度最大支持64个字节,而普通CAN一包最大8个字节,通信效率大大提高。

3)CAN_FD全称是Flexible Data-Rate,意思就是帧报文中数据段波特率可变的特性,即仲裁段和数据控制段使用标准的通信波特率,而传输数据段时就会切换到更高的通信波特率。


三、CAN发送

1.STM32CubeMX配置截图:

在这里插入图片描述

1)Clock Divider:表示CAN时钟分频,STM32G0B1时钟最大支持64M,这里选择不分频。

2)Frame Format:这里选择经典模式,即把它当作普通CAN模式。

3)Mode:这里选择正常工作模式,此外还有回环模式。

4)Nominal Prescaler:表示仲裁段和数据控制段分频系数

5)Nominal Sync Jump Width:重新同步跳跃宽度。

6)Nominal Time Seg1和Nominal Time Seg2:和设置波特率有关,BAUD=Freq/Clock Divider/Prescaler/(Seg1+Seg2+1)=64M/1/8/(10+5+1)=500K

7)下面Data和上面类似。

8)Std Filters Nbr:标准帧滤波器数量。是配置CAN接受时候使用的滤波器数量,用了多少个就写多少个。

9)Ext Filters Nbr:扩展帧滤波器数量。


2.用户需要自己添加的内容:

1)在初始化的时候添加如下:


 if (HAL_FDCAN_Start(&hfdcan2) != HAL_OK)

  {

   Error_Handler();

  }


2)在主循环中添加如下:


    TxHeader.Identifier = 0x0fffffff;

    TxHeader.IdType = FDCAN_EXTENDED_ID;

    TxHeader.TxFrameType = FDCAN_DATA_FRAME;

    TxHeader.DataLength = FDCAN_DLC_BYTES_8;

    TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;

    TxHeader.BitRateSwitch = FDCAN_BRS_OFF;

    TxHeader.FDFormat = FDCAN_CLASSIC_CAN;

    TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;

    TxHeader.MessageMarker = 0;


    ++TxData[7];


    if(HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TxHeader, TxData) != HAL_OK)

    {

      Error_Handler();

    }

    HAL_Delay(1000);


3)增加两个全局变量,方便调试观查


FDCAN_TxHeaderTypeDef TxHeader;

uint8_t TxData[8] = {0};


3.调试结果:

在这里插入图片描述

工程下载连接:FDCAN_Send,点我下载!!!!!!


四、CAN接受

1.滤波器类型采用掩码方式:

1)添加如下函数实现:

FDCAN_RxHeaderTypeDef RxHeader;

uint8_t RxData[8];

void FDCAN1_Config(void)

{

  FDCAN_FilterTypeDef sFilterConfig;

  /* Configure Rx filter */

  sFilterConfig.IdType = FDCAN_EXTENDED_ID;

  sFilterConfig.FilterIndex = 1;

  sFilterConfig.FilterType = FDCAN_FILTER_MASK;

  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;

  sFilterConfig.FilterID1 = 0x00000023;

  sFilterConfig.FilterID2 = 0x1FFFFFFF;


  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)

  {

    Error_Handler();

  }


  sFilterConfig.IdType = FDCAN_EXTENDED_ID;

  sFilterConfig.FilterIndex = 0;

  sFilterConfig.FilterType = FDCAN_FILTER_MASK;

  sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;

  sFilterConfig.FilterID1 = 0x00000026;

  sFilterConfig.FilterID2 = 0x1FFFFFFF;


  if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)

  {

    Error_Handler();

  }


  /* Configure global filter:

     Filter all remote frames with STD and EXT ID

     Reject non matching frames with STD ID and EXT ID */

  if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT, FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK)

  {

    Error_Handler();

  }


  /* Start the FDCAN module */

  if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)

  {

    Error_Handler();

  }


  if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE, 0) != HAL_OK)

  {

    Error_Handler();

  }


}


void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)

{

  if((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != RESET)

  {

    /* Retrieve Rx messages from RX FIFO0 */

    if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)

    {

      Error_Handler();

    }

  }

}


2)调试结果:

扩展ID发送0x23的时候,CAN总线上的数据是会通过滤波器编号为1的滤波器送达单片机内部的CAN控制器上。

在这里插入图片描述

扩展ID发送0x26的时候,CAN总线上的数据是会通过滤波器编号为2的滤波器送达单片机内部的CAN控制器上。

发送扩展ID为其他的时候,CAN总线上的数据都会被滤波器过滤掉,并不会送到CAN控制器上。

工程下载连接:FDCAN_Receive_MASK,点我下载!!!!


总结

1.当滤波器选择为掩码方式的时候即FilterType = FDCAN_FILTER_MASK,FilterID2的位置为0x1FFFFFFF,代表的就是FilterID1全部校验。


2.当有多个ID需要过滤需要在CubeMX中更改滤波器使用数量,不然是无效的,且滤波器使用顺序应当按照编号。举个例子,假设你分配了使用两个滤波器,在实际中却使用了0和2,虽然1没有使用,但是实际效果应当是你配的那个2的是无效的,0的是有效的。

关键字:FDCAN  HAL库 引用地址:【FDCAN】STM32G0B1+FDCAN+HAL库调试记录

上一篇:STM32—常用的几种伪指令宏
下一篇:【CubeMX】外设选择LL库还是HAL库

推荐阅读

   集微网消息 8月28日,南通越亚半导体有限公司(以下简称“越亚”)举行了奠基典礼仪式。该项目总投资约37.7亿元人民币,项目将新增国际领先的真空喷溅线、等离子蚀刻等设备约1200台/套,建成后可达到年产350万片半导体模组、半导体器件、封装基板。越亚选择落户南通港闸区,对于南通而言意义重大,其建成后将形成集半导体模组、器件和封装基板研发...
你是否跟我一样,如果开车去陌生的地方,就会在出发前摸出手机开启在线地图进行导航。 车载导航因图像不清晰和路线更新不及时,已失宠很久。或许,你也听过一些新闻报道,比如车主在陌生的地方一直跟着车载导航指引走,有的开进了电车隧道里,有的开进了断头路,更有甚者开进了河里…… 这些听上去十分尴尬甚至像笑话的导航经历,确是我们身边真实发生的。...
硬译目的说明:我是想看看如何写bootloader的。注意:要想在微控制器中实现BootLoader,首先要求单片机具有IAP功能,或者是可以对其自身的FLASH进行擦除、 写入的功能。其次要考虑FLASH的大小。辨识: 1、在一般芯片出厂时,厂商会烧写了一个bootloader到rom中,一次性烧写不可更改。2、功能较强大的单片机如PIC16和PIC18系列或者stm32单片机,我们用户...
  液位测量中的磁开关(也称磁性开关),是磁翻板液位计的配件之一。磁开关可输出开关信号,其与磁翻板液位计配套使用,作为远传磁翻板液位计的一种,能够防止液位溢出或干运行实现高低液位的报警,用来监控液位的高低。可在电力、石油、船舶、建筑、化工、冶金、环保、食品等行业的液位测量与控制中大大提高作业效率。但面对仪表市场上种类繁多的磁开关...

史海拾趣

问答坊 | AI 解惑

dsp系统需要哪些东西???

我就纳闷了,为什么要学习dsp还需要这么多。数电,模电,pcb,fpga,等等,怎么感觉到要学习的东西越来越多啊???…

查看全部问答∨

如何能编好单片机的程序(5)

1) 对malloc分配的内存进行memset清零操作。(可以使用calloc分配一块全零的内存)   2) 对一些栈上分配的struct或数组进行初始化。(最好也是清零) 不过话又说回来了,初始化也会造成系统运行时间有一定的开销,所以,也不要对所有的变量做初 ...…

查看全部问答∨

CAN总线技术及其在船舶结构安全监测系统中的应用.pdf

CAN总线技术及其在船舶结构安全监测系统中的应用.pdf…

查看全部问答∨

HID设备在硬件设计上有特别要求吗?

HID设备在硬件设计上有特别要求吗?…

查看全部问答∨

2440 按键驱动问题

Mini2440的板子,WINCE 5.0,板子上有6个测试按键,并且BSP里自带了驱动。现在的问题是,板子上的6个按键只有三个是有效的,而另外三个按键没有任何反应。这几个无效按键所对应的IRQ分别为IRQ_EINT13,IRQ_EINT14,IRQ_EINT15。我搜了一下,似乎板 ...…

查看全部问答∨

COM口怪现象求高手帮忙!

我用的是PC104前几天做了个串口的调试程序,可以和WIN32的COM调试软件通信,可是我又过了几天,在使的时候就不能通信了,104上插了几个卡公司做的卡。和这个有关系吗?还有其他的可能性吗?我的代码是从网上下的ARM的串口程序,我在EVC里编译到X86 ...…

查看全部问答∨

基于LM3S图形驱动库开发之图形驱动库工具使用

图形驱动库工具使用 上次我和大家一起分享了如何使用ti的图形驱动库的基元层来绘制基本的字符,图形。在这里我强和大家一起分享如何使用ti图形库提供的工具来生成自己的字体,和图像。 Ti提供的这些工具我们都可以在图形驱动库安装目录下的tools\ ...…

查看全部问答∨

请教高手:关于NORM指令的问题,谢谢各位一定要帮帮我!!

我想请教你们一下NORM指令的问题,我在TI文献上看过这个指令了,但还是不明白,我想问的是,用NORM指令规格化以后的结果是全都一个格式么?NORM指令不是要将尾数&指数进行分离么?规格化是将尾数全都规和为一样的?还是…… 不好意思我问的问题有 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved