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.
工具/软件:Code Composer Studio
大家好、
我正在使用 CAN 模块。 之前我创建了有关 CAN 模块问题的主题:
此问题已得到解决、我在输出端获得了正确的 CAN 帧。
我还添加了 ADC 代码。 在进行此修改后、我的代码正常工作、并且可以在 PB1处输出 CAN 帧。
代码如下所示
#include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ca.h" #include "inc/hw_ints.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib_voltag.uidr32h ;include "driveript_intrl_uidt.u.idt.idr32";include "driveript_inu.idruidr32_inuidt_uidru.idrupt.idt_uidru.idt_u.idru.idt_u.idru.idt.idt.idt.idr32";inu.idru.idru.idru.idr32_u.idt_u.idru.idt.idt.idt.idt.idt.idru.idru.idru.idru.idr.idr.idr.idr.idr. SysCtlDelay (40000); } void CANIntHandler (void) { uint32_t ui32Status; ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST); IF (ui32Status = CAN_INT_INTID_STATUS) { ui32Status = CANStatusGet (CAN0_BASE、CAN_STS_CONTROL); G_bErrFlag = 1; } 否则、如果(ui32Status = 1) { CANIntClear (CAN0_BASE、1); CANMessageClear (CAN0_BASE、1); G_bErrFlag = 0; G_bTXFlag = 1; } 其他 { } } int main (void) { uint32_t ui32MsgData=0; uint8_t * pui8MsgData; pui8MsgData =(uint8_t *) ui32MsgData; tCANMsgObject sCANMessage; sCANMessage.ui32MsgID = 1; sCANMessage.ui32MsgIDMask = 0; sCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE; sCANMessage.ui32MsgLen = sizeof (pui8MsgData); sCANMessage.pui8MsgData = pui8MsgData; ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); SimpleDelay(); GPIOPinConfigure (GPIO_PA0_CAN0RX); GPIOPinConfigure (GPIO_PA1_CAN0TX); GPIOPinTypeCAN (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); SysCtlPeripheralEnable (SYSCTL_Periph_ADC1); SysCtlPeripheralEnable (SYSCTL_Periph_CAN0); GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_5);//PD5-CH6-温度 ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PLL | ADC_CClock_RATE_FULL、15); ADCSequenceConfigure (ADC1_base、3、ADC_TRIGGER_ALE一直、0); ADCSequenceStepConfigure (ADC1_base、3、0、ADC_CTL_CH6|ADC_CTL_IE|ADC_CTL_END);//REV.Pow CANInit (CAN0_BASE);SimpleDelay (); CANBitRateSet (CAN0_BASE、120000000、1000000);SimpleDelay (); ADCSequenceEnable (ADC1_BASE、3); ADCIntClear (ADC1_BASE、3); CANIntRegister (CAN0_BASE、CANIntHandler);SimpleDelay (); CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);SimpleDelay (); IntEnable (INT_CAN0);SimpleDelay (); CANEnable (CAN0_BASE);SimpleDelay (); 计数= 0; ui32ACCavg1=0; G_bTXFlag=1; while (1) { while (g_bTXFlag) { G_bTXFlag=0; 计数= 0; while (计数<10) { while (!ADCIntStatus (ADC1_base、3、false)) { } ADCSequenceDataGet (ADC1_base、3、\ui32ACCValues1); ADCIntClear (ADC1_BASE、3); ui32ACCAVG1=ui32ACCAVG1+ui32ACCValues1; count++; } ui32MsgData=ui32ACCVG1/10; CANMessageSet (CAN0_BASE、1、&sCANMessage、MSG_OBJ_TYPE_TX); ui32ACCavg1=0; SimpleDelay(); } }
现在相同的代码无法正常工作。 没有 CAN 帧出现。
我有4个备用板2正在使用中、2个新的(包装盒)。
我尝试使用我在上一个线程中提到的这个代码和简单 TX 代码来重新编程这个4备用电路板。 但我还是看不到 CAN 帧出来了。
PB1引脚为3.3V ALWasys。
所有电路板都在使用 ADC 代码重新编程时工作、我将获得正确的输出。
LED 闪烁代码正在运行。 我尝试切换 PB0& PB1引脚并正常工作。输出时有方形器件。
从那一天开始,CAN 无法正常工作我在调试时遇到错误,因为 boot.asm:227 0x00000C5A (_c_int00不包含帧信息
CCS 中的调试错误和设置位于以下 PICS 中:
希望这个问题能尽快解决
尊敬的 Bob:
我已为所有节点设置1兆位波特率。
但目前我尚未将所有节点连接到网络。 我尝试对 RFA_Demo 1ststPhase_Temp 项目进行编程、并在 PB1引脚上看到输出、但到目前为止没有 CAN 帧。 由于网络中没有其他节点需要接收、因此在到达超时之前应持续传输。
正如我可以看到 PB1引脚持续为3.3V。
我认为 我在项目设置中犯了错误。
请浏览 Issue .zip。其中包含 CCS 中设置的屏幕截图。
否则、请向我发送 CCS 中您的项目设置的屏幕截图。 我认为调试会话中存在错误。
此致
Krishnat
很抱歉 Bob、
首先、我配置 CAN1模块、但端口 B 上没有输出、因此我配置 CAN0并发布了该代码。
但 PA1引脚上也没有输出。
在本例中、我还会小心地更改跳线位置。
对于任何模块 CAN0或 CAN1、引脚上无输出。
即使 我尝试对 TM4C123板进行编程、考虑到有引脚分配、但重复了相同的情况。 CAN 引脚保持在3.3V
此致。
Krishnat
嗨、Bob、
我已向您发送项目。 我粘贴了代码、我使用的代码相同、仅更改 CAN1。
所有跳线均处于默认位置。
我总共有6个 LaunchPad、当我进行调试时、5个电路板的代码不会进入 ISR。 在五个电路板中、一个电路板显示 PB1引脚上的5V 电压。 这可能是因为 USB 引脚与 CAN 模块复用。
对于第6个 Launchpad、它进入 ISR、在 CANENABLE()函数之后进入第一个。 在它脱离 ISR 后、ui32status=5。
在 CANMmessageset()函数之后,它第二次进入 ISR,这里的 ui32status=229在它退出 ISR 之后。
最后、您提到我的代码可在您的硬件上运行。 您可以看到 CAN 帧。 由于没有接收器存在、总线会在一段时间后关闭。 这是完美的。
可能是 CCS 中的设置错误、或者使用的 CCS 版本和 TIvaware 可能有错误。 那么、您能否向我发送 CCS 设置并告诉我您正在使用的 CCS 和 TIvaware 版本