📄 can.c
字号:
#include "../ucos-ii/includes.h"
#include "../inc/drv/can.h"
#include <string.h>
extern can_driver_t* can_driver[];
extern int Can_Device_Num;
/***********************************************************************************\
初始化Can设备
参数:
ndev, CAN设备号
bandrate, CAN波特率
Tip: 设备驱动程序在Device.c中定义
\***********************************************************************************/
void Init_Can(int ndev, CanBandRate bandrate, PCanFilter pfilter)
{
if(ndev>=Can_Device_Num)
return;
if(can_driver[ndev]->init)
can_driver[ndev]->init(bandrate, TRUE, pfilter);
}
/***********************************************************************************\
打开Can设备(开启中断)
参数:
ndev, CAN设备号
\***********************************************************************************/
void Open_Can(int ndev)
{
if(ndev>=Can_Device_Num)
return;
if(can_driver[ndev]->Open)
can_driver[ndev]->Open();
}
/***********************************************************************************\
关闭Can设备停止接收数据
参数:
ndev, CAN设备号
\***********************************************************************************/
void Close_Can(int ndev)
{
if(ndev>=Can_Device_Num)
return;
if(can_driver[ndev]->Close)
can_driver[ndev]->Close();
}
/***********************************************************************************\
读取Can设备收到的数据
参数:
ndev, CAN设备号
data, 数据结构体
ntimeout, 超时时间,单位毫秒,如果为0,则永远等待
返回值:
成功返回TRUE,否则,返回FALSE
\***********************************************************************************/
BOOL CanRead(int ndev, PCanData data, int ntimeout)
{
if(ndev>=Can_Device_Num)
return FALSE;
if(can_driver[ndev]->read)
return can_driver[ndev]->read(data,ntimeout);
return FALSE;
}
/***********************************************************************************\
Can设备发送数据
参数:
ndev, CAN设备号
data, 数据结构体
\***********************************************************************************/
void CanSend(int ndev, PCanData data)
{
if(ndev>=Can_Device_Num)
return;
if(can_driver[ndev]->write)
can_driver[ndev]->write(data);
}
void CAN_Test()
{
BOOL temp;
int i;
CanData revdata, senddata={0x30, {1,2,3,4,5,6,7,8},8, FALSE,FALSE};
Init_Can(0,BandRate_250kbps,NULL);
Open_Can(0);
for(i=0;;i++){
CanSend(0,&senddata);
memset(&revdata,0,sizeof(revdata));
temp=CanRead(0, &revdata,0);
if(i==100){
Uart_Printf("\nid=%x",revdata.id);
Uart_Printf("\ndata=%x,%x,%x,%x",
revdata.data[0],revdata.data[1],revdata.data[2],revdata.data[3]);
i=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -