5869|10

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

Luminary的CAN模块学习笔记 [复制链接]

申请开发板的主要目的是学习CAN总线与TCP/IP,学了几天,现在将这几天的收获与大家分享一下。比较基础,技术达到一定境界的请无视,有说的不对的麻烦帮我指出来,谢谢

 

程序主要引用流明的驱动库中的CAN例程, can_device_qsqs_ek-lm3s8962其中自己改了一下8962的程序,使其简化便于理解CAN总线的应用。

 

.CAN模块的使用步骤

1.使能设备所在端口

    // 设置CAN0管脚

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

    GPIOPinTypeCAN(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);

2.设置管脚类型

// 使能CAN所在端口

    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);

3.使能CAN设备

    // 初始化CAN设备

    CANInit(CAN0_BASE);

4.初始化CAN设备

    // 使能can设备

    CANEnable(CAN0_BASE);

5.设置CAN中断

    // 使能单独的 CAN控制器中断源。

       // ulBase CAN控制器的基址。

       // ulIntFlags是要被使能的中断源的位屏蔽。

       /*

       z  CAN_INT_ERROR   一个控制器错误条件已发生;

       z  CAN_INT_STATUS   一个报文传送已完成,或检测到一个总线错误;

       z  CAN_INT_MASTER 允许 CAN控制器产生中断。

       */

    CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR);

6.配置CAN总线上的信息

    // 设置接收所有CAN总线上的信息,配置报文结构

    CANConfigureNetwork();

7.使能CAN中断

    // 使能CAN中断

    IntEnable(INT_CAN0);

8.使能总中断

    // 使能总中断

    IntMasterEnable();

 

 

最新回复

  详情 回复 发表于 2012-7-3 16:07
 
点赞 关注

回复
举报

73

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

.配置CAN总线上的信息

信息结构

#define <can.h>

typedef struct

{

    //  CAN报文标识符为1129位标识符

unsigned long ulMsgID;

 

    //     在使能标识符过滤器时所使用的报文标识符屏蔽。对应位为1时进行ID对应位的匹配检查(验收滤波),反之则不进行滤波。

    unsigned long ulMsgIDMask;

 

    //  此值保存多个状态标志和 tCANObjFlags 所指定的设置。

    unsigned long ulFlags;

 

    //  此值是报文对象中的数据字节数。

    unsigned long ulMsgLen;

 

    //  这是指向报文对象的数据的指针。

    unsigned char *pucMsgData;

}

tCANMsgObject;

 

先配置发送或接收的类型,如配置按键:当按下按键是发送数据到CAN总线

       /*-------------------BUTTON---------------------------------------*/

    // 按键状态的更新,会触发传输

    g_MsgObjectButton.ulMsgID = MSGOBJ_ID_BUTTON;

    g_MsgObjectButton.ulMsgIDMask = 0;

 

    // 传送中断的标志

    g_MsgObjectButton.ulFlags = MSG_OBJ_TX_INT_ENABLE;

 

    // 设置信息的长度,只能有两个byte ,而且一直在g_pucButtonMsg里面

    g_MsgObjectButton.ulMsgLen = 2;

g_MsgObjectButton.pucMsgData = g_pucButtonMsg;

在而配置信息时,要注意

HOST主机的配置

#define MSGOBJ_ID_DATA_RX       (MSGOBJ_ID_DATA_1)

#define MSGOBJ_ID_DATA_TX       (MSGOBJ_ID_DATA_0)

g_MsgObjectTX.ulMsgID = MSGOBJ_ID_DATA_TX

 

SLAVER从机的配置

#define MSGOBJ_ID_DATA_RX       (MSGOBJ_ID_DATA_0)

#define MSGOBJ_ID_DATA_TX       (MSGOBJ_ID_DATA_1)

 

g_MsgObjectTX.ulMsgID = MSGOBJ_ID_DATA_RX

 

正好是相反的,一定不要搞错

 

 

 

 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

三.分析程序

8962的板子里,我简化了大部分程序,只保留了CAN的代码。功能是使用PWM渐变LED,通过CAN总线控制2110板上的LED。对于CAN总线的操作都在中断中进行。

分析一下CAN控制LED的程序吧:

 

初始化,使能CAN中断,使能SysTick中断,循环运行ProcessInterrupts()

 

2110通过CAN中断读取到使LED点亮的命令MSGOBJ_NUM_LED,然后给标志位赋值:

g_ulFlags |= FLAG_UPDATE_LED;

 

在主循环中执行的ProcessInterrupts()在监视到g_ulFlags & FLAG_UPDATE_LEDTtue时,点亮LED。并给定时器的变量赋值g_lFlashCounter = 10;同时清除CAN中断标志位

g_ulFlags &= ~(FLAG_UPDATE_LED);

 

SysTick中断中在检测到g_lFlashCounter >= 0时,开始倒计时,当g_lFlashCounter=0时关闭LED

 

下边我将自己的工程贴上来,在程序中添加了中文的注释,翻译不到位的地方还请见谅,CAN.h文件中的注释直接引用的周立功翻译的驱动库手册

Luminary的CAN模块学习笔记.doc

29.5 KB, 下载次数: 170

Keil.rar

614.52 KB, 下载次数: 179

 
 
 

回复

996

帖子

0

TA的资源

一粒金砂(高级)

4
 
有时间也想申请一个学一下!~可惜没有时间啊
 
 
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

5
 

学习了。

 

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢分享
 
 
 

回复

16

帖子

3

TA的资源

一粒金砂(初级)

7
 
谢谢分享
 
 
 

回复

452

帖子

0

TA的资源

五彩晶圆(初级)

8
 
这个lm3s811没有
 
个人签名人生苦短,何必为声名所累,放开自己心态,去追求自己想要的梦想去吧!http://pytech-inc.taobao.com/
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢分享!
 
 
 

回复

1万

帖子

16

TA的资源

版主

10
 

谢谢分享,顶

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

101

帖子

0

TA的资源

一粒金砂(高级)

11
 

谢谢楼主!!!

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表