本次测试FDCAN通讯,STM32U3是带FDCAN外设的,功能还是挺强大的。这个外设也是现在项目中常用的通讯方式。
通信芯片使用的是自制的TJA1462 模块,这样使用杜邦线连接到FDCAN测试仪,连接到电脑上位机上,就可以进行测试了。
整体连接图如图1所示:
图1
CubeMx 配置如图2所示:
图2
FDCAN 配置为 Nominal 帧设置为1Mbps,而数据帧设置为2Mbps,数据选择64个字节。然后生成项目框架。
修改一下程序的发送和接收中断程序,程序配置如下所示:
- /* Configure Rx filter */
- sFilterConfig.IdType = FDCAN_STANDARD_ID;
- sFilterConfig.FilterIndex = 0;
- sFilterConfig.FilterType = FDCAN_FILTER_MASK;
- sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
- sFilterConfig.FilterID1 = 0x123;//receive ID
- sFilterConfig.FilterID2 = 0x7FF;
- 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();
- }
- /* Prepare Tx Header */
- TxHeader.Identifier = 0x321;
- TxHeader.IdType = FDCAN_STANDARD_ID;
- TxHeader.TxFrameType = FDCAN_DATA_FRAME;
- TxHeader.DataLength = FDCAN_DLC_BYTES_64;//FDCAN_DLC_BYTES_8;
- TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
- TxHeader.BitRateSwitch = FDCAN_BRS_ON;
- TxHeader.FDFormat = FDCAN_FD_CAN;//FDCAN_CLASSIC_CAN;
- TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
- TxHeader.MessageMarker = 0;
复制代码
编译,Debug,通过上位机观看测试数据,接收数据如图3所示:
图3
发送数据如图4所示:
图4
经过测试,发送和接收正常,调试5Mbps的时候,数据不能连接上,应该是杜邦线的问题。
|