2019-03-24 10:22发布
Study_Stellaris 发表于 2014-6-30 18:07 回环测试,应该是没通过 收发器的,是不是 CAN 芯片坏掉了呢?
gonnamakeit 发表于 2015-3-22 09:56 遇到同样的问题,请问楼主解决没?怎么在主食掉那两句后正常收发数据?万分感谢。
最多设置5个标签!
我起初也是这样怀疑,可是把逻辑分析仪挂在MCU侧,这边也没有信号,说明可能是相关引脚没有驱动起来。
我当时测量好像如果是回环模式,这两个引脚是有信号的……
以下是代码,可以看见我注释掉了两行,就是这样
- FPUEnable(); //FPU使能
- FPULazyStackingEnable(); //使能FPU堆栈
- SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
- SYSCTL_OSC_MAIN); //系统时钟设置
- lcd_ili932x_init(); //初始化LCD驱动
- GrContextInit(&sContext, &g_sLcdDisplay);//初始化图形库
- lcd_backlight_on();
- lcd_ili932x_flush(&sContext);
- sRect.sXMin = 0;
- sRect.sYMin = 0;
- sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1;
- sRect.sYMax = 23;
- GrContextForegroundSet(&sContext, ClrDarkBlue);
- GrRectFill(&sContext, &sRect); // 填充蓝 {MOD}方块
- GrContextForegroundSet(&sContext, ClrWhite);
- GrRectDraw(&sContext, &sRect); // 加白 {MOD}框框
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDrawCentered(&sContext, "CAN-Loopback", -1,
- GrContextDpyWidthGet(&sContext) / 2, 10, 0); // 显示串口实验标志
- SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // 使能CAN所使用的外设IO端口
- SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0); // 把外设端口设为CAN功能
- GPIOPinConfigure(GPIO_PF0_CAN0RX);//配置GPIO端口为接收和发送端
- GPIOPinConfigure(GPIO_PF3_CAN0TX);
- GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_3); //使能GPIO端口
- CANInit(CAN0_BASE); // 初始化CAN0控制器
- CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 250000); //设置CAN总线波特率
- // HWREG(CAN0_BASE + CAN_O_CTL) = HWREG(CAN0_BASE + CAN_O_CTL) | CAN_CTL_TEST;//开CAN控制为检测模式,测试为回环模式
- // HWREG(CAN0_BASE + CAN_O_TST) = HWREG(CAN0_BASE + CAN_O_TST) | CAN_TST_LBACK;
- CANEnable(CAN0_BASE);// 使能CAN0模块
- IntEnable(INT_CAN0); //使能CAN嵌套中断
- CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);// CAN中断使能
- *(unsigned long *)ucMsgData = 0; // 初始化用于CAN发送的消息结构体对象
- sCANMessage.ulMsgID = 0x12345678;
- sCANMessage.ulMsgIDMask = 0;
- sCANMessage.ulFlags = MSG_OBJ_TX_INT_ENABLE;
- sCANMessage.ulMsgLen = sizeof(ucMsgData);
- sCANMessage.pucMsgData = ucMsgData;
- InitConsole(); // 初始化串口
- IntMasterEnable(); // 使能处理器总中断
- srCANMessage.ulMsgID = 0; // 初始化用于CAN接收的消息结构体对象
- srCANMessage.ulMsgIDMask = 0;
- srCANMessage.ulFlags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
- srCANMessage.ulMsgLen = 8;
- CANMessageSet(CAN0_BASE, 2, &srCANMessage, MSG_OBJ_TYPE_RX); // CAN信息发送
复制代码一周热门 更多>