3912|7

603

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

[LM4F232]CAN通信不好用 [复制链接]

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

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

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

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

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

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

详细代码,见板凳。

最新回复

本帖最后由 gonnamakeit 于 2015-4-2 02:26 编辑 解决这个问题了。 看你的代码,CAN选用的管脚是GPIO_PORTF,这个端口默认的功能是NMI(不可屏蔽中断)。想要用作GPIO或者其复用功能需要先解锁NMI功能。 在使能GPIO_PORTF后加入以下代码: HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁 HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0xFF;//确认 加入后应该注释那两条语句也是没有问题的。或者可以换端口。   详情 回复 发表于 2015-4-2 02:20
 
点赞 关注

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 
回环测试,应该是没通过 收发器的,是不是 CAN 芯片坏掉了呢?

点评

我起初也是这样怀疑,可是把逻辑分析仪挂在MCU侧,这边也没有信号,说明可能是相关引脚没有驱动起来。  详情 回复 发表于 2014-6-30 19:09
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

板凳
 
本帖最后由 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);                                          //  填充蓝色方块
  15.     GrContextForegroundSet(&sContext, ClrWhite);
  16.     GrRectDraw(&sContext, &sRect);                                          //  加白色框框
  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信息发送
复制代码



 
 
 

回复

1803

帖子

0

TA的资源

五彩晶圆(高级)

4
 
顶一下
 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

5
 
遇到同样的问题,请问楼主解决没?怎么在主食掉那两句后正常收发数据?万分感谢。

点评

没有啊,基本放弃了,没有时间琢磨  详情 回复 发表于 2015-3-23 07:03
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

6
 
gonnamakeit 发表于 2015-3-22 09:56
遇到同样的问题,请问楼主解决没?怎么在主食掉那两句后正常收发数据?万分感谢。
没有啊,基本放弃了,没有时间琢磨

 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

7
 
本帖最后由 gonnamakeit 于 2015-4-2 02:26 编辑

解决这个问题了。
看你的代码,CAN选用的管脚是GPIO_PORTF,这个端口默认的功能是NMI(不可屏蔽中断)。想要用作GPIO或者其复用功能需要先解锁NMI功能。
在使能GPIO_PORTF后加入以下代码:

HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0xFF;//确认

加入后应该注释那两条语句也是没有问题的。或者可以换端口。

点评

高人相助啊……多谢多谢。 有机会我得按你的方法试试。  详情 回复 发表于 2015-4-2 11:29
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

8
 
gonnamakeit 发表于 2015-4-2 02:20
解决这个问题了。
看你的代码,CAN选用的管脚是GPIO_PORTF,这个端口默认的功能是NMI(不可屏蔽中断)。想要用作GPIO或者其复用功能需要先解锁NMI功能。
在使能GPIO_PORTF后加入以下代码:

HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) |= 0xFF;//确认

加入后应该注释那两条语句也是没有问题的。或者可以换端口。

高人相助啊……多谢多谢。
有机会我得按你的方法试试。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表