完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用freeRTOS作为操作系统。 CAN案例用于CAN总线仿真。CPU类型为TC397
我想在没有环回模式的情况下发送和接收 CAN 数据(标准 CAN)。 引脚的定义是 IFX_CONST IfxCan_Can_Pins g_Can_1_wu_conmod_pins = { IfxCan_TXD11_P02_5_OUT , IfxPort_OutputMode_pushPull, // CAN1_TX IfxCan_RXD11A_P02_4_IN , IfxPort_InputMode_noPullDevice, // CAN1_RX IfxPort_PadDriver_cmosAutomotiveSpeed2}; 按照我们的示意图 董事会可以传送消息我可以在 BusMaster 上收到 当我想接收消息时,会出现总线错误,并且 RX 中断未激活。 以下是启动 MCMCAN 的代码 void wu_conmod_can_init(void){ // CAN module configuration and initialization IfxCan_Can_initModuleConfig( g_mcmcan_wu_conmod.canConfig, MODULE_CAN1); IfxCan_Can_initModule( g_mcmcan_wu_conmod.canModule, g_mcmcan_wu_conmod.canConfig); // WU_CONMOD CAN-1 node configuration and initialization IfxCan_Can_initNodeConfig( g_mcmcan_wu_conmod.canNodeConfig, g_mcmcan_wu_conmod.canModule); g_mcmcan_wu_conmod.canNodeConfig.busLoopbackEnabled = FALSE; g_mcmcan_wu_conmod.canNodeConfig.nodeId = IfxCan_NodeId_1; g_mcmcan_wu_conmod.canNodeConfig.frame.type = IfxCan_FrameType_transmitAndReceive; //transmit interrupt //g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.transmissionCompletedEnabled = TRUE; //g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.traco.priority = ISR_PRIORITY_CAN_TX; //g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.traco.interruptLine = IfxCan_InterruptLine_0; //g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.traco.typeOfService = IfxSrc_Tos_cpu0; //receive interrupt g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.messageStoredToDedicatedRxBufferEnabled = TRUE; g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.reint.priority = ISR_PRIORITY_CAN_RX; g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.reint.interruptLine = IfxCan_InterruptLine_1; g_mcmcan_wu_conmod.canNodeConfig.interruptConfig.reint.typeOfService = IfxSrc_Tos_cpu0; //binding pin g_mcmcan_wu_conmod.canNodeConfig.baudRate.baudrate = 500000; // 500 KBaud g_mcmcan_wu_conmod.canNodeConfig.pins = g_Can_1_wu_conmod_pins; IfxCan_Can_initNode( g_mcmcan_wu_conmod.canNode, g_mcmcan_wu_conmod.canNodeConfig);} RX 中断 IFX_INTERRUPT(canIsrRxHandler, 0, ISR_PRIORITY_CAN_RX);void canIsrRxHandler(void){ /* Clear the "Message stored to Dedicated RX Buffer" interrupt flag */ IfxCan_Node_clearInterruptFlag(g_mcmcan_wu_conmod.canNode.node, IfxCan_Interrupt_messageStoredToDedicatedRxBuffer); /* Clear the "New Data" flag; as long as the "New Data" flag is set, the respective Rx buffer is * locked against updates from received matching frames. */ IfxCan_Node_clearRxBufferNewDataFlag(g_mcmcan_wu_conmod.canNode.node, g_mcmcan_wu_conmod.canFilter.rxBufferOffset); /* Read the received CAN message */ IfxCan_Can_readMessage( g_mcmcan_wu_conmod.canNode, g_mcmcan_wu_conmod.rxMsg, g_mcmcan_wu_conmod.rxData); printDebug("RX inter happened");} 你能不能指导我错误可能出在哪里。 |
|
相关推荐
1个回答
|
|
从您提供的信息来看,出现总线错误可能有几个原因。
1. 错误的引脚定义:请确保您正确定义了发送和接收CAN数据的引脚。如果引脚定义错误,可能会导致无法正确发送和接收数据。 2. 不正确的CAN参数配置:请确保您正确配置了CAN参数,包括波特率、帧格式、滤波器等。如果配置不正确,可能会导致总线错误。 3. 硬件问题:如果以上两个原因都排除了,那么可能是硬件问题导致的总线错误。请检查硬件连接、线缆和外设是否正常工作。 要解决总线错误,您可以采取以下步骤: 1. 仔细检查CAN引脚定义,确保与硬件连接一致。 2. 仔细检查CAN参数配置,确保与所连接的设备相匹配。 3. 检查硬件连接,确保线缆和外设正常工作。 4. 如果仍然存在问题,您可以尝试使用示波器或逻辑分析仪来检查CAN信号是否正常。 5. 如果以上步骤都没有解决问题,您可以查看FreeRTOS的CAN驱动文档,看是否有特定的配置需要注意。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十五章 摄像头实验
632 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
671 浏览 0 评论
772 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
1340 浏览 0 评论
1166 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12057 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 22:08 , Processed in 1.328377 second(s), Total 40, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号