Cortex-M3 LM3S9B92 CAN总线编程例子

4 篇文章 0 订阅
3 篇文章 0 订阅

Cortex-M3 LM3S9B92 CAN总线编程例子,该例子完成收到什么发送什么。。。。

代码:

//CAN Demo for LM3S9B92
//该例子完成将CAN0收到的数据又发送出去
//Created by Robin
//2012-02-06
//使用PB4和PB5作为CAN0RX和CAN0TX


#include "hw_memmap.h"
#include "hw_types.h"
#include "hw_can.h"
#include "hw_ints.h"
#include "can.h"
#include "interrupt.h"
#include "sysctl.h"
#include "gpio.h"


tCANMsgObject msgObject;
unsigned char databuf[8];


//延时函数
void delay()
{
    unsigned long ulLoop;
    for(ulLoop = 0; ulLoop < 40000; ulLoop++)
    {
    }
}

void goon()
{
	//下面设置为接收来等待数据的到来

	msgObject.pucMsgData = databuf;	//缓冲区

	msgObject.ulMsgID = 0x000;
	//下面两条设置成接收所有数据
	msgObject.ulMsgIDMask = 0x000;	//设置过滤掩码为“不对任何数据进行过滤”
	msgObject.ulFlags = MSG_OBJ_USE_ID_FILTER;	//使用过滤
	msgObject.ulMsgLen = 8; //最大长度为8

	CANMessageSet(CAN0_BASE, 1, &msgObject, MSG_OBJ_TYPE_RX);	//设置接收结构体

	while((CANStatusGet(CAN0_BASE, CAN_STS_NEWDAT) & 1) == 0);	//一直等待数据的道来

	CANMessageGet(CAN0_BASE, 1, &msgObject, true);	//读出数据,并相关的中断标志

	//至此接收完毕
	//下面开始发送数据
	CANMessageSet(CAN0_BASE, 1, &msgObject, MSG_OBJ_TYPE_TX);	//把接收到的数据又发送出去
}

int main()
{
    //系统初始化
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

    //使能端口B
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

    //PB4和PB5用作CAN
    GPIOPinConfigure(GPIO_PB4_CAN0RX);
    GPIOPinConfigure(GPIO_PB5_CAN0TX);

    //PB4 PB5作为CAN引脚
    GPIOPinTypeCAN(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);

    //使能外设CAN0
    SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);

    //初始化CAN0
    CANInit(CAN0_BASE);
    //设置通信速率125kbps
    CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 125000);
    //使能CAN0
    CANEnable(CAN0_BASE);


    for(;;)
    {
        goon();
        delay();
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RobinTang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值