2026/4/16 17:45:53
网站建设
项目流程
金本网站建设设计,做服装有哪些好的网站有哪些方面,软件外包开发平台,中搜网站提交本次SPI测试本来想要进行LCD的驱动#xff0c;不过后来想了想液晶屏的SPI接口基本上只能测试一些发送是否可行#xff0c;接收却没有测到#xff0c;看到有网友用到了回环测试#xff0c;确实挺不错#xff0c;对于串行接口来说基本是通用的#xff0c;所以这里把SPI和CA…本次SPI测试本来想要进行LCD的驱动不过后来想了想液晶屏的SPI接口基本上只能测试一些发送是否可行接收却没有测到看到有网友用到了回环测试确实挺不错对于串行接口来说基本是通用的所以这里把SPI和CAN都放到了这里进行回环测试。SPI串行外设接口是一种广泛应用于嵌入式系统及电子设备的高速、全双工、同步通信总线其核心包含四个关键信号引脚SCK串行时钟、MOSI主出从入、MISO主入从出及CS从设备选择。SCK负责生成时钟信号以调控数据传输流程。MOSI负责由主设备向从设备传输数据。MISO则实现数据的反向回传功能。CS引脚用于选定参与通信的从设备。Loopback测试的核心机制在于构建一个自环通路通过直接将主设备的MOSI与MISO引脚短接实现数据在无外部设备连接的情况下的闭环传输从而迅速且有效地验证SPI接口的基本功能完整性。CAN作为专为实时应用量身打造的串行通讯协议在工业及自动化领域扮演着至关重要的角色。仅需简单的双绞线它便能实现信号的高效、稳定传输。本次测试中的C092型号支持FDCAN即CAN FDCAN with Flexible Data Rate作为传统CAN协议的升级版其核心升级聚焦于协议层面物理层维持原状。我们主要关注的点在于传输速率、长度、帧格式、ID等内容。首先看一下SPI的回环测试。为此我们需要找到SPI的MOSI主出从入、MISO主入从出引脚我们看一下C092支持的SPI模块并选择SPI1作为基础测试配置SPI1对应的引脚默认如下实物连接如下接下来编写一下SPI测试程序复制pvoid SPI_LoopbackTest(void) /pp{/pp uint8_t SPItx_buffer[10] {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,/pp 0x09,0x0A};/pp uint8_t SPIrx_buffer[10] {0};/pp HAL_SPI_TransmitReceive(hspi1, SPItx_buffer, SPIrx_buffer, 10, 100);/pp if(memcmp(SPItx_buffer, SPIrx_buffer, 8) 0) {/pp HAL_UART_Transmit(huart2, (uint8_t *)SPIrx_buffer, 10, 0xFFFF);/pp }/pp}/p效果如下回环测试确实不错可以用最少的器件实现功能模块的测试。接下来看一下CAN的回环测试同样的道理实物连接如下主要不要连接错了有三个引脚有一个是地我们看一下FDCAN的配置注意一下我们开启了FIFO进行数据接收传输速率可以通过时钟分频 、预分频 、Seg1 、 Seg2这几个参数进行配置。CAN的一个特色就是其需要ID进行过滤可以通过添加过滤器的方式将无用信号剔除我们创建一个标准过滤器以及一个扩展滤波器复制p/* Configure standard ID reception filter to Rx FIFO 0. Only accept ID FilterID1 *//pp FDCAN_FilterTypeDef sFilterConfig;/pp sFilterConfig.IdType FDCAN_STANDARD_ID;/pp sFilterConfig.FilterIndex 0U;/pp sFilterConfig.FilterType FDCAN_FILTER_DUAL;/pp sFilterConfig.FilterConfig FDCAN_FILTER_TO_RXFIFO0;/pp sFilterConfig.FilterID1 0x444;/pp sFilterConfig.FilterID2 0x444; /* For acceptance, MessageID and FilterID1 must match exactly *//pp if (HAL_FDCAN_ConfigFilter(hfdcan1, sFilterConfig) ! HAL_OK)/pp {/pp Error_Handler();/pp }/pp /* Configure extended ID reception filter to Rx FIFO 1. Only accept ID between FilterID1 and FilterID2. *//pp sFilterConfig.IdType FDCAN_EXTENDED_ID;/pp sFilterConfig.FilterIndex 0U;/pp sFilterConfig.FilterType FDCAN_FILTER_RANGE_NO_EIDM;/pp sFilterConfig.FilterConfig FDCAN_FILTER_TO_RXFIFO1;/pp sFilterConfig.FilterID1 0x1111111;/pp sFilterConfig.FilterID2 0x2222222;/pp if (HAL_FDCAN_ConfigFilter(hfdcan1, sFilterConfig) ! HAL_OK)/pp {/pp Error_Handler();/pp }/p然后创建三个带ID的数据发送其中两个是在ID滤波器中间的复制pFDCAN_TxHeaderTypeDef txHeader;/pp /* Add message to Tx FIFO *//pp txHeader.Identifier 0x444;/pp txHeader.IdType FDCAN_STANDARD_ID;/pp txHeader.TxFrameType FDCAN_DATA_FRAME;/pp txHeader.DataLength FDCAN_DLC_BYTES_12;/pp txHeader.ErrorStateIndicator FDCAN_ESI_ACTIVE;/pp txHeader.BitRateSwitch FDCAN_BRS_ON;/pp txHeader.FDFormat FDCAN_FD_CAN;/pp txHeader.TxEventFifoControl FDCAN_STORE_TX_EVENTS;/pp txHeader.MessageMarker 0x52U;/pp if (HAL_FDCAN_AddMessageToTxFifoQ(hfdcan1, txHeader, txData0) ! HAL_OK)/pp {/pp Error_Handler();/pp }/pp /* Add second message to Tx FIFO *//pp txHeader.Identifier 0x1111112;/pp txHeader.IdType FDCAN_EXTENDED_ID;/pp txHeader.TxFrameType FDCAN_DATA_FRAME;/pp txHeader.DataLength FDCAN_DLC_BYTES_12;/pp txHeader.ErrorStateIndicator FDCAN_ESI_PASSIVE;/pp txHeader.BitRateSwitch FDCAN_BRS_ON;/pp txHeader.FDFormat FDCAN_FD_CAN;/pp txHeader.TxEventFifoControl FDCAN_STORE_TX_EVENTS;/pp txHeader.MessageMarker 0xCCU;/pp if (HAL_FDCAN_AddMessageToTxFifoQ(hfdcan1, txHeader, txData1) ! HAL_OK)/pp {/pp Error_Handler();/pp }/pp /* Add third message to Tx FIFO *//pp txHeader.Identifier 0x2111113;/pp txHeader.IdType FDCAN_EXTENDED_ID;/pp txHeader.TxFrameType FDCAN_DATA_FRAME;/pp txHeader.DataLength FDCAN_DLC_BYTES_12;/pp txHeader.ErrorStateIndicator FDCAN_ESI_PASSIVE;/pp txHeader.BitRateSwitch FDCAN_BRS_OFF;/pp txHeader.FDFormat FDCAN_FD_CAN;/pp txHeader.TxEventFifoControl FDCAN_STORE_TX_EVENTS;/pp txHeader.MessageMarker 0xDDU;/pp if (HAL_FDCAN_AddMessageToTxFifoQ(hfdcan1, txHeader, txData2) ! HAL_OK)/pp {/pp Error_Handler();/pp }/p分别发送的数据如下复制pstatic const uint8_t txData0[] {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21};/ppstatic const uint8_t txData1[] {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55};/ppstatic 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所有任何人未经允许禁止转载。