[STM32C0] 【STM32C092RC 测评】FDCAN Loopback测试

CAN同样可以进行Loopback测试,我们首先连接一下CAN的基本概念。
控制器局域网总线(CAN)作为专为实时应用量身打造的串行通讯协议,在工业及自动化领域扮演着至关重要的角色。仅需简单的双绞线,它便能实现信号的高效、稳定传输。凭借卓越的性能与广泛的适用性,CAN总线已成为全球范围内应用最为广泛的现场总线之一。我们将深入探索STM32在CAN总线方面的具体应用之法。
本次测试中的C092型号支持FDCAN,即CAN FD(CAN with Flexible Data Rate),作为传统CAN协议的升级版,其核心升级聚焦于协议层面,物理层维持原状。CAN与CAN FD的关键差异体现在:
传输速率:传统CAN的传输速率较为固定,而CAN FD引入可变速率机制,能根据实际需求灵活调整,尤其在大数据量或高实时性要求的场景下,显著提升数据传输速率。
数据域长度:CAN FD扩展了数据域长度,相较于传统CAN有限的数据域,CAN FD单次通信可传输更多数据,减少通信次数,提高通信效率。
帧格式:为适应可变速率和数据域长度的变化,CAN FD优化了帧格式,不仅支持更高效的变速率与大数据量传输,同时保持与传统CAN协议的兼容性。
ID长度:CAN FD不仅扩展了数据域长度,还增加了标识符(ID)的长度,提供更多寻址空间,支持更多节点,增强系统扩展性和灵活性。
我们看一下C092开发板中对应CAN接口的原理图:

对应的单片机引脚如下:

实物接口如下:

Loopback测试连接如下:

就是这么简单,紧邻常用的USB接口,C0系列设备在USB与FDCAN之间做出了巧妙的设计取舍,二者仅能择其一配备。
接下来进行FDCAN的配置:
先看一下时钟配置,因为C092支持最大的是48MHz,到FDCAN最大也是48MHz:

启动FDCAN:

下面就是具体参数的设置,我们本次主要进行一下回环测试,所以要进行如下配置:

基本参数
Clock Divider时钟分频
Frame FormatCANFD模式
Mode正常工作模式
Auto Retransmission自动重传
Transmit Pause传输暂停
Protocol Exception协议异常处理
Nominal Sync Jump Width裁决段同步跳转段宽度
Data Prescaler数据段分频系数
Data Sync Jump Width数据段同步跳转段宽度
Data Time Seg1数据段时间段1
Data Time Seg2数据段时间段2
Std Filters Nbr标准滤波器数量
Ext Filters Nbr拓展滤波器数量
Tx Fifo Queue Mode发送模式

我们按照例程中的配置参数进行一下配置:

接下来进行比特率的配置,如下图:

上图所示选项中,最小数值设定为1,比特率的计算公式为:比特率 = CAN时钟 / (时钟分频 × 预分频 × (Seg1 + Seg2 + 1))。即便采用此最小配置参数,理论上能达到的最大比特率可高达16MHz。
软件方面主要是配置过滤器,这里我们主要配置过滤ID,前面各开启了一个标准滤波器和一个扩展滤波器:

复制

  1. <p>/* Configure standard ID reception filter to Rx FIFO 0. Only accept ID = FilterID1 */</p><p> FDCAN_FilterTypeDef sFilterConfig;</p><p> sFilterConfig.IdType = FDCAN_STANDARD_ID;</p><p> sFilterConfig.FilterIndex = 0U;</p><p> sFilterConfig.FilterType = FDCAN_FILTER_DUAL;</p><p> sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;</p><p> sFilterConfig.FilterID1 = 0x444;</p><p> sFilterConfig.FilterID2 = 0x444; /* For acceptance, MessageID and FilterID1 must match exactly */</p><p> if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Configure extended ID reception filter to Rx FIFO 1. Only accept ID between FilterID1 and FilterID2. */</p><p> sFilterConfig.IdType = FDCAN_EXTENDED_ID;</p><p> sFilterConfig.FilterIndex = 0U;</p><p> sFilterConfig.FilterType = FDCAN_FILTER_RANGE_NO_EIDM;</p><p> sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO1;</p><p> sFilterConfig.FilterID1 = 0x1111111;</p><p> sFilterConfig.FilterID2 = 0x2222222;</p><p> if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p>


然后是进行数据的发送和接收,这里都是通过FIFO的模式进行缓存的,并在接收节点进行接收数据打印,这里面发送配置中主要就是ID要满足上面过滤器的要求:

复制

  1. <p>FDCAN_TxHeaderTypeDef txHeader;</p><p> /* Add message to Tx FIFO */</p><p> txHeader.Identifier = 0x444;</p><p> txHeader.IdType = FDCAN_STANDARD_ID;</p><p> txHeader.TxFrameType = FDCAN_DATA_FRAME;</p><p> txHeader.DataLength = FDCAN_DLC_BYTES_12;</p><p> txHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;</p><p> txHeader.BitRateSwitch = FDCAN_BRS_ON;</p><p> txHeader.FDFormat = FDCAN_FD_CAN;</p><p> txHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;</p><p> txHeader.MessageMarker = 0x52U;</p><p> if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &txHeader, txData0) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Add second message to Tx FIFO */</p><p> txHeader.Identifier = 0x1111112;</p><p> txHeader.IdType = FDCAN_EXTENDED_ID;</p><p> txHeader.TxFrameType = FDCAN_DATA_FRAME;</p><p> txHeader.DataLength = FDCAN_DLC_BYTES_12;</p><p> txHeader.ErrorStateIndicator = FDCAN_ESI_PASSIVE;</p><p> txHeader.BitRateSwitch = FDCAN_BRS_ON;</p><p> txHeader.FDFormat = FDCAN_FD_CAN;</p><p> txHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;</p><p> txHeader.MessageMarker = 0xCCU;</p><p> if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &txHeader, txData1) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Add third message to Tx FIFO */</p><p> txHeader.Identifier = 0x1111113;</p><p> txHeader.IdType = FDCAN_EXTENDED_ID;</p><p> txHeader.TxFrameType = FDCAN_DATA_FRAME;</p><p> txHeader.DataLength = FDCAN_DLC_BYTES_12;</p><p> txHeader.ErrorStateIndicator = FDCAN_ESI_PASSIVE;</p><p> txHeader.BitRateSwitch = FDCAN_BRS_OFF;</p><p> txHeader.FDFormat = FDCAN_FD_CAN;</p><p> txHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;</p><p> txHeader.MessageMarker = 0xDDU;</p><p> if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &txHeader, txData2) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p>/* Get tick */</p><p> uint32_t tickstart = HAL_GetTick();</p><p> /* Wait transmission complete */</p><p> while (HAL_FDCAN_GetTxFifoFreeLevel(&hfdcan1) != NB_RX_FIFO)</p><p> {</p><p> /* Timeout handling */</p><p> if ((HAL_GetTick() - tickstart) > TX_TIMEOUT)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> }</p><p>/*##-4 Receive messages ###################################################*/</p><p> /* Check one message is received in Rx FIFO 0 */</p><p> if (HAL_FDCAN_GetRxFifoFillLevel(&hfdcan1, FDCAN_RX_FIFO0) != 1U)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Retrieve message from Rx FIFO 0 */</p><p> if (HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO0, &rxHeader, rxData) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Compare received RX message to expected data */</p><p> if ((rxHeader.Identifier != 0x444) ||</p><p> (rxHeader.IdType != FDCAN_STANDARD_ID) ||</p><p> (rxHeader.DataLength != FDCAN_DLC_BYTES_12) ||</p><p> (BufferCmp8b(txData0, rxData, COUNTOF(rxData)) != 0U))</p><p> {</p><p> Error_Handler();</p><p> }</p><p>HAL_UART_Transmit(&huart2, (uint8_t *)&rxData, 12, 0xFFFF);</p><p> /* Check two messages are received in Rx FIFO 1 */</p><p> if (HAL_FDCAN_GetRxFifoFillLevel(&hfdcan1, FDCAN_RX_FIFO1) != 2U)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Retrieve message from Rx FIFO 1 */</p><p> if (HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO1, &rxHeader, rxData) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Compare received RX message to expected data */</p><p> if ((rxHeader.Identifier != 0x1111112) ||</p><p> (rxHeader.IdType != FDCAN_EXTENDED_ID) ||</p><p> (rxHeader.DataLength != FDCAN_DLC_BYTES_12) ||</p><p> (BufferCmp8b(txData1, rxData, COUNTOF(rxData)) != 0U))</p><p> {</p><p> Error_Handler();</p><p> }</p><p>HAL_UART_Transmit(&huart2, (uint8_t *)&rxData, 12, 0xFFFF);</p><p> /* Retrieve next message from Rx FIFO 1 */</p><p> if (HAL_FDCAN_GetRxMessage(&hfdcan1, FDCAN_RX_FIFO1, &rxHeader, rxData) != HAL_OK)</p><p> {</p><p> Error_Handler();</p><p> }</p><p> /* Compare received RX message to expected data */</p><p> if ((rxHeader.Identifier != 0x1111113) ||</p><p> (rxHeader.IdType != FDCAN_EXTENDED_ID) ||</p><p> (rxHeader.DataLength != FDCAN_DLC_BYTES_12) ||</p><p> (BufferCmp8b(txData2, rxData, COUNTOF(rxData)) != 0U))</p><p> {</p><p> Error_Handler();</p><p> }</p><p>HAL_UART_Transmit(&huart2, (uint8_t *)&rxData, 12, 0xFFFF);</p>


最后在通过在FIFO中查询的数据进行打印,与发送的数据一致:


---------------------
作者:qintian0303
链接:https://bbs.21ic.com/icview-3450544-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1201084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年市面上专业的监控杆供应厂家哪家权威,室外监控杆/防雨箱/高速公路监控杆/化验室操作台,监控杆供应厂家电话

引言:监控杆——智慧城市与安全生产的“守护之眼” 在智慧城市、智能交通及工业安防等领域,监控杆作为承载前端感知设备的核心基础设施,其重要性日益凸显。它不仅保障了公共安全与交通秩序,更在厂区、能源、航空等…

如何选择合适的在线氧含量分析仪品牌?

在工业生产、环保监测、空分制氮、冶金建材等多个关键领域,在线氧含量分析仪是保障生产安全、控制产品质量、实现环保合规的核心设备。其测量精度、稳定性、适配性直接影响生产效率与运营安全,而品牌的选择则决定了设…

清微智能、Groq与改变GPU单行道的可能性

21世纪什么最贵&#xff1f;大多数公司始料未及&#xff0c;最贵的原来是算力&#xff0c;是数万美元也“一芯难求”的GPU。 OpenAI创始人Sam Altman曾经预言&#xff0c;算力将成为一种新的货币。去年&#xff0c;Gartner预测2026年的全球AI支出预计将达到2.52万亿美元&#…

搞定138译码器,基于74ls138译码器设计全加器

138译码器的重要性不言而喻&#xff0c;因此对于138译码器&#xff0c;我们应当有所了解。为增加大家对138译码器的认识&#xff0c;本文将介绍如何利用74ls138译码器设计全加器。本文除了对74ls138译码器加以阐述外&#xff0c;文章第二部分将对74ls48译码器予以介绍。如果你对…

输入邮件正文,自动生成三个不同语气(正式/简洁/委婉)的邮件标题,适配商务场景

1. 实际应用场景描述在商务沟通中&#xff0c;邮件标题的语气直接影响收件人的第一印象和打开率&#xff1a;- 正式&#xff1a;适用于向上级汇报、对外合作提案。- 简洁&#xff1a;适用于内部快速通知、任务分配。- 委婉&#xff1a;适用于请求协助、敏感话题沟通。然而&…

满足非标需求:国内SAE法兰定制服务深度解析与推荐,扩口法兰/SAE法兰/内螺纹法兰/分体法兰,SAE法兰推荐哪家好

近年来,国内液压系统应用场景持续拓展,SAE法兰作为管道连接的核心部件,其定制化需求呈现爆发式增长。尤其在船舶、工程机械、煤矿机械等高强度工况领域,用户对法兰的耐压性、抗腐蚀性及适配性提出更高要求。然而,…

狐狸

https://xinyoudui.com/ac/contest/74500D282000A6307D6541/problem/43710 T1 改 \(O(n)\) 改了 114514 年,没有注意到这道简单题。 首先显然有一个基于哈希的暴力做法,赛场上我花 eps 分钟打了个这个,不难发现和 s…

客服大模型 ≠ 问答机器人

为什么很多客服大模型,看起来很聪明,却一点也不好用 如果你做过客服相关的项目,大概率会经历一个非常相似的过程。 一开始,大家都很兴奋。 把历史客服文档、FAQ、知识库一股脑丢进 RAG,接上一个看起来很强的模型,…

羽球教学进入智能时代:吴忠码上俱乐部的专业与科技融合之路

清晨的阳光透过窗户洒在训练场上&#xff0c;韩宁波教练正与一位学员进行多拍对拉练习。与往常不同的是&#xff0c;场边一台平板电脑实时记录着这次训练的数据&#xff1a;击球成功率、移动范围、反应速度…… “你的正手高远球今天成功率提升了12%&#xff0c;但反手区的防守…

金华万级无尘车间改造,2026年优质服务商推荐,恒温恒湿车间/无尘车间/无尘室/车间净化/净化工程,无尘车间标准哪家好

在半导体、生物医药、新能源等高精密制造领域,万级无尘车间是保障产品良率、控制污染风险的核心基础设施。其环境洁净度、温湿度稳定性及空气粒子浓度控制能力,直接影响企业生产效率与市场竞争力。本文聚焦金华及周边…

瑞祥全球购卡怎么回收,四种主流渠道展示

瑞祥全球购卡怎么回收,四种主流渠道展示瑞祥全球购作为瑞祥科技集团打造的综合消费服务载体,其发行的全球购卡覆盖商超、餐饮、线上购物等多元场景,是节日馈赠与日常消费的常用卡券。不少人手中会囤积闲置的瑞祥全球…

ESCMT AI培训:签协议保就业,精准破解转行/提升痛点,筑牢AI职场护城河

在AI技术飞速迭代、行业人才需求激增的今天,越来越多人渴望抓住AI风口——零基础者想转行拿高薪,职场人想借AI技能提升竞争力,应届生想凭借AI专长敲开名企大门,但“学不会、没项目、就业难、怕踩坑”四大痛点,始终…

洛谷 P10931:闇の連鎖 ← 树上差分(边差分)+ dfs预处理

​【题目来源】https://www.luogu.com.cn/problem/P10931https://www.acwing.com/problem/content/354/ 【题目描述】传说中的暗之连锁被人们称为 Dark。Dark 是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它。…

mac文本编辑器

https://gitee.com/cxasm/notepad--/releases/tag/v2.20.1

波形发生器如何构建?基于Verilog打造自己的DDS任意波形发生器

波形发生器在各大行业中均有使用&#xff0c;带来了诸多便利。对于波形发生器&#xff0c;小编在往期文章中做过很多介绍。本文中&#xff0c;主要在于探讨波形发生器的实现过程。具体而言&#xff0c;将介绍基于Verilog实现DDS任意波形发生器。如果你是波形发生器的爱好者&…

深度解析支持CRM系统集成的银行服务机器人技术与主流产品评测

随着银行业数字化转型的深入,线下网点的职能正在经历从“交易中心”向“营销与服务中心”的深刻变革。在这一进程中,智能服务机器人已不再是仅供展示的科技噱头,而是逐渐演变为能够承担实质性工作的“数字员工”。截…

2026 年 AI 摄影培训哪家强?五大优质院校盘点,成都莱特凭实力领跑

引言 随着 AIGC 技术的飞速发展,AI 摄影、短视频创作、视频剪辑与 IP 运营已成为职场新风口,越来越多的人渴望通过专业培训掌握相关技能,无论是职场提升、兴趣深耕还是创业转型,选择一所靠谱的培训学校成为关键。2…

基于Java+SpringBoot+SSM师生互动桥系统(源码+LW+调试文档+讲解等)/师生互动平台系统/师生互动教学系统/互动桥梁系统/师生交流桥系统/教学互动桥系统

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

工业检测必备:盘点国内外气密性测试仪品牌,哪家更适合你?

在工业生产中,产品的气密性是衡量其质量和性能的重要指标之一。无论是汽车零部件、电子设备,还是食品包装等行业,都需要使用气密性测试仪来确保产品的密封性符合标准。然而,面对市场上琳琅满目的气密性测试仪品牌和…

电商GIF主图压缩教程,专业GIF压缩工具优化攻略

做自媒体配图、电商主图或课件动图时&#xff0c;总遇到选不好GIF 压缩工具、压缩后画质模糊&#xff0c;或是压缩后体积仍不达标无法上传的问题&#xff0c;换多款工具反复调试&#xff0c;既浪费时间又达不到预期效果。不同平台对 GIF 有明确规格要求&#xff1a;微信动图建议…