【前言】
STM32U385的外设中有FDCAN,当然也是支持CAN 2.0的,这一篇分享如何配置CAN并实现数据的发送测试。
1、打开stm32CubeMX,打开FDCAN,配置如下:

Frame Format选择classic mode 为CAN模式
在Bit Timings 参数中,配置后,在结果中可以看出我们配置的波特率。配置为1Mbps。
2、测试代码
我在一个任务中初始化can,并周期发送数据:
extern FDCAN_HandleTypeDef hfdcan1;
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN defaultTask */
/* Infinite loop */
static const uint8_t txData[] = {0x10, 0x32, 0x54, 0x76, 0x98, 0x00, 0x11, 0x22};
xSemaphore = xSemaphoreCreateBinary();
/* Start FDCAN controller */
if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK)
{
Error_Handler();
}
FDCAN_TxHeaderTypeDef txHeader;
txHeader.Identifier = 0x123;
txHeader.IdType = FDCAN_STANDARD_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_STORE_TX_EVENTS;
txHeader.MessageMarker = 0U;
for(;;)
{
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &txHeader, txData);
osDelay(1000);
}
/* USER CODE END defaultTask */
}
下载到开发板后,需要使用一个can转TTL的转换模式,RX接PA11,TX接PA12。
【测试效果】
使用FDCAN分析仪,配置为1M的速率,可以成功的接到了发送出来的数据:

|