news 2026/4/18 3:43:38

[STM32C0] 【STM32C092RC 测评】6、板载外设——SPI与CAN的回环测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[STM32C0] 【STM32C092RC 测评】6、板载外设——SPI与CAN的回环测试

本次SPI测试本来想要进行LCD的驱动,不过后来想了想液晶屏的SPI接口基本上只能测试一些发送是否可行,接收却没有测到,看到有网友用到了回环测试,确实挺不错,对于串行接口来说基本是通用的,所以这里把SPI和CAN都放到了这里进行回环测试。
SPI(串行外设接口)是一种广泛应用于嵌入式系统及电子设备的高速、全双工、同步通信总线,其核心包含四个关键信号引脚:SCK(串行时钟)、MOSI(主出从入)、MISO(主入从出)及CS(从设备选择)。SCK负责生成时钟信号,以调控数据传输流程。MOSI负责由主设备向从设备传输数据。MISO则实现数据的反向回传功能。CS引脚用于选定参与通信的从设备。Loopback测试的核心机制在于构建一个自环通路,通过直接将主设备的MOSI与MISO引脚短接,实现数据在无外部设备连接的情况下的闭环传输,从而迅速且有效地验证SPI接口的基本功能完整性。
(CAN)作为专为实时应用量身打造的串行通讯协议,在工业及自动化领域扮演着至关重要的角色。仅需简单的双绞线,它便能实现信号的高效、稳定传输。本次测试中的C092型号支持FDCAN,即CAN FD(CAN with Flexible Data Rate),作为传统CAN协议的升级版,其核心升级聚焦于协议层面,物理层维持原状。我们主要关注的点在于传输速率、长度、帧格式、ID等内容。
首先看一下SPI的回环测试。
为此我们需要找到SPI的MOSI(主出从入)、MISO(主入从出)引脚,我们看一下C092支持的SPI模块,并选择SPI1作为基础测试配置:

SPI1对应的引脚,默认如下:

实物连接如下:

接下来编写一下SPI测试程序:

复制

  1. <p>void SPI_LoopbackTest(void) </p><p>{</p><p> uint8_t SPItx_buffer[10] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,</p><p> 0x09,0x0A};</p><p> uint8_t SPIrx_buffer[10] = {0};</p><p> HAL_SPI_TransmitReceive(&hspi1, SPItx_buffer, SPIrx_buffer, 10, 100);</p><p> if(memcmp(SPItx_buffer, SPIrx_buffer, 8) == 0) {</p><p> HAL_UART_Transmit(&huart2, (uint8_t *)&SPIrx_buffer, 10, 0xFFFF);</p><p> }</p><p>}</p>


效果如下:

回环测试确实不错,可以用最少的器件实现功能模块的测试。

接下来看一下CAN的回环测试,同样的道理,实物连接如下:

主要不要连接错了,有三个引脚,有一个是地:

我们看一下FDCAN的配置:

注意一下,我们开启了FIFO进行数据接收,传输速率可以通过时钟分频 、预分频 、Seg1 、 Seg2这几个参数进行配置。
CAN的一个特色就是其需要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>


然后创建三个带ID的数据发送,其中两个是在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 = 0x2111113;</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>


分别发送的数据如下:

复制

  1. <p>static const uint8_t txData0[] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21};</p><p>static const uint8_t txData1[] = {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};</p><p>static const uint8_t txData2[] = {0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0x00};</p>


通过比对后发现,只有牵连组数据发送出来了,不在这个区间的直接过滤了:


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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 10:03:17

云南内连四省外踏三国,它的位置有多重要?

我国云南就像一个位于十字路口的“超级枢纽”。 在国内&#xff0c;它与西藏、四川、贵州、广西四省区手牵手相连&#xff1b;在国外&#xff0c;它更像是把脚伸向了缅甸、老挝和越南三国。 这种独一无二的内外连通性&#xff0c;让云南的战略地位脱颖而出。 独特的地理位置…

作者头像 李华
网站建设 2026/4/15 3:53:12

在以往工作中遇到的不同 kubernetes 问题总结

前言 本文基于对 Hidden Kubernetes Bad Practices Learned the Hard Way During Incidents 的阅读后&#xff0c;在尊重原文内容的基础上进行了本地化翻译与整理&#xff0c;在语义表达上相较于机翻&#xff0c;更加贴近中文母语者的阅读习惯&#xff0c;提升整体的可读性与理…

作者头像 李华
网站建设 2026/4/15 8:17:37

对声音数字化的一些问题

一、声音转模拟的电信号 一般是麦克风和三极管放大电路组成。 麦克风一般是线圈感应类型或者电容类型。 二、模拟电信号转数字信号 需要模拟转数字信号。 需要一些电压比较器&#xff0c;当模拟电压达到某个电压&#xff0c;就导通输出数字电平。 三、过滤噪音的思路 1、声音数…

作者头像 李华
网站建设 2026/4/16 17:15:31

摄影爱好者必备:afilmory 个人摄影网站服务器搭搭建教程

如果你是摄影爱好者,不管是风光、人像、街拍还是纪实,大概率都会遇到这些情况: 📷 拍了很多照片,却长期躺在硬盘里 😵 社交平台压缩严重,画质失真 🧠 想系统性展示作品,却不知道怎么搭网站 💻 用现成建站平台,风格和控制力都有限 🔒 希望作品只属于自己,不被…

作者头像 李华
网站建设 2026/3/29 2:45:43

技术小白也能用的 Homebrew:WailBrew 服务器部署教程

如果你是 macOS 用户,大概率听说过 Homebrew,但也一定遇到过这些情况: 😵 安装软件要敲一长串命令 🧠 不知道装过什么、删没删干净 💻 看到终端就犯怵 🔁 换电脑后,环境要从头来 📦 只是想装个工具,却感觉像在“学运维” 后来我接触到 WailBrew 这种专门给技术…

作者头像 李华
网站建设 2026/4/10 7:42:07

【学术干货免费领】学术会议海报 | 学术会议必备 | 科研展示 | 科研海报 | 国际学术海报 | 会议参会 | 科研成果展示 | 海报展示 | 90+学术Poster模板0元打包下载,速领!

一句话&#xff1a;只要你的研究需要“被看见”&#xff0c;模板就能让你“被看懂、被记住、被引用”。硕博研究生开题/中期/毕业答辩、学术年会、国内外会议 Poster Session30 min 出图&#xff0c;导师秒过&#xff0c;奖学金加分青年教师/博士后职称评审、基金前期成果墙、校…

作者头像 李华