This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C1237D5PZ:CANMessageGet 返回空的 CAN 消息结构。

Guru**** 2330840 points
Other Parts Discussed in Thread: TM4C1237D5PZ
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589854/tm4c1237d5pz-canmessageget-returns-empty-can-message-structure

器件型号:TM4C1237D5PZ
主题中讨论的其他器件: TM4C123

尊敬的 TI 团队:  

我正在尝试使用 TM4C1237D5PZ 的 CAN 功能。 当我接收 CAN 消息时、正在生成中断。 但是、当我继续获取消息时、它始终返回消息 ID 0、数据长度0、就像它没有从接收到的消息中获取任何内容一样。 我使用的代码是示例文件夹中的 simple_rx.c。  

//
//
// simple_rx.c -演示简单 CAN 消息接收的示例。
//
//版权所有(c) 2010-2015 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
//以源代码和二进制形式重新分发和使用,有无
//如果满足以下条件,则允许进行修改
//满足:
//
//重新分发源代码必须保留上述版权
//注意、此条件列表和以下免责声明。
//
//二进制形式的重新分发必须复制上述版权
//注意、中的条件列表和以下免责声明
//随提供的文档和/或其他材料
//分布。
//
//德州仪器公司的名称和的名称都不是
//其贡献者可用于认可或推广衍生产品
//未经特定的事先书面许可,从该软件下载。
//
//本软件由版权所有者和作者提供
//“原样”以及任何明示或暗示的保证,包括但不包括
//限于对适销性和适用性的暗示保证
//一个特定的目的是免责的。 在任何情况下、版权均不得
//所有者或贡献者应对任何直接、间接、偶然、
//特殊、典型或必然的损害(包括但不包括)
//仅限于采购替代货物或服务;
//数据或利润;或业务中断)
//责任理论,无论是合同责任、严格责任还是侵权行为
//(包括疏忽或其他)以任何方式因使用而产生
//此软件,即使已被告知可能会发生此类损坏。
//
//这是 Tiva 固件开发包的修订版本2.1.2.111的一部分。
//
//

#include
#include
#include "inc/hw_ca.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/CAN.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"

//
//
//! addtogroup CAN_examples_list
//!

简单 CAN RX (simple_Rx)


//!
//! 此示例显示了 CAN 接收消息的基本设置
//! 总线的电流。 CAN 外设配置为接收报文
//! 使用任何 CAN ID、然后将消息内容打印到控制台。
//!
//! 此示例使用以下外设和 I/O 信号。 您必须执行的操作
//! 查看这些内容并根据您自己的董事会的需要进行更改:
//! - CAN0外设
//! - GPIO 端口 B 外设(用于 CAN0引脚)
//! - CAN0RX - PB4
//! - CAN0TX - PB5
//!
//! 以下 UART 信号仅配置为显示控制台
//! 消息。 CAN 的运行不需要这些参数。
//! - GPIO 端口 A 外设(用于 UART0引脚)
//! - UART0RX - PA0
//! - UART0TX - PA1
//!
//! 此示例使用以下中断处理程序。 来使用该示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
//! 矢量表。
//! - INT_CAN0 - CANIntHandler
//
//

//
//
//跟踪 RX 中断次数的计数器
//发生,它应与收到的消息数匹配。
//
//
volatile uint32_t g_ui32MsgCount = 0;

//
//
//中断处理程序指示已接收消息的标志。
//
//
volatile bool g_BRXFlag = 0;

//
//
//指示发生了一些接收错误的标志。
//
//
volatile bool g_BErrFlag = 0;

//
//
//此函数将 UART0设置为用于控制台显示信息
//因为示例正在运行。
//
//
无效
InitConsole (空)

//
//启用用于 UART0引脚的 GPIO 端口 A。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

//
//为端口 A0和 A1上的 UART0功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);

//
//启用 UART0以便我们可以配置时钟。
//
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);

//
//使用内部16MHz 振荡器作为 UART 时钟源。
//
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);

//
//为这些引脚选择替代(UART)功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1);

//
//初始化控制台 I/O 的 UART
//
UARTStdioConfig (0、115200、16000000);

//
//
//此函数是 CAN 外设的中断处理程序。 它会进行检查
//查找中断原因,并保留所有消息的计数
//已收到。
//
//
无效
CANIntHandler (空)

uint32_t ui32Status;

//
//读取 CAN 中断状态以查找中断原因
//
ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);

//
//如果原因是控制器状态中断,则获取状态
//
if (ui32Status = CAN_INT_INTID_STATUS)

//
//读取控制器状态。 这将返回状态字段
//可以指示各种错误的错误位。 错误处理
//本示例中不是为了简单起见。 请参阅
// API 文档,了解有关错误状态位的详细信息。
//读取此状态的操作将清除中断。
//
ui32Status = CANStatusGet (CAN0_BASE、CAN_STS_CONTROL);

//
//设置一个标志来指示可能发生的某些错误。
//
G_bErrFlag = 1;

//
//检查原因是否是我们正在使用的消息对象1
//接收消息。
//
否则、如果(ui32Status = 1)

//
//到达这一点意味着 RX 中断发生在上
//消息对象1,消息接收完成。 清除
//消息目标中断。
//
CANIntClear (CAN0_BASE、1);

//
//递增计数器以跟踪已有多少消息
//已收到。 在实际应用中、这可用于将标志设置为
//指示何时接收到消息。
//
G_ui32MsgCount++;

//
//设置标志以指示接收到的消息正暂挂。
//
G_bRXFlag = 1;

//
//由于接收到消息,因此清除所有错误标志。
//
G_bErrFlag = 0;

//
//否则,发生意外导致中断的情况。 这应该是
//永远不会发生。
//
其他

//
//可以在此处执行伪中断处理。
//

//
//
//配置 CAN 并输入循环以接收 CAN 消息。
//
//
内部
main (空)

#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
uint32_t ui32SysClock;
#endif

tCANMsgObject sCANMessage;
uint8_t pui8MsgData[8];

//
//将时钟设置为直接从外部晶振/振荡器运行。
// TODO:必须更改 SYSCTL_XTAL_VALUE 以匹配的值
//您的板上使用的晶体。
//
#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_OSC)
25000000);
其他
SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
#endif

//
//设置用于显示消息的串行控制台。 这是
//仅针对此示例程序,CAN 操作不需要。
//
InitConsole();

//
//对于此示例、CAN0与端口 B4和 B5上的 RX 和 TX 引脚一起使用。
//您使用的实际端口和引脚可能有所不同,请参阅
//数据表以了解更多信息。
// GPIO 端口 B 需要启用、以便可以使用这些引脚。
// TODO:将其更改为您正在使用的 GPIO 端口
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);

//
//配置 GPIO 引脚复用以选择这些引脚的 CAN0功能。
//此步骤选择可用于这些引脚的替代功能。
//如果您的器件支持 GPIO 引脚功能多路复用、这是必需的。
//请查阅数据表以查看每个引脚分配的函数。
// TODO:更改此选项以选择您正在使用的端口/引脚
//
GPIOPinConfigure (GPIO_PB4_CAN0RX);
GPIOPinConfigure (GPIO_PB5_CAN0TX);

//
//启用 GPIO 引脚上的复用功能。 以上步骤选择
//可用的备用功能。 此步骤实际上启用
//这些引脚的替代功能、而不是 GPIO。
//待办事项:更改此项以匹配您正在使用的端口/引脚
//
GPIOPinTypeCAN (GPIO_PORTB_BASE、GPIO_PIN_4 | GPIO_PIN_5);

//
//已为 CAN 设置 GPIO 端口和引脚。 CAN 外设
//必须启用。
//
SysCtlPeripheralEnable (SYSCTL_Periph_CAN0);

//
//初始化 CAN 控制器
//
CANInit (CAN0_BASE);

//
//设置 CAN 总线的比特率。 此函数设置 CAN
针对标称配置的//总线时序。 您可以实现更多控制
//使用函数 CANBitTimingSet()代替 CAN 总线时序
//如果需要。
//在此示例中、CAN 总线设置为500kHz。 在以下函数中、
// SysCtlClockGet ()或 ui32SysClock 的调用被用来确定
//用于为 CAN 外设计时的时钟速率。 这是可以的
//如果您知道系统时钟的值,则替换为固定值,
//保存额外的函数调用。 对于某些器件、CAN 外设是
//使用固定的8MHz 时钟进行计时,而不管在哪种情况下是系统时钟
//对 SysCtlClockGet()或 ui32SysClock 的调用应替换为
// 80000。 有关 CAN 的更多信息、请参阅数据表
//外设时钟。
//
#if defined (target_IS_TM4C129_RA0)||\
已定义(TARGET_IS_TM4C129_RA1)||\
已定义(TARGET_IS_TM4C129_RA2)
CANBitRateSet (CAN0_BASE、ui32SysClock、50000);
其他
CANBitRateSet (CAN0_BASE、SysCtlClockGet ()、50000);
#endif

//
//在 CAN 外设上启用中断。 此示例使用静态
//分配中断处理程序,表示处理程序的名称
//位于启动代码的矢量表中。 如果您想使用动态的
//分配矢量表,然后还必须调用 CANIntRegister()
//此处。
//
// CANIntRegister (CAN0_BASE、CANIntHandler);// if using dynamic vectors
//
CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);

//
//在处理器(NVIC)上启用 CAN 中断。
//
IntEnable (INT_CAN0);

//
//启用 CAN 以进行操作。
//
CANEnable (CAN0_BASE);

//
//初始化用于接收 CAN 消息的消息对象
//任何 CAN ID。 为了接收任何 CAN ID、ID 和掩码必须同时存在
//设置为0,并启用 ID 过滤器。
//
sCANMessage.ui32MsgID = 0;
sCANMessage.ui32MsgIDMask = 0;
sCANMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
sCANMessage.ui32MsgLen = 8;

//
//现在将消息对象加载到 CAN 外设中。 加载后
// CAN 将在总线上接收任何消息,并将发生中断。
//使用消息对象1接收消息(与不同)
//此示例中可以是任何值的 CAN ID)。
//
CANMessageSet (CAN0_BASE、1、&sCANMessage、MSG_OBJ_TYPE_RX);

//
//输入循环以处理收到的消息。 该循环仅检查一个标志
//由中断处理程序设置,如果该位置位,则读取
//消息并显示内容。 这不是一种稳健的方法
//处理传入的 CAN 数据,并且一次只能处理一条消息。
//如果多条消息一起接收,则会收到一些消息
//可能被丢弃。 在实际应用中、应使用其他一些方法
//对收到的消息进行排队,以确保它们不会丢失。 您
//也可以使用 CAN FIFO 模式,允许消息为
//在处理前进行缓冲。
//
for (;;)

unsigned int uIdx;

//
//如果该标志被置位、则表示发生了 RX 中断、然后
//有一条消息可以从 CAN 读取
//
if (g_bRXFlag)

//
//重复使用之前用于配置的同一消息对象
//用于接收消息的 CAN。 用于存储的缓冲器
//还必须提供接收到的数据,所以设置缓冲区指针
//在消息对象中。
//
sCANMessage.pui8MsgData = pui8MsgData;

//
//从 CAN 读取消息。 使用1号报文对象
//(与 CAN ID 不相同)。 中断清除
//标志未设置、因为中已清除此中断
//中断处理程序。
//
CANMessageGet (CAN0_BASE、1、&sCANMessage、0);

//
//清除挂起的消息标志,以便中断处理程序可以
//在下一条消息到达时再次设置它。
//
G_bRXFlag = 0;

//
//检查是否有某些消息的指示
//丢失。
//
if (sCANMessage.ui32Flags & MSG_OBJ_DATA_LOST)

UARTprintf ("检测到 CAN 消息丢失\n");

//
//打印接收到的消息的内容。
//
UARTprintf ("Msg ID=0x%08X len=%u data=0x"、
sCANMessage.ui32MsgID、sCANMessage.ui32MsgLen);
for (uIdx = 0;uIdx < sCANMessage.ui32MsgLen;uIdx++)

UARTprintf ("%02x "、pui8MsgData[uIdx]);

UARTprintf ("total count=%u\n"、g_ui32MsgCount);

//
//返回无错误
//
返回(0);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    CAN 总线上的每个节点是否都有收发器? 总线上是否有正确的端接? 谁在总线上发送消息?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    感谢您的回复。 两端与 CAN 收发器的端接电阻为120欧姆。 消息来自 Vector CAN CASE。 我可以看到 CAN 上的绿色指示灯闪烁、这表示正在传输消息。 另一个重要信息是、我能够毫无问题地将消息从 TM4C 传输到矢量软件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Manoj、
    我有几个问题。
    哪一个网格 ID 是在总线上发送的向量?
    Vector 发出哪种消息类型(数据帧或远程帧)? 我假设它在发送数据帧、对吧? 远程帧不包含数据。
    sCANMessage.ui32Flags 读取了什么?
    您能否探测收发器上的 TX/RX 以及 CANH 和 CANL 引脚?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您抽出宝贵的时间来查尔斯。 我正在发送消息 ID 0x20。 它是数据帧。 sCANMessage.ui32Flags 读取0xA 我明天会探测 TX/RX 并更新您。

    谢谢你
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、我在 Micro 上探测 TX/RX。 它们都读取正确的数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Manoj、
    您能否从寄存器浏览器窗口中读取 CANSTS (CAN 状态)寄存器? 您的 CAN 是否可以设置发送节点和接收节点之间的匹配消息标识符长度(11位与29位)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    在 CAN0 ->STS 寄存器中、RXOK 标志为 true、所有其他为 false。 LEC 值为000。 如何检查消息标识符设置。  我认为扩展 ID 有标志。  我没有设置该滤波器。 因此、消息 ID 为11位。  

    谢谢、  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否记得在矢量表中添加"CANIntHandler"?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是 Bob、
    实际上正在生成中断。 问题是当我继续尝试使用函数 CANMessageGet 获取接收到的消息数据时、消息结构返回空。 为了供您参考、我可以毫无问题地将消息从 TM4C123发送到 Vector。

    谢谢你
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不确定发生了什么。 您发布的代码与:C:\ti\TivaWare_C_Series-2.1.4.178\examples\peripheral\can\simple_rx.c 相同 我使用该代码构建了一个项目、并且能够看到从 CAN 消息接收到的数据、该消息正确存储在位于"pui8MsgData"的8个字节中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、大家好、我也很困惑。 我记得我很久以前就已经使用过这个代码了。 什么是接收到的 CAN 消息数据的寄存器? 我查看的是一些寄存器、但无法确定哪个寄存器存储接收到的数据。  让我再做一些实验。 是否可以附加您测试过的二进制文件? 我将把它刷写到我的板上、并看到我在 UART 上看到任何内容。

    感谢你的帮助。  

    谢谢你  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是我使用的项目:/cfs-file/__key/communityserver-discussions-components-files/908/CAN_5F00_simple_5F00_RX.zip

    接收到的数据被存储在 CAN 模块内部的 RAM 中、直到被读入 CANIF 寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../CAN.docThank您 Bob 分享此项目。 实际上、我不使用 code composer。 我使用不同的程序、称为 Visual GDB。 我是否有任何方法可以将文件转换为.bin。 我还在连接由软件生成的 bin。 如果您能闪存并观看 UART0的结果、我将不胜感激。  我看到所有类似这样的东西、Msg ID=0x00000000 len=0 data=0xtotal count=8035

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我从.bin 将文件重命名为 doc 扩展名、以便服务器可以让它运行。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还附加了 hex 文件。 请看一下、看看这些地址是否对您来说正常。 我只是想排除 GCC 编译器创建错误文件的任何可能性。 我再次将扩展名从.hex 更改为 doc。 非常感谢您的帮助。  

    谢谢你。

    e2e.ti.com/.../CAN_5F00_Intel_5F00_hex.doc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您附加的 hex 文件对我来说不是很正确。 位置0处的第一个32位值应为堆栈指针值、第二个应为复位矢量(起始地址)。  我在十六进制文件中看到的是一个堆栈地址0x00600020 (不是 RAM)和起始地址0x552C0000 (不是闪存)。

    我将.out 文件转换为 Intel Hex、堆栈地址为0x20000200、起始地址为0x0000014D3。

    这是我的 hex 文件:

    /cfs-file/__key/communityserver-discussions-components-files/908/CAN_5F00_simple_5F00_RX.hex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您评估 hex 文件。 明天早上、我将回到这个问题。 您能否将输出文件转换为.bin 文件并附加、以便我可以使用 LM 闪存对其进行刷写并测试电路板是否存在此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    我已请求工具公司查看堆栈问题。 但仅供您参考、CAN 是大型程序的一部分。 所有其他功能、如 USB、I2C、SPI、UART 等、工作正常。 我还将 B4和 B5引脚用于 CAN0。 您能否使用这些引脚创建 hex/bin 文件并重新发送。 这将真正帮助我确认堆栈问题。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我的错误。 Intel 十六进制格式是以字节为导向的、而不是以字为导向。 这是一个小端字节序器件、您的堆栈位于0x20006000、起始地址为0x00002C55。 两者都完全有效。

    我更改了代码以使用 PB4和 PB5、但无法检查更改、因为我的硬件不使用这些引脚。 然后、我为您创建了一个"合适的"hex 文件。

    /cfs-file/__key/communityserver-discussions-components-files/908/0451.CAN_5F00_simple_5F00_RX.hex

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题 Bob、感谢您的帮助。 我将刷写给定的十六进制文件并告知您。 我也设置了 CCS。 我将做更多实验。

    此致、
    曼诺伊
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob、您的代码正在我的板中工作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Bob、您好!如何从 Code Composer Studio 生成 hex 文件。 我启用了十六进制实用程序、但我认为获得了不正确的十六进制文件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这有点棘手。 由于 Intel 格式是一个字节列表、我将 memwidth 设置为8、romwidth 设置为32。 这似乎为 Intel hex 提供了正确的格式。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Manoj
    我遇到相同的问题:传输正常、但消息接收显示值为0。
    我正在使用 IXXAT USB 转 CAN 转换器。
    您能告诉我您是否找到了此问题的解决方案或任何其他建议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Manoj!
    您是否找到了问题的解决方案?
    我面临相同的问题、请分享您的经验或解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Manoj、找到了解决方案?? 请分享。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Pradeep、  

    在我的情况下、随 BSP 提供的 CAN.c 是婴儿车。  此 HWREG (ui32Base + CAN_O_IF1CMSK)= CAN_IF1CMSK _CLRINTPND;函数 CANIntClear 中的行具有或操作错误。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Manoj
    您能否分享我可以纠正的整流代码或方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Manoj  

    我在 CAN.c 的 IntClear 函数中也发现了相同的代码  


    无效
    CANIntClear (uint32_t ui32Base、uint32_t ui32IntClr)

    //
    //检查参数。
    //
    assert (_CANBaseValid (ui32Base));
    assert (((ui32IntClr = CAN_INT_INTID_STATUS)||
    ((ui32IntClr >= 1)&&(ui32IntClr <= 32));

    if (ui32IntClr = CAN_INT_INTID_STATUS)

    //
    //只需读取并丢弃状态即可清除中断。
    //
    HWREG (ui32Base + CAN_O_STS);

    其他

    //
    //等待确保此接口不忙。
    //
    while (HWREG (ui32Base + CAN_O_IF1CRQ)和 CAN_IF1CRQ_BUSY)

    //
    //仅通过设置来更改中断挂起状态
    // CAN_IF1CMSK _CLRINTPND 位。
    //
    HWREG (ui32Base + CAN_O_IF1CMSK)|= CAN_IF1CMSK _CLRINTPND;

    //
    //向 CAN 控制器发送清除挂起中断命令。
    //
    HWREG (ui32Base + CAN_O_IF1CRQ)= ui32IntClr 和 CAN_IF1CRQ_MNUM_M;

    //
    //等待确保此接口不忙。
    //
    while (HWREG (ui32Base + CAN_O_IF1CRQ)和 CAN_IF1CRQ_BUSY)



    我是否需要(删除或)将其更改为??

    HWREG (ui32Base + CAN_O_IF1CMSK)= CAN_IF1CMSK _CLRINTPND;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪个版本的 TivaWare? 该功能在版本2.1.4.178中是正确的。 (CAN.c 的第1113行)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 Bob

    我还在我的代码中发现了 CAN.c buggy、在更改 CAN.c 后一切正常

    感谢您的宝贵支持。

    感谢 TI 支持。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴听到这个消息。 该 CAN.c 副本是否来自较旧版本的 TivaWare? 在最新版本(2.1.4.178)中是正确的、但在以前版本(2.1.3.156)中是错误的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bob、您好!

    是否 有办法使用 CAN0在同一代码中接收和发送数据、基本上我想将 CAN 发送到串行转换器、串行转换器接收来自串行端口的数据、并将其发送到 CAN、同时在 CAN 总线上传输数据时提供接收来自 CAN 的数据 串行端口。

    目前、我有一个代码可以一次执行一个操作。但我需要同时执行这两个操作。

    请分享任意一段示例代码。

    谢谢