完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
STM32H7B0 CAN发送异常
0X210100 = hfdcan1.Instance->TXFQS /*!< FDCAN Tx Event FIFO Status register, */ 0X200 = hfdcan1.ErrorCode /*!< FDCAN Error code */ 每次上电能正常发送10多次就不能发了 故障代码 就是0X200 = hfdcan1.ErrorCode 是不是外部硬件有问题,还是外部晶震有问题,USART1一直都是正常发送 我是每秒触发两次发送CAN,困惑我好多天了,大家没有遇到过QQ422866299 /* 配置FDCAN1 */ hfdcan1.Instance = FDCAN1; hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_NO_BRS; hfdcan1.Init.Mode = FDCAN_MODE_NORMAL; hfdcan1.Init.AutoRetransmission = DISABLE; hfdcan1.Init.TransmitPause = DISABLE; hfdcan1.Init.ProtocolException = ENABLE; hfdcan1.Init.NominalPrescaler = 0x0AU; hfdcan1.Init.NominalSyncJumpWidth= 0x08U; hfdcan1.Init.NominalTimeSeg1 = 0x1FU; hfdcan1.Init.NominalTimeSeg2 = 0x08U; hfdcan1.Init.DataPrescaler = 0x0AU; hfdcan1.Init.DataSyncJumpWidth = 0x04U; hfdcan1.Init.DataTimeSeg1 = 0x0FU; hfdcan1.Init.DataTimeSeg2 = 0x04U; hfdcan1.Init.MessageRAMOffset = 0x00U; hfdcan1.Init.StdFiltersNbr = 0x01U; hfdcan1.Init.ExtFiltersNbr = 0x00U; hfdcan1.Init.RxFifo0ElmtsNbr = 0x02U; hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_8; hfdcan1.Init.RxFifo1ElmtsNbr = 0x00U; hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_8; hfdcan1.Init.RxBuffersNbr = 0x00U; hfdcan1.Init.RxBufferSize = 0x00U; hfdcan1.Init.TxEventsNbr = 0x00U; hfdcan1.Init.TxBuffersNbr = 0x00U; hfdcan1.Init.TxFifoQueueElmtsNbr = 0x02U; hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8; /* 配置过滤器 */ sFilterConfig1.IdType = FDCAN_EXTENDED_ID; sFilterConfig1.FilterIndex = 0x00U; sFilterConfig1.FilterType = FDCAN_FILTER_MASK; sFilterConfig1.FilterConfig = FDCAN_FILTER_TO_RXFIFO0; sFilterConfig1.FilterID1 = 0x00U; sFilterConfig1.FilterID2 = 0x00U; HAL_FDCAN_ConfigFifoWatermark(&hfdcan1, FDCAN_CFG_RX_FIFO0, 0x01U);/* 设置Rx FIFO0的wartermark为1 */ HAL_FDCAN_ActivateNotification(&hfdcan1,FDCAN_IT_RX_FIFO0_WATERMARK,0x00U); /* 开启中断*/ HAL_FDCAN_Start(&hfdcan1);/* 启动FDCAN */ /* 配置发送参数 */ TxHeader.Identifier = receiveId; TxHeader.IdType = FDCAN_EXTENDED_ID; TxHeader.TxFrameType = FDCAN_DATA_FRAME; TxHeader.DataLength = (uint32_t)((_Len & 0xFFU) << 0x10U); TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE; TxHeader.BitRateSwitch = FDCAN_BRS_OFF; TxHeader.FDFormat = FDCAN_FD_CAN; TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS; TxHeader.MessageMarker = 0x00U; if(HAL_FDCAN_AddMessageToTxFifoQ(fdcanH, &TxHeader, _DataBuf) != HAL_OK) mo = 0x01U ;else mo = 0x00U ; return mo; /* 系统时钟配置 */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE |RCC_OSCILLATORTYPE_LSE; // RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.LSEState = RCC_LSE_ON; RCC_OscInitStruct.LSIState = RCC_LSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 5; RCC_OscInitStruct.PLL.PLLN = 96; RCC_OscInitStruct.PLL.PLLP = 2; RCC_OscInitStruct.PLL.PLLQ = 2; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_2; RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE; RCC_OscInitStruct.PLL.PLLFRACN = 0; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK) { Error_Handler(); } PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_FDCAN; PeriphClkInitStruct.PLL2.PLL2M = 25; PeriphClkInitStruct.PLL2.PLL2N = 200; PeriphClkInitStruct.PLL2.PLL2P = 2; PeriphClkInitStruct.PLL2.PLL2Q = 2; PeriphClkInitStruct.PLL2.PLL2R = 2; PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_0; PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOMEDIUM; PeriphClkInitStruct.PLL2.PLL2FRACN = 0; PeriphClkInitStruct.FdcanClockSelection = RCC_FDCANCLKSOURCE_PLL2; PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } __HAL_RCC_CSI_ENABLE() ; /* 使能CSI时钟 */ __HAL_RCC_SYSCFG_CLK_ENABLE() ; /* 使能SYSCFG时钟 */ HAL_EnableCompensationCell(); /* 使能IO补偿单元 */ |
|
相关推荐
1个回答
|
|
|
STM32H7B0的CAN发送异常可能有多种原因,以下是一些可能的原因和排查步骤: 1. 硬件问题
2. 软件配置
3. 总线负载和干扰
4. 调试和排查
5. 固件更新
总结:
通过以上步骤,可以逐步排查和解决STM32H7B0 CAN发送异常的问题。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
stm32mp157的异核通信的rpmsg_sdb的m4固件和a7驱动该如何编写?
1465 浏览 0 评论
stm32f103用freertos对一个采样率为1kHz的传感器,进行采样,数据出差
1518 浏览 0 评论
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
3664 浏览 1 评论
3856 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
2475 浏览 1 评论
STM32H7打开DCache后,出现了串口接收信息为空的现象,是哪里出了问题?
745浏览 5评论
用NANO STM32F103RBT6的开发板烧录不了是哪里出了问题?
678浏览 5评论
723浏览 5评论
外部中断触发类型为双边沿触发,进入中断回调后有什么办法判断该边沿是上升沿还是下降沿?
962浏览 5评论
STM32L071CBT6低温环境下无法正常工作是什么原因引起的?
763浏览 5评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 13:37 , Processed in 0.864670 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
779