This commit is contained in:
2026-03-13 19:33:52 +08:00
parent 9a0f59a271
commit dcdb2e86aa
3 changed files with 20 additions and 11 deletions

View File

@@ -39,7 +39,7 @@ void MX_CAN1_Init(void)
/* USER CODE END CAN1_Init 1 */ /* USER CODE END CAN1_Init 1 */
hcan1.Instance = CAN1; hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 21; hcan1.Init.Prescaler = 21;
hcan1.Init.Mode = CAN_MODE_NORMAL; hcan1.Init.Mode = CAN_MODE_LOOPBACK;
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan1.Init.TimeSeg1 = CAN_BS1_6TQ; hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;
hcan1.Init.TimeSeg2 = CAN_BS2_1TQ; hcan1.Init.TimeSeg2 = CAN_BS2_1TQ;

View File

@@ -69,7 +69,10 @@ void SystemClock_Config(void);
extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄 extern USBD_HandleTypeDef hUsbDeviceFS; // 引入 USB 状态句柄
int _write(int file, char *ptr, int len) { 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; return len;
} }
/* USER CODE END 0 */ /* USER CODE END 0 */
@@ -115,9 +118,9 @@ int main(void)
MX_CAN1_Init(); MX_CAN1_Init();
MX_UART4_Init(); MX_UART4_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
// 1. 初始化 bxCAN 过滤器 (全通) // 1. 结构体一定要初始化为 0
// 后面的 printf 就能看到了 CAN_FilterTypeDef canFilterConfig = {0};
CAN_FilterTypeDef canFilterConfig;
canFilterConfig.FilterBank = 0; canFilterConfig.FilterBank = 0;
canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
@@ -127,16 +130,16 @@ int main(void)
canFilterConfig.FilterMaskIdLow = 0x0000; canFilterConfig.FilterMaskIdLow = 0x0000;
canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
canFilterConfig.FilterActivation = ENABLE; canFilterConfig.FilterActivation = ENABLE;
// 2. 加上这极其关键的一句,把 0-13 号过滤器分给 CAN1
canFilterConfig.SlaveStartFilterBank = 14; canFilterConfig.SlaveStartFilterBank = 14;
HAL_StatusTypeDef fs = HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig); HAL_StatusTypeDef fs = HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig);
HAL_StatusTypeDef ss = HAL_CAN_Start(&hcan1); HAL_StatusTypeDef ss = HAL_CAN_Start(&hcan1);
// 这句开启接收中断的函数极其重要,确认它还在!
HAL_StatusTypeDef ns = HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); HAL_StatusTypeDef ns = HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING);
// 💡 修改这里:必须加这一句!给你的电脑 3 秒钟时间去识别 USB 虚拟串口 HAL_Delay(1000);
HAL_Delay(3000); printf("Filter: %d, Start: %d, Notify: %d\r\n", fs, ss, ns);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Infinite loop */ /* Infinite loop */
@@ -154,6 +157,11 @@ int main(void)
// ========================================== // ==========================================
// 强制打印 2原来的 CAN 接收处理逻辑 // 强制打印 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) { if (can_rx_flag == 1) {
can_rx_flag = 0; // 赶紧先把标志位清零 can_rx_flag = 0; // 赶紧先把标志位清零

View File

@@ -6,7 +6,8 @@ CAN1.BS1=CAN_BS1_6TQ
CAN1.CalculateBaudRate=250000 CAN1.CalculateBaudRate=250000
CAN1.CalculateTimeBit=4000 CAN1.CalculateTimeBit=4000
CAN1.CalculateTimeQuantum=500.0 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 CAN1.Prescaler=21
File.Version=6 File.Version=6
GPIO.groupedBy= GPIO.groupedBy=
@@ -192,7 +193,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false 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.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=168000000 RCC.AHBFreq_Value=168000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4 RCC.APB1CLKDivider=RCC_HCLK_DIV4