LM3S9B96 CAN发送数据 求助

2019-03-24 12:52发布

这个是CAN中断服务函数的一部分:

if(ulStatus ==CAN_INT_INTID_STATUS)//中断产生的原因是一个状态中断    {       ulStatus = CANStatusGet(CAN0_BASE, CAN_STS_CONTROL);//读取主控制器状态寄存器       //在读取主控制器状态寄存器时,将清除一个正在挂起的状态中断。                      g_bErrFlag = 1;// 表示有错误发生    }
   else if(ulStatus == 1)//表示具有高优先级编号1的报文对象正在挂起一个中断    {       CANIntClear(CAN0_BASE, 1);//清楚报文对象中断       g_ulMsgCount++;//中断次数递增       g_bErrFlag = 0;//清除错误标记    }
以下是主函数:

int
main(void)
{
    tCANMsgObject sCANMessage; //定义一个tCANMsgObject类型的参数用于配置报文对象
    unsigned char ucMsgData[4]={0,1,2,3};

    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
                   SYSCTL_XTAL_16MHZ);//时钟设置

    InitConsole();//UART显示用

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);//使能GPIOD系统外设

    GPIOPinConfigure(GPIO_PD0_CAN0RX);
    GPIOPinConfigure(GPIO_PD1_CAN0TX);

    GPIOPinTypeCAN(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);//使能CAN0控制器系统外设

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

    CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000);//设置波特率

    CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);//使能单独的CAN控制器中断源

    IntEnable(INT_CAN0); //使能CAN控制器中断(to CPU)

    CANEnable(CAN0_BASE);//使能CAN控制器

    // Initialize the message object that will be used for sending CAN messages.  
    sCANMessage.ulMsgID = 0x123;                        // CAN message ID - use 0x123
    sCANMessage.ulMsgIDMask = 0;                    // no mask needed for TX
    sCANMessage.ulFlags = MSG_OBJ_TX_INT_ENABLE;    // enable interrupt on TX
    sCANMessage.ulMsgLen = sizeof(ucMsgData);       // size of message is 4
    sCANMessage.pucMsgData = ucMsgData;             // ptr to message content

    // Enter loop to send messages.  A new message will be sent once per 5
    // seconds.  The 4 bytes of message content will be treated as an unsigned
    // long and incremented by one each time.
    for(;;)
    {
        // Print a message to the console showing the message count and the
        // contents of the message being sent.
        UARTprintf("Sending msg: 0x%02X %02X %02X %02X",
                   ucMsgData[0], ucMsgData[1], ucMsgData[2], ucMsgData[3]);

        CANMessageSet(CAN0_BASE, 1, &sCANMessage, MSG_OBJ_TYPE_TX);//配置CAN控制器的一个报文对象

        SimpleDelay();// 1秒延时

        if(g_bErrFlag) // 检查错误标记,查看是否有错误发生
        {
            UARTprintf(" error - cable connected? ");
        }

        else
        {
            // 如果没有错误,则显示发送的报文数目
            UARTprintf(" total count = %u ", g_ulMsgCount);
        }

    }

}

QQ截图20130301213518.jpg
通过UART监测说明 错误标记一直为1,CAN测试软件没有显示想发送的数据,不知道什么原因? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
Study_Stellaris
2019-03-24 20:58
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章