完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求大神指点,目前只调发送,基本配置和发送函数如下。
调用发送函数后,CAN0_TXBRP0寄存器的TRP0一直是1,数据始终未发出。 IFX_CONST IfxCan_Can_Pins can_pins[CAN_NUM] = { { IfxCan_TXD00_P20_8_OUT, IfxPort_OutputMode_pushPull, // Tx pin IfxCan_RXD00B_P20_7_IN, IfxPort_InputMode_pullUp, // Rx pin IfxPort_PadDriver_cmosAutomotiveSpeed4}, ...... }; void can_init(int index) { // create module configuration IfxCan_Can_Config canConfig; IfxCan_Can can; IfxCan_NodeId can_node_num = 0; IfxCan_Can_initModuleConfig( canConfig, MODULE_CAN0); // initialize module IfxCan_Can_initModule( can, canConfig); can_node_num = index % 4; // create node configuration { IfxCan_Can_initNodeConfig( g_drv_can[index].can_node_config, can); // initialize Node 0 g_drv_can[index].can_node_config.nodeId = can_node_num; g_drv_can[index].can_node_config.clockSource = IfxCan_ClockSource_both; g_drv_can[index].can_node_config.frame.type = IfxCan_FrameType_transmitAndReceive; g_drv_can[index].can_node_config.frame.mode = IfxCan_FrameMode_fdLong; g_drv_can[index].can_node_config.txConfig.dedicatedTxBuffersNumber = 31; g_drv_can[index].can_node_config.txConfig.txMode = IfxCan_TxMode_dedicatedBuffers; g_drv_can[index].can_node_config.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_8; g_drv_can[index].can_node_config.messageRAM.txBuffersStartAddress = 0x400; g_drv_can[index].can_node_config.messageRAM.baseAddress = MODULE_CAN0_RAM + NODE0_RAM_OFFSET; g_drv_can[index].can_node_config.baudRate.baudrate = 500000; g_drv_can[index].can_node_config.pins = can_pins[index]; g_drv_can[index].can_node_config.busLoopbackEnabled = FALSE; g_drv_can[index].can_node_config.calculateBitTimingValues = TRUE; // initialize Node 0 IfxCan_Can_initNode( g_drv_can[index].can_node, g_drv_can[index].can_node_config); } } void can_send(int index) { IfxCan_Can_initMessage( g_drv_can[index].tx_msg); // change the relevent members of message structure g_drv_can[index].tx_msg.bufferNumber = 0; g_drv_can[index].tx_msg.dataLengthCode = IfxCan_DataLengthCode_8; g_drv_can[index].tx_msg.frameMode = IfxCan_FrameMode_fdLong; g_drv_can[index].tx_msg.messageIdLength = IfxCan_MessageIdLength_standard; g_drv_can[index].tx_msg.messageId = CAN_MESSAGE_ID; g_drv_can[index].txdata[0] = 0x78563412; g_drv_can[index].txdata[1] = 0xf0debc9a; // Transmit Data IfxCan_Can_sendMessage( g_drv_can[index].can_node, g_drv_can[index].tx_msg, g_drv_can[index].txdata); } |
|
相关推荐
2个回答
|
|
根据您提供的信息,您正在使用TC397微控制器进行CAN通信,并且遇到了一个问题:调用发送函数后,CAN0_TXBRP0寄存器的TRP0一直是1,数据始终未发出。为了解决这个问题,我们可以按照以下步骤进行排查:
1. 检查CAN模块的初始化配置:确保您的CAN模块已经正确初始化,包括波特率、时钟、过滤器等设置。如果这些设置不正确,可能会导致数据无法发送。 2. 检查CAN模块的发送函数:确保您的发送函数正确地将数据写入到CAN模块的发送缓冲区。如果发送函数有错误,可能会导致数据无法发送。 3. 检查CAN模块的中断配置:如果您的CAN模块使用了中断来处理发送完成,确保中断已经正确配置,并且中断服务函数能够正确处理发送完成的事件。 4. 检查CAN模块的发送状态:在发送数据之前,确保CAN模块的发送状态是空闲的,没有其他发送任务正在进行。如果CAN模块正在发送其他数据,可能会导致新的发送任务无法开始。 5. 检查CAN模块的错误状态:检查CAN模块的错误计数器和错误状态,确保没有错误发生。如果CAN模块发生了错误,可能会导致数据无法发送。 6. 检查CAN总线上的其他节点:如果CAN总线上的其他节点没有正确响应,可能会导致数据无法发送。检查其他节点的配置和通信状态,确保它们能够正确接收和响应数据。 7. 使用调试工具:如果以上步骤都无法解决问题,可以尝试使用调试工具(如逻辑分析仪)来观察CAN总线上的通信情况,以便找到问题的根本原因。 通过以上步骤,您应该能够找到导致数据无法发送的原因,并采取相应的措施进行解决。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11969 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 11:28 , Processed in 0.741769 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号