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总线传输和接收数据,具体描述如下:
1)在我的程序中,我正在将接收到的数据与预定义的数据进行比较,通过这些数据我正在执行闪烁LED操作。 完整的源代码如下所示:
[
#Define Blinky_LED_GPIO 56.
//
//主菜单
//
内部主(无效)
{
tCANMsgObject sTXCANMessage;
tCANMsgObject sRXCANMessage;
unsigned char ucTXMsgData[8]={'0','0','0','0','0','0','0'},RXUMsgData[8]={'0','0','0','0','0','0'0','0'0';
unsigned char ucMsgData1[8]={'0','0','0','0','0','0','0','0'};
//unsigned int I;
无符号字符x[8]={'a','b','c','d','1','2','3','4'};
//
//步骤1. 初始化系统控制:
// PLL,看门狗,启用外设时钟
//此示例函数可在F2837xD_sysctrl.c文件中找到。
//
InitSysCtrl();
//
//步骤2. 初始化GPIO:8
//此示例函数可在F2837xD_GPIO.c文件和中找到
//说明了如何将GPIO设置为其默认状态。
//
伊尼特·格皮奥();
GPIO_SetupPinMux (36,GPIO _MUX_CPU1,6);//GPIO30 - CANRXA
GPIO_SetupPinMux (37,GPIO _MUX_CPU1,6);//GPIO31 - CANTXA
GPIO设置PIN选项(36,GPIO输入,GPIO _异步);
GPIO设置引脚选项(37,GPIO输出,GPIO推送);
GPIO_SetupPinMux (Blinky_LED_GPIO,GPIO _MUX_CPU1,0);
GPIO_SetupPinOptions (Blinky_LED_GPIO,GPIO输出,GPIO);
//
//初始化CAN控制器
//
CANInit (Cana_base);
//
//可以为设置计时,使M3/主子系统时钟不工作
//
CANClkSourceSelect(Cana_base, 0);
//
//设置CAN总线的比特率。 此功能设置CAN
//额定配置的总线定时。 您可以实现更多的控制
//通过CAN总线定时,改为使用函数CANBitTimingSet()
//(如果需要)。
//在本例中,CAN总线设置为500 kHz。 在下面的函数中,
//调用SysCltlClockGatet()用于确定其时钟速率
//用于为CAN外围设备计时。 这可以替换为
//固定值(如果知道系统时钟的值),保存额外的值
//函数调用。 对于某些零件,CAN外围设备由固定的计时器计时
// 8 MHz,无论系统时钟如何,在这种情况下,呼叫
// SysClockCatlockGatet()应替换为800万。 查阅数据
//表,了解有关CAN外围设备时钟的更多信息。
//
CANBitRateSet(Cana_base, 2亿, 50万);
//
//步骤3. 清除所有中断并初始化PIE矢量表:
//禁用CPU中断
//
色调;
//
//将PIE控件寄存器初始化为其默认状态。
//默认状态是禁用所有PIE中断和标志
//被清除。
//此函数位于F2837xD_PIECTRL.c文件中。
//
InitPieCtrl();
//
//禁用CPU中断并清除所有CPU中断标志:
//
IER = 0x0000;
IFR = 0x0000;
//
//使用指向外壳中断的指针初始化PIE矢量表
//服务例程(ISR)。
//这将填充整个表,即使中断也是如此
//在本例中不使用。 这对于调试非常有用。
// shell ISR例程位于F2837xD_DefaultIsr.C.中
//此函数位于F2837xD_PieVect.C.中
//
InitPieVectorTable();
//
//启用测试模式并选择外部回送
//
//HWREG (Cana_base + CAN_O_CTL)|= CAN_CTL_TEST;
//HWREG (Cana_base + CAN_O_TEST)= CAN_TEST_EXL;
//
//启用CAN以进行操作。
//
CANEnable (Cana_base);
//
//初始化将用于发送CAN的消息对象
//消息。 消息将为4个字节,其中包含增量
//值。 最初它将被设置为0。
//
//*(unsigned long *)ucTXMsgData =0;
sTXCANMessage.ui32MsgID = 1;// CAN消息ID -使用1
sTXCANMessage.ui32MsgIDMask = 0;// TX不需要掩码
sTXCANMessage.ui32Flags = MSG_OBJ_TX_INT_ENABLE;//在TX上启用中断
sTXCANMessage.ui32MsgLen = sizeof(ucTXMsgData);//邮件大小为4
sTXCANMessage.pucMsgData = ucTXMsgData;// PTR到消息内容
//
//初始化将用于接收CAN的消息对象
//消息。
//
//*(unsigned long *) ucRXMsgData = 0;
sRXCANMessage.ui32MsgID = 1;// CAN消息ID -使用1
sRXCANMessage.ui32MsgIDMask = 0;// TX不需要掩码
sRXCANMessage.ui32Flags = MSG_OBJ_NO_FLAGS;
sRXCANMessage.ui32MsgLen = sizeof(RXucMsgData);//邮件大小为4
sRXCANMessage.pucMsgData = ucRXMsgData;// ptr至邮件内容
//
//设置用于接收消息的消息对象
//
CANMessageSet (Cana_base,2,&sRXCANMessage,MSG_OBJ_TYPE_RX);
//
//输入循环以发送消息。 新消息将按发送一次
//秒。 4个字节的消息内容将被视为未签名的内容
//长,每次增加1。
//
对于(;;)
{
//
//使用对象编号1发送CAN消息(与
// CAN ID,在本例中也是1)。 此功能将导致
//要立即传输的消息。
//
CANMessageSet (Cana_base,1,&sTXCANMessage,MSG_OBJ_TYPE_TX);
//
//现在等待1秒钟,然后继续
//
DELAY _US(1000*1000);</s>1000
//
//获取接收消息
//
CANMessageGet (Cana_base,2,&sRXCANMessage,TRUE);
//
//确保接收的数据与传输的数据匹配
//
/* IF (*(unsigned long *) ucTXMsgData)!=(*(unsigned long *) ucRXMsgData)
{
ASM (" ESTOP0");
}
*/
//
//增加传输的消息数据中的值。
//
//(*(unsigned long *) ucTXMsgData)++;
//
ucRXMsgData1[1]=ucRXMsgData[1];
RXCmsgData1[2]=ucRXMsgData[2];
RXCmsgData1[3]=ucRXMsgData[3];
RXCmsgData1[4]=ucRXMsgData[4];
RXCmsgData1[5]=ucRXMsgData[5];
ucRXMsgData1[6]=ucRXMsgData[6];
RXCmsgData1[7]=ucRXMsgData[7];
ucRXMsgData1[8]=ucRXMsgData[8];
IF (x!=ucRXMsgData1){
//
//打开LED
//
GPIO写入引脚(Blinky_LED_GPIO,0);
//
//延迟一段时间。
//
DELAY _US(1000*500);
//
//关闭LED
//
GPIO_WritePin (Blinky_LED_GPIO,1);
//
//延迟一段时间。
//
DELAY _US(1000*500);
//ASM (" ESTOP0");
}
否则{
ASM (" ESTOP0");
}
}
}
调试上述程序时,LED开始闪烁,不是在正确的逻辑上,而是在相反逻辑上。 从输出中可以看出,接收到的与预定义数据进行比较的数据丢失,因此程序输出将比较输出逻辑视为false。
因此,我请求您浏览我的源代码,并在相同的代码中提出任何修改建议,以获得准确的操作。
提前感谢
此致
Sumanta
您好,Chris:
LED闪烁与数据匹配的问题已经解决,但我在通过ADC引脚感应数据和在CAN RX端口接收相同数据方面遇到困难。 请提出同样的建议。
此致
Sumanta