[LM4F232]CAN通信不好用

2019-03-24 10:22发布

本帖最后由 sjtitr 于 2014-6-30 19:12 编辑

是去年买的清风大侠的 Hanker TI M4 开发板

最近有需要,就调试一下CAN通信,发现使用大侠给的源码,CAN是回环测试,

如果把回环测试那两句话去掉,CAN不能工作了,使用逻辑分析仪挂在相应port上,好像连port口都没反应

再研究手册、研究网文,没发现有谁遇到这样情况……

拜求哪位童鞋有这款或这系列芯片的CAN通信的经验,能帮忙提供点意见……

详细代码,见板凳。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
sjtitr
2019-03-24 21:32
< :TI_MSP430_内容页_SA7 --> 本帖最后由 sjtitr 于 2014-6-30 19:11 编辑
Study_Stellaris 发表于 2014-6-30 18:07
回环测试,应该是没通过 收发器的,是不是 CAN 芯片坏掉了呢?

我起初也是这样怀疑,可是把逻辑分析仪挂在MCU侧,这边也没有信号,说明可能是相关引脚没有驱动起来。
我当时测量好像如果是回环模式,这两个引脚是有信号的……

以下是代码,可以看见我注释掉了两行,就是这样

  1.           FPUEnable();               //FPU使能
  2.     FPULazyStackingEnable();   //使能FPU堆栈
  3.     SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
  4.                        SYSCTL_OSC_MAIN);        //系统时钟设置
  5.     lcd_ili932x_init();                                 //初始化LCD驱动
  6.     GrContextInit(&sContext, &g_sLcdDisplay);//初始化图形库
  7.                 lcd_backlight_on();       
  8.            lcd_ili932x_flush(&sContext);
  9.     sRect.sXMin = 0;
  10.     sRect.sYMin = 0;
  11.     sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1;
  12.     sRect.sYMax = 23;                                                                  
  13.     GrContextForegroundSet(&sContext, ClrDarkBlue);
  14.     GrRectFill(&sContext, &sRect);                                          //  填充蓝 {MOD}方块
  15.     GrContextForegroundSet(&sContext, ClrWhite);
  16.     GrRectDraw(&sContext, &sRect);                                          //  加白 {MOD}框框
  17.     GrContextFontSet(&sContext, &g_sFontCm20);
  18.     GrStringDrawCentered(&sContext, "CAN-Loopback", -1,
  19.                          GrContextDpyWidthGet(&sContext) / 2, 10, 0);  // 显示串口实验标志
  20.     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // 使能CAN所使用的外设IO端口
  21.     SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0); // 把外设端口设为CAN功能
  22.     GPIOPinConfigure(GPIO_PF0_CAN0RX);//配置GPIO端口为接收和发送端
  23.     GPIOPinConfigure(GPIO_PF3_CAN0TX);
  24.     GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_3);    //使能GPIO端口
  25.     CANInit(CAN0_BASE);   // 初始化CAN0控制器
  26.     CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 250000); //设置CAN总线波特率
  27. //    HWREG(CAN0_BASE + CAN_O_CTL) = HWREG(CAN0_BASE + CAN_O_CTL) | CAN_CTL_TEST;//开CAN控制为检测模式,测试为回环模式
  28. //    HWREG(CAN0_BASE + CAN_O_TST) = HWREG(CAN0_BASE + CAN_O_TST) | CAN_TST_LBACK;
  29.     CANEnable(CAN0_BASE);// 使能CAN0模块
  30.     IntEnable(INT_CAN0); //使能CAN嵌套中断
  31.     CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);// CAN中断使能
  32.     *(unsigned long *)ucMsgData = 0;             // 初始化用于CAN发送的消息结构体对象
  33.     sCANMessage.ulMsgID = 0x12345678;                        
  34.     sCANMessage.ulMsgIDMask = 0;                    
  35.     sCANMessage.ulFlags = MSG_OBJ_TX_INT_ENABLE;   
  36.     sCANMessage.ulMsgLen = sizeof(ucMsgData);      
  37.     sCANMessage.pucMsgData = ucMsgData;            
  38.     InitConsole();    // 初始化串口
  39.     IntMasterEnable(); // 使能处理器总中断
  40.     srCANMessage.ulMsgID = 0;                      // 初始化用于CAN接收的消息结构体对象
  41.     srCANMessage.ulMsgIDMask = 0;                    
  42.     srCANMessage.ulFlags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
  43.     srCANMessage.ulMsgLen = 8;                       
  44.     CANMessageSet(CAN0_BASE, 2, &srCANMessage, MSG_OBJ_TYPE_RX); // CAN信息发送
复制代码


一周热门 更多>

相关问题

    相关文章