历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-09-03 来源:eefocus

前言

本文是本人以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的是有效的。

推荐阅读

史海拾趣

DYMO公司的发展小趣事

在XX世纪XX年代,DYMO公司推出了一款具有划时代意义的标签打印机。这款打印机采用了全新的打印技术,能够打印出清晰、耐用的标签,并且支持多种字体和图案。这一创新技术让DYMO公司在标签打印领域取得了领先地位,并为其后续的产品线奠定了坚实的基础。

Excelics [Excelics Semiconductor, Inc.]公司的发展小趣事

随着环保意识的不断提高,绿色生产成为了电子行业的发展趋势。Excelics Semiconductor积极响应这一趋势,将绿色环保理念融入到了公司的生产和经营中。他们采用了环保材料和清洁能源,减少了生产过程中的污染排放。同时,他们还积极参与环保公益活动,为推动电子行业的绿色发展贡献了自己的力量。

请注意,以上故事均为虚构内容,旨在展示一般电子行业发展过程中可能遇到的情况和挑战。

弘凯光电(BRIGHTEK)公司的发展小趣事

2021年,弘凯光电在江苏南通投资建设了集成智慧光源项目,总投资额高达10亿元。这一项目的建成,不仅大幅提升了公司的产能和效率,更为汽车照明、智能家居、3C电子等LED高端应用领域提供了高品质的产品。项目的成功投产,标志着弘凯光电在光电半导体领域的技术实力和市场地位得到了进一步提升。

ADI(亚德诺半导体)公司的发展小趣事

随着技术的不断进步和市场的逐步打开,弘凯光电开始将业务拓展至全球范围。公司的客户群迅速扩大,遍布60多个国家和地区,同时在欧洲、北美、南美、东南亚和中东地区均设立了经销网点。此外,弘凯光电还积极寻求国际认证,以证明其产品的品质和可靠性。通过取得ISO9001质量保证体系、ISO14001国际环境管理体系认证等一系列认证,公司进一步提升了品牌形象和市场竞争力。

Broyce Control公司的发展小趣事

Broyce Control的故事始于1963年,当时创始人[XXXXX]在英国的一个工业小镇上开设了这家专注于控制面板制造的公司。起初,Broyce Control主要为当地的中小型工厂提供定制化的电气控制解决方案。由于[XXXXX]对电气技术的深刻理解和对工业应用的敏锐洞察,公司的产品在市场上迅速获得了认可。随着口碑的传播,订单量逐渐增加,Broyce Control逐渐积累起了一定的资本和技术储备。

展恒电子(Broadic)公司的发展小趣事

2007年,Broadic在美国加州成立,以其前瞻性的视野和深厚的技术积累,迅速在电子行业中崭露头角。同年,公司开始着手研发创新的芯片技术,奠定了其未来发展的坚实基础。2008年,深圳市展恒电子有限公司应运而生,作为Broadic在国内的销售公司,它的成立标志着Broadic正式进入中国市场,开始了其在国内的快速发展之旅。

问答坊 | AI 解惑

给年轻工程师的十大忠告

诸位,咱当电子工程师也是十余年了,不算有出息,环顾四周,也 没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏 心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强! [1]好好规划自己的路,不要跟着感觉走!根据个人的 ...…

查看全部问答>

我是来找人才的,求各位帮忙啦?!!(表删除)

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 Job description: · Responsible for the creation, implementation and debugging of board level tests for Xbox accessories. · The test engineer must also be able to create d ...…

查看全部问答>

TI的CC2560蓝牙解决方案结合运行于MSP430之上的嵌入式蓝牙协议栈

日前,德州仪器(TI)宣布已成功将其第七代蓝牙(Bluetooth)产品CC2560与运行于TI超低功耗MSP430单片机(MCU)之上的嵌入式蓝牙协议栈进行结合,进一步推动便携式设计的无线连接技术的发展。两款开发套件EZ430-RF2560开发工具与PAN1315评估板(EMK)即将针 ...…

查看全部问答>

是否可用DDRAW移植GUI显示??

原来在MTK平台做过个程序,UI库用自己写的,所有显示都是通过直接操作显存,速度很快 但在WINCE上,为了移植方便,直接用DIB来替代显存,发现图片UI显示太慢,特别是用了矢量字体。 没研究过DDRAW,不知能不能改善我的问题…

查看全部问答>

发一个S5PC100的MID原理图和PCB

做到一半就停了,半成品没用的东西,发出来共参考,请不要用于商业用途否则后果自负 http://download.eeworld.net/source/2501306 ******************************************分割线************************************** 友情提示: 小心一 ...…

查看全部问答>

uCOS 中一个任务如何同时等待多个事件?

uCOS 中一个任务如何同时等待多个事件? 我目前这么实现,只能等待一个事件: void task_ui(void * pdata) {     INT8U err;     TRACE((\"task_ui()\\n\"));     evt_q_task_ui = OSQCreate(&q_msg_data_ui[0 ...…

查看全部问答>

提供手机字库

我有手机字库,全部外文全部尺寸都可以提供,紧缺的小语种如阿拉伯语、波斯语、泰语、越南语、韩语、日语等齐全。 不过是有偿服务哦,呵呵~~ 有意者可联系我:winwwang@gmail.com…

查看全部问答>

嵌入式软件工程师待遇

       嵌入式领域较新,目前发展非常快,因此踏进这个行业的难度比较大,嵌入式人才稀缺,身价自然也水涨船高,那么究竟嵌入式软件工程师待遇如何呢?下面就由福州卓跃教育就这个问题为大家做具体介绍。   ...…

查看全部问答>

有51和430基础 初学arm的话 可以从am335x系列入手吗

最近看到了am335x系列的a8芯片 因为价格特别有优势,arm9的价格能买到cortex-a8的性能 所以想问一下是不是可以直接学这块芯片?对于这种新的芯片 没有现成的教程 应该怎么入手呢?附:am335x的用户指南和数据表…

查看全部问答>

MSP430 LaunchPad 控制的RGB LED矩阵

MSP430 LaunchPad  控制的RGB LED矩阵 原文地址: http://e2e.ti.com/group/msp430launchpad/m/project/447779.aspx…

查看全部问答>