0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术新CAN驱动接口调用方法及说明

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-05 10:26 次阅读

用户可从英创开发光盘中或联系英创工程师获得CAN例程源码。参考例程使用英创已经封装好的.h及.cpp库文件可以使开发更方便。

注册表设置项说明

CAN驱动设置参数位于注册表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1]及[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN2]下

主要配置参数项:

TxTimeout:发送超时时间,单位ms。

BusErrorReport:错误帧上报标记,0:不上报,1:上报错误帧

设置程序可以连接英创工程师获得。

CAN打开及关闭

打开关闭采用标准的流式设备驱动接口CreateFile及CloseHandle,设备名为”CAN1:”及”CAN2:”

调用示例如下:

//打开CAN1

HANDLE hCan;

hCan = CreateFile( L”CAN1:”, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

//关闭CAN

CloseHandle(hCan);

CAN波特率设置

参考CAN例程,对驱动的DeviceIoCon trol操作已封装在SetBaud函数中。

BOOLSetBaud(HANDLE hCan, DWORD dwBaud)

参数hCan:CreateFile打开CAN返回的设备句柄

参数dwBaud:波特率,单位bps

返回值:TRUE 设置成功,FALSE 设置失败

调用示例如下:

//设置波特率250bps CAN

SetBaud(m_hCan, 250000);

CAN过滤设置

调用方法

参考CAN例程,对驱动的DeviceIoCon trol操作已封装在SetFilter函数中。

BOOLSetFilter(HANDLE hCan, PCAN_FILTER pFilter, DWORD num)

参数hCan:CreateFile打开CAN返回的设备句柄

参数pFilter:过滤器结构体数组指针

参数num:过滤器结构体数组长度,最大为4

返回值:TRUE 设置成功,FALSE 设置失败

注:此函数如果重复调用,生效的为最后一次调用设置值。

CAN_FILTER过滤器结构体定义

typedefstruct_can_filter

{

CAN_ID can_id;

CAN_ID can_mask;

} CAN_FILTER, *PCAN_FILTER

过滤器由id和mask组成,设置的过滤器组数最大4个。CAN包能满足其中一组过滤器以下条件才能接收

CAN包id & 过滤器mask = 过滤器id

即,2进制中,过滤MASK为1的对应位需和过滤ID值一致,示例表

调用示例如下

//设置一组寄存器

CAN_FILTER Filter[4];

memzero(Filter,sizeof(CAN_FILTER));

Filter[0].can_id.id = 5;

Filter[0].can_mask.id = 22;

SetFilter(m_hCan, Filter, 1);

CAN发送/接收

发送接收同样采用标准的流式设备驱动接口ReadFile及WriteFile

调用方法

参考CAN例程,封装好的函数定义。

intWriteCAN(HANDLE hCan, PCAN_FRAME pFrame, DWORD num){

DWORD dwLen;

if(!WriteFile( hCan, (char*)pFrame, num*sizeof(CAN_FRAME), &dwLen, 0 ))return0;

returndwLen/sizeof(CAN_FRAME);

}

intReadCAN(HANDLE hCan, PCAN_FRAME pFrame, DWORD num){

DWORD dwLen;

if(!ReadFile( hCan, (char*)pFrame, num*sizeof(CAN_FRAME), &dwLen, 0 ))return0;

returndwLen/sizeof(CAN_FRAME);

}

参数hCan:CreateFile打开CAN返回的设备句柄

参数pFrame:帧结构体数组指针

参数num:帧结构体数组长度,默认值1,可空

返回值:发送/接收的数据包个数

注:发送函数为阻塞函数,超时时间可以在注册表中设置,默认1000ms。

发送失败后,应用程序应当自行判断是否需要重新发送。

接收函数应当单独开一个接收线程,并配合WaitCANEvent函数使用,参考下一节。

CAN_FRAME数据帧结构体定义

typedefstruct{

unsignedintid:29;

unsignedinterror:1;

unsignedintremote:1;

unsignedintextended:1;

}CAN_ID;

typedefstruct_can_frame

{

CAN_ID can_id; /* 32 bit CAN_ID + EFF/RTR/ERR flags */

BYTE can_dlc; /* frame payload length in byte (0 ..CAN_MAX_DLEN) */

BYTE data[CAN_MAX_DLEN];

} CAN_FRAME, *PCAN_FRAME;

调用示例如下:

DWORD dwNum;

//发送

CAN_FRAME Sendframe;

memzero(Sendframe,sizeof(CAN_FRAME));

Sendframe.can_id.id = 6;

m_Sendframe.data[0] = 0x01;

m_Sendframe.can_dlc = 1;

dwNum = WriteCAN(hCan, &Sendframe);

//接收

CAN_FRAME Revframe[MAX_ARRAY];

dwNum = ReadCAN(hCan, Revframe, MAX_ARRAY);

WaitCANEvent函数使用

如果轮询方式接收CAN包,系统负荷会过高,采用事件方式事半功

WaitCANEvent为等待CAN接收事件的阻塞函数,通过返回值可以判断是否有CAN数据接收。

BOOLWaitCANEvent( HANDLE hDevice, LPDWORD lpEvtMask, DWORD dwTimeout )

参数hDevice:CreateFile打开CAN返回的设备句柄

参数lpEvtMask:返回事件类型,新驱动目前恒为0

参数dwTimeout:超时时间

返回值:FALSE 等待超时,TRUE 有数据帧收到

接收线程调用示例

//主线程中开启接收线程

m_hRecvThread = CreateThread(0, 0, RecvTread,this, 0, NULL);

//接收线程函数定义

DWORD Ctest_can_v2Dlg::RecvTread(LPVOID lparam)

{

Ctest_can_v2Dlg* pDlg = (Ctest_can_v2Dlg*)lparam;

DWORD dwEvtMask;

int num;

CAN_FRAME rbuf[MAX_ARRAY];

while(!pDlg->m_bThreadStop)

{

if(WaitCANEvent(pDlg->m_hCan, &dwEvtMask, 200))

{

if( dwEvtMask == 0 ) // 接收到数据包

{

num = ReadCAN(pDlg->m_hCan, rbuf, MAX_ARRAY);

while( num )

{

OnRecv(pDlg, rbuf, num); //调用回调函数处理数据

num = ReadCAN(pDlg->m_hCan, rbuf, MAX_ARRAY);

}

}

else //258

{

}

}

}

return0;

}

错误帧定义

当设置注册表选项,允许接收错误帧后,CAN总线上的出错信息将以帧的形式上报上来。

错误帧的帧结构体中,值为1,可通过该值判断是接收到的数据帧还是驱动上报的错误帧。

if(Frame.can_id.error){

//错误帧

}

else{

//数据帧;

}

错误帧详细定义,请参数手册《CAN错误帧定义》。

精简掉的接口

新CAN驱动能够自动复位CAN总线,不需要再手动复位,所以之前ResetCAN,StartCAN,StopCAN精简掉了。

SetCANLoop功能实用性不大,故精简掉。

但是为了兼容老驱动,这些函数依然可以正常调用。

相关测试例程可以联系英创工程师获得。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34604
收藏 人收藏

    评论

    相关推荐

    全新Linux环境PCAN驱动程序发布!CAN/CAN FD通信体验全面升级!

    全新8.17.0版本的PCAN-Linux驱动程序正式发布,专为CANCAN FD接口量身打造。无论是CAN 2.0 a/b还是
    的头像 发表于 04-19 10:38 106次阅读

    OBD接口CAN分析仪使用方法

    OBD接口CAN分析仪的使用主要涉及到将设备与汽车的OBD接口连接,并通过配套的软件进行数据的读取和分析。以
    的头像 发表于 04-18 11:21 194次阅读

    CAN总线接口保护方案

    CAN总线的应用范围广,应用环境相当复杂,一些静电、浪涌等干扰很容易耦合到总线上,并直接作用于CAN总线接口。为了满足一些高等级EMC的要求,有必要添加额外的外围保护电路。CAN
    的头像 发表于 01-13 08:27 223次阅读
    <b class='flag-5'>CAN</b>总线<b class='flag-5'>接口</b>保护方案

    can接口和485接口区别

    CAN接口和RS-485接口都是常见的工业通信接口,它们在功能和性能上有一些差异。以下是关于CAN接口
    的头像 发表于 12-13 10:50 4230次阅读

    super调用父类的构造方法

    我们分析这句话“父类对象的引用”,那说明我们使用的时候只能在子类中使用,既然是对象的引用,那么我们也可以用来调用成员属性以及成员方法,当然了,这里的 super 关键字还能够调用父类的
    的头像 发表于 10-10 16:42 517次阅读
    super<b class='flag-5'>调用</b>父类的构造<b class='flag-5'>方法</b>

    信息技术是干什么?

    广播电子技术信息技术
    橙群微电子
    发布于 :2023年09月22日 09:17:48

    CAN接口与485接口如何实现互相转换?

    CAN接口与485接口如何实现互相转换? CAN总线和RS-485总线都是工业级数据传输总线,它们在不同的工业自动化控制应用中被广泛应用。但是在一些特定的应用场景下,需要将
    的头像 发表于 09-14 17:52 3403次阅读

    使用NUC131SD2AEU定期传输CAN信息并调试CAN接口

    应用程序:本样本代码使用 NUC131SD2AEU 定期传输 CAN 信息并调试 CAN 接口 。 BSP 版本: NUC131 BSP CMSIS V3.00.05 硬件
    发表于 08-29 07:51

    信息技术促使轨道交通全面升级

    有别于传统的铁公路系统,新型基础建设强调的是将新一代的信息技术纳入基建领域,在未来的交通系统中,智能化、信息化的轨道交通系统网络,搭配5G等技术的发展,将是实现智能城市轨道交通的主要驱动
    的头像 发表于 08-21 11:11 476次阅读

    华秋硬联合安加速器,加速和创新赋能技术驱动型创业者

    167亿,获2轮及以上融资的企业占比达54%。 02****生态伙伴介绍:安加速器 **安加速器作为Arm全球唯一加速器,依托于Arm全球庞大的生态系统资源及行业领先的技术,**通过创业加速和创新赋
    发表于 08-18 14:37

    2023年中海达星推官系列直播再度启航,与您一起探讨空间信息技术

    人工智能、5G、云计算、物联网等新兴技术逐步融入生活,驱动生产、生活和治理方式的不断变革。而在北斗三号全球组网的背景下,空间信息技术也在催生变化,拓宽应用场景,深化行业应用,筑造行业未来。 2022
    的头像 发表于 06-26 14:22 282次阅读
    2023年中海达星推官系列直播再度启航,与您一起探讨空间<b class='flag-5'>信息技术</b>

    2023年中海达星推官系列直播再度启航,与您一起探讨空间信息技术

    信息技术
    中海达
    发布于 :2023年06月21日 11:45:49

    简化本地Feign调用方法

    在平常的工作中,OpenFeign作为微服务间的调用组件使用的非常普遍,接口配合注解的调用方式突出一个简便,让我们能无需关注内部细节就能实现服务间的接口
    的头像 发表于 06-20 10:01 387次阅读
    简化本地Feign<b class='flag-5'>调用</b>的<b class='flag-5'>方法</b>

    再获工信部认可!海泰方圆方案获评“2022年信息技术应用创新解决方案”

    中脱颖而出,成功入围2022信息技术应用创新解决方案。 据了解,本次评选共有735家单位1018个有效方案申报,入围评审历经方案征集、资格初审、技术中评具备统一密钥集中管理、统一密码服务接口、统一设备管理、统一密码服务管理、统一
    的头像 发表于 05-26 16:11 380次阅读
    再获工信部认可!海泰方圆方案获评“2022年<b class='flag-5'>信息技术</b>应用创新解决方案”

    权威榜单发布!“2022-2023信息技术应用创新榜”隆重揭晓

    2023年5月8日,由信息化观察网、信息技术应用创新榜组委会组织发起的“2022-2023信息技术应用创新榜”评审结果正式公示。本次榜单征集旨在全面展示信创发展最新成果,遴选出信创细分领域创新
    的头像 发表于 05-09 09:40 839次阅读