From dcdb2e86aa2a6d1f4275aae7edfa441cb2dbd99f Mon Sep 17 00:00:00 2001 From: nitiantuhao <2062405236@qq.com> Date: Fri, 13 Mar 2026 19:33:52 +0800 Subject: [PATCH] 1.0 --- Core/Src/can.c | 2 +- Core/Src/main.c | 24 ++++++++++++++++-------- FDR-Core.ioc | 5 +++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Core/Src/can.c b/Core/Src/can.c index 2b21208..05c3003 100644 --- a/Core/Src/can.c +++ b/Core/Src/can.c @@ -39,7 +39,7 @@ void MX_CAN1_Init(void) /* USER CODE END CAN1_Init 1 */ hcan1.Instance = CAN1; hcan1.Init.Prescaler = 21; - hcan1.Init.Mode = CAN_MODE_NORMAL; + hcan1.Init.Mode = CAN_MODE_LOOPBACK; hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan1.Init.TimeSeg1 = CAN_BS1_6TQ; hcan1.Init.TimeSeg2 = CAN_BS2_1TQ; diff --git a/Core/Src/main.c b/Core/Src/main.c index 25755cd..3f6fdf1 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -69,7 +69,10 @@ void SystemClock_Config(void); extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄 int _write(int file, char *ptr, int len) { - HAL_UART_Transmit(&huart4, (uint8_t*)ptr, len, HAL_MAX_DELAY); + for (int i = 0; i < len; i++) { + HAL_UART_Transmit(&huart4, (uint8_t*)&ptr[i], 1, 1000); + HAL_Delay(1); // 每个字符间隔 1ms + } return len; } /* USER CODE END 0 */ @@ -115,9 +118,9 @@ int main(void) MX_CAN1_Init(); MX_UART4_Init(); /* USER CODE BEGIN 2 */ - // 1. 初始化 bxCAN 过滤器 (全通) - // 后面的 printf 就能看到了 - CAN_FilterTypeDef canFilterConfig; +// 1. 结构体一定要初始化为 0! + CAN_FilterTypeDef canFilterConfig = {0}; + canFilterConfig.FilterBank = 0; canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; @@ -127,16 +130,16 @@ int main(void) canFilterConfig.FilterMaskIdLow = 0x0000; canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; canFilterConfig.FilterActivation = ENABLE; + + // 2. 加上这极其关键的一句,把 0-13 号过滤器分给 CAN1 canFilterConfig.SlaveStartFilterBank = 14; HAL_StatusTypeDef fs = HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig); HAL_StatusTypeDef ss = HAL_CAN_Start(&hcan1); - - // 这句开启接收中断的函数极其重要,确认它还在! HAL_StatusTypeDef ns = HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); - // 💡 修改这里:必须加这一句!给你的电脑 3 秒钟时间去识别 USB 虚拟串口 - HAL_Delay(3000); + HAL_Delay(1000); + printf("Filter: %d, Start: %d, Notify: %d\r\n", fs, ss, ns); /* USER CODE END 2 */ /* Infinite loop */ @@ -154,6 +157,11 @@ int main(void) // ========================================== // 强制打印 2:原来的 CAN 接收处理逻辑 // ========================================== + uint32_t fifo_pending = HAL_CAN_GetRxFifoFillLevel(&hcan1, CAN_RX_FIFO0); + if (fifo_pending > 0) { + printf("FIFO has %lu messages\r\n", fifo_pending); + } + if (can_rx_flag == 1) { can_rx_flag = 0; // 赶紧先把标志位清零 diff --git a/FDR-Core.ioc b/FDR-Core.ioc index 41894e1..edb4842 100644 --- a/FDR-Core.ioc +++ b/FDR-Core.ioc @@ -6,7 +6,8 @@ CAN1.BS1=CAN_BS1_6TQ CAN1.CalculateBaudRate=250000 CAN1.CalculateTimeBit=4000 CAN1.CalculateTimeQuantum=500.0 -CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1 +CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,Mode +CAN1.Mode=CAN_MODE_LOOPBACK CAN1.Prescaler=21 File.Version=6 GPIO.groupedBy= @@ -192,7 +193,7 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM1_Init-TIM1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_TIM5_Init-TIM5-false-HAL-true,8-MX_TIM8_Init-TIM8-false-HAL-true,9-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,10-MX_TIM9_Init-TIM9-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_USART1_UART_Init-USART1-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_TIM1_Init-TIM1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_TIM5_Init-TIM5-false-HAL-true,8-MX_TIM8_Init-TIM8-false-HAL-true,9-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false,10-MX_TIM9_Init-TIM9-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_UART4_Init-UART4-false-HAL-true RCC.48MHZClocksFreq_Value=48000000 RCC.AHBFreq_Value=168000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4