CAN应用接口函数
stm32can回调函数

stm32can回调函数STM32是一系列由STMicroelectronics生产的32位微控制器产品线,它们广泛应用于嵌入式系统中。
CAN(Controller Area Network)是一种串行通信协议,常用于在汽车、工业控制等领域进行数据通信。
在STM32微控制器中,CAN通信可以通过使用HAL库或者直接操作寄存器来实现。
下面我将从两个不同的角度来介绍在STM32中使用CAN的回调函数。
使用HAL库:在HAL库中,首先需要初始化CAN外设,然后配置CAN的参数,包括波特率、过滤器等。
接着可以注册CAN的回调函数,通常有接收回调函数和发送回调函数两种。
当有CAN消息到达或者发送完成时,这些回调函数将被调用。
在注册回调函数时,需要使用HAL_CAN_RegisterCallback函数,并指定回调函数的类型和对应的处理函数。
例如,可以使用HAL_CAN_RegisterCallback(&hcan,HAL_CAN_RX_FIFO0_MSG_PENDING_CB_ID,CAN_RxFifo0MsgPendingCallback)来注册接收回调函数。
在回调函数中,可以处理接收到的CAN消息,比如解析数据或者进行相应的操作。
直接操作寄存器:如果不使用HAL库,也可以直接操作寄存器来实现CAN通信。
在这种情况下,需要自行编写CAN的中断服务程序(IRQHandler),并在其中处理CAN的接收和发送逻辑。
在中断服务程序中,可以根据中断标志位(比如FIFO0中有消息待处理)来执行相应的操作,例如读取接收邮箱中的数据或者发送下一帧消息。
总的来说,无论是使用HAL库还是直接操作寄存器,CAN的回调函数都是用来处理CAN通信中的接收和发送事件的重要部分。
通过合理地注册和编写回调函数,可以实现对CAN通信事件的及时响应和处理,从而提高系统的稳定性和可靠性。
希望以上信息能够帮助你更好地理解在STM32中使用CAN的回调函数。
(完整版)CAN总线解析

一、概述CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络。
想到CAN就要想到德国的Bosch公司,因为CAN就是这个公司开发的(和Intel)CAN 有很多优秀的特点,使得它能够被广泛的应用。
比如:传输速度最高到1Mbps,通信距离最远到10KM,无损位仲裁机制,多主结构。
近些年来,CAN控制器价格越来越低,很多MCU也集成了CAN控制器。
现在每一辆汽车上都装有CAN总线。
一个典型的CAN应用场景:二、CAN总线标准CAN总线标准只规定了物理层和数据链路层,需要用户来自定义应用层。
不同的CAN标准仅物理层不同。
CAN收发器负责逻辑电平和物理信号之间的转换,将逻辑信号转换成物理信号(差分电平)或者将物理信号转换成逻辑电平。
CAN标准有两个,即IOS11898和IOS11519,两者差分电平特性不同。
(有信号时,CANH 3.5V,CANL 1.5V,即显性;没有信号时,CANH 2.5V,CANL 2.5V,即隐性)IOS11898高速CAN电平中,高低电平的幅度低,对应的传输速度快。
双绞线共模消除干扰,是因为电平同时变化,电压差不变。
2.1物理层CAN有三种接口器件多个节点连接,只要有一个为低电平,总线就为低电平,只有所有的节点都输出高电平时,才为高电平。
所谓“线与”。
CAN总线有5个连续性相同的位后,就会插入一个相反位,产生跳变沿,用于同步。
从而消除累计误差。
和485、232一样,CAN的传输速度与距离成反比。
CAN总线终端电阻的接法:特点:低速CAN在CANH和CANL上串入2.2kΩ的电阻;高速CAN在CANH和CANL 之间并入120Ω电阻。
为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。
(因为大多数双绞线电缆特性阻抗大约在100~120Ω。
)120欧姆只是为了保证阻抗完整性,消除回波反射,提升通信可靠性的,因此,其只需要在总线最远的两端接上120欧姆电阻即可,而中间节点并不需要接(接了反而有可能会引起问题)。
CAN总线的原理及使用教程

MSCAN08/MSCAN12
24
MSCAN08通信实现
发送和接收函数
//--------------函数声明--------------------------// //发送1帧远程帧 unsigned char CANsnd1RFrm(unsigned int rid); //CAN发送1帧数据帧(数据长度<=8) unsigned char CANsnd1DFrm(unsigned int rid, unsigned char * databuf,unsigned char len); //查找空闲发送缓冲区 unsigned char GetSndBuf(void); //接收1帧
MSCAN08/MSCAN12
6
位速率
位速率(Bit Rate) 指总线的传输速率,下表列出了距离与 位速率的相关数据。这里的最大距离是指 不接中继器的两个单元之间的距离。
MSCAN08/MSCAN12
7
位定位与同步
标称位速率(Nominal Bit Rate):理想的发送 器在没有重新同步的情况下每秒发送的位数量。 标称位时间(Nominal Bit Time):是标称位速 率的倒数。分成几个不重叠的片段:同步段 (SYNC_SEG ) 、 传 播 段 (PROG_SEG) 、 相 位 段 1(PHASE_SEG1)、相位段2(PHASE_SEG2)。
unsigned char CANrcv1Frm(unsigned char * canrcvbuf);
MSCAN08/MSCAN12 25
MSCAN08自环通信测试实例
(1).回环工作方式测试工程文件列表
表 17-8 回环工作方式测试工程文件列表 工程文件名 所在路径 文件类型 文件名 GZ60C.h Includes.h Type.h 头文件 CANInit.h CAN.h Commsubs.h vectors.c C语言 子函数文件 C语言主函数 MCUInit.c CANInit.c CAN.c Main.c CANSelfTest.prj MC08Ex2007\GP32\GP32C\C16_CAN\01_SelfTest 功能简述 芯片头文件 总头文件 数据类型头文件 声明CAN初始化函数 CAN收发子函数头文件 串行通信等通用子函数头 文件 中断向量表 芯片系统初始化函数定义 MSCAN08初始化函数定义 CAN收发子函数定义 主函数 讲解章节 参见工程实例 [08C工程文件组织] 5.3 [08C工程文件组织]5.3 本章 本章 参见工程实例 参见工程实例 参见工程实例 [本章] [本章] [本章]
libsocketcan的用法

libsocketcan的用法libsocketcan是一个用于Linux系统的socket CAN库,它提供了一组函数和工具,用于在Linux上进行CAN总线通信。
libsocketcan的使用方法非常简单且灵活,可以通过其提供的函数实现CAN报文的发送、接收和过滤等操作。
首先,需要在Linux系统中安装libsocketcan库。
可以通过以下命令在终端中安装libsocketcan:```shellsudo apt-get install libsocketcan-dev```安装完毕后,就可以在程序中引用libsocketcan库来进行CAN通信操作。
1. 创建CAN套接字:要使用libsocketcan,首先需要创建一个CAN套接字,可以使用`socket`函数来创建套接字。
例如:```c++int can_socket = socket(PF_CAN, SOCK_RAW, CAN_RAW);```2. 绑定CAN接口:接下来,需要将CAN套接字绑定到特定的CAN接口上。
可以使用`bind`函数来绑定套接字和接口。
例如:```c++struct sockaddr_can addr;struct ifreq ifr;strcpy(ifr.ifr_name, "can0");ioctl(can_socket, SIOCGIFINDEX, &ifr);addr.can_family = AF_CAN;addr.can_ifindex = ifr.ifr_ifindex;bind(can_socket, (struct sockaddr *)&addr, sizeof(addr));```3. 发送CAN报文:可以使用`write`函数向CAN总线发送CAN报文。
例如:```c++struct can_frame frame;frame.can_id = 0x123;frame.can_dlc = 8;frame.data[0] = 1;frame.data[1] = 2;frame.data[2] = 3;frame.data[3] = 4;frame.data[4] = 5;frame.data[5] = 6;frame.data[6] = 7;frame.data[7] = 8;write(can_socket, &frame, sizeof(struct can_frame));```4. 接收CAN报文:使用`read`函数可以从CAN总线接收CAN报文。
peak can sdk使用方法

peak can sdk使用方法PEAK CAN SDK使用方法简介PEAK CAN SDK,全称为PEAK System CAN开发库软件开发工具包,是一个用于CAN总线通信开发的软件库。
本文将介绍PEAK CAN SDK的使用方法,并提供一些基本的示例,帮助您快速上手。
首先,确保您已经在您的计算机上安装了适用于您的操作系统的PEAK CAN SDK。
然后,按照以下步骤进行设置和使用。
1. 创建一个新的CAN应用程序项目在您的开发环境中,新建一个项目,并导入PEAK CAN SDK。
具体的操作步骤会因您使用的开发环境而有所不同,但在通常情况下,您需要添加PEAK CAN SDK的库文件和头文件。
2. 初始化CAN总线在您的代码中,首先需要初始化CAN总线。
使用PEAK CAN SDK提供的函数,调用`CAN_Init()`函数来初始化CAN总线。
您需要提供CAN接口的通道号和波特率等参数。
示例代码如下:```c#include "canlib.h"void main(){// 初始化CAN总线canInitializeLibrary();// 打开CAN通道int channelHandle = canOpenChannel(channelNumber,canOPEN_ACCEPT_VIRTUAL);// 设置波特率canSetBusParams(channelHandle, bitrate, 0, 0, 0, 0, 0);// 开始CAN总线canBusOn(channelHandle);}```3. 发送CAN消息要发送CAN消息,使用`canWrite()`函数。
您需要指定适当的CAN通道,CAN ID,数据长度和数据等参数。
示例代码如下:```cunsigned char data[] = {0x01, 0x02, 0x03};unsigned int canID = 0x123;unsigned int dataLength = sizeof(data);canWrite(channelHandle, canID, data, dataLength, canMSG_STD);```4. 接收CAN消息要接收CAN消息,使用`canRead()`函数。
libsocketcan的用法

libsocketcan的用法摘要:一、libsocketcan简介二、libsocketcan的安装与配置三、libsocketcan的基本使用1.创建Can节点2.配置Can控制器3.发送和接收Can消息四、libsocketcan的高级功能1.自定义Can消息处理函数2.过滤和订阅Can消息3.使用多线程处理Can通信五、libsocketcan的优化与调试六、总结与展望正文:一、libsocketcan简介libsocketcan是一款用于Linux系统下Can总线通信的库,它提供了简单易用的API,使得用户可以方便地在应用程序中实现Can总线的发送和接收。
libsocketcan基于socket接口实现,支持Can总线标准2.0A和2.0B,同时兼容Linux内核的Can驱动。
它广泛应用于汽车、工业控制、机器人等领域,提高了系统的实时性和可靠性。
二、libsocketcan的安装与配置在安装libsocketcan之前,确保您的系统已安装了Linux内核的Can驱动。
接下来,按照以下步骤进行libsocketcan的安装:1.下载libsocketcan源码包:访问官方网站或GitHub仓库,下载适用于您系统的源码包。
2.编译和安装:解压源码包,进入解压目录,执行以下命令进行编译和安装:```./configuremakesudo make install```3.配置Can控制器:根据您的硬件设备,编辑`/etc/modprobe.d/can.conf`文件,添加或修改Can控制器的模块参数。
4.加载Can控制器模块:执行以下命令,加载Can控制器模块:```sudo modprobe can```三、libsocketcan的基本使用1.创建Can节点:首先,创建一个Can节点,可以使用`can_open()`函数。
例如:```cint can_open(const char *dev_name, unsigned int bitrate);```2.配置Can控制器:使用`can_set_config()`函数设置Can控制器的配置,例如:```cint can_set_config(can_handle handle, unsigned int mask, unsigned int rate);```3.发送和接收Can消息:使用`can_send()`和`can_recv()`函数分别发送和接收Can消息,例如:```cint can_send(can_handle handle, const can_msg_t *msg);int can_recv(can_handle handle, can_msg_t *msg, unsigned int timeout);```四、libsocketcan的高级功能1.自定义Can消息处理函数:通过注册`can_callback_t`类型的回调函数,实现对Can消息的自定义处理。
广州致远电子股份有限公司CAN接口卡系列产品使用手册说明书

广州致远电子股份有限公司CAN 接口卡系列产品CAN 测试软件与接口函数使用手册类别 内容关键词CANTest 通用测试软件、CAN 接口函数库使用摘要 本软件可适用于广州致远电子股份有限公司出品的各种CAN 接口卡。
CANTest 测试软件可进行数据收发、查询等基本传输功能。
是CAN 总线测试的必备软件。
CAN 接口函数库是提供给用户进行上位机二次开发,可以自行编程进行数据收发、处理等。
修订历史目录1. 测试软件使用说明 (1)1.1.设备操作 (1)1.1.1.设备类型选择 (1)1.1.2.滤波设置 (2)1.1.3.启动CAN (2)1.1.4.获取设备信息 (3)1.1.5.发送数据 (3)1.1.6.接收时间标识 (3)1.1.7.隐藏发送帧与显示发送帧 (4)1.1.8.DBC解码与按ID分类显示 (4)1.1.9.实时保存与停止保存 (4)1.1.10.总线利用率 (5)1.1.11.错误信息显示 (5)1.2.辅助操作 (6)1.2.1.帧ID显示方式 (6)1.2.2.帧ID显示格式 (6)1.2.3.继续显示发送和接收的数据 (6)1.2.4.暂停显示发送和接收的数据 (6)1.2.5.滚动 (6)1.2.6.显示帧数 (6)nguage (6)2. 接口函数库说明及其使用 (7)2.1接口卡设备类型定义 (7)2.2接口库函数使用流程 (8)2.3驱动的特色与工作原理 (9)2.4错误码定义 (10)2.5函数库中的数据结构定义 (10)2.5.1VCI_BOARD_INFO (10)2.5.2VCI_CAN_OBJ (11)2.5.3VCI_CAN_STA TUS (12)2.5.4VCI_ERR_INFO (13)2.5.5VCI_INIT_CONFIG (14)2.5.6CHGDESIPANDPORT (15)2.5.7VCI_FILTER_RECORD (16)2.5.8VCI_AUTO_SEND_OBJ (16)2.6接口库函数说明 (18)2.6.1VCI_OpenDevice (18)2.6.2VCI_CloseDevice (19)2.6.3VCI_InitCAN (20)2.6.4VCI_ReadBoardInfo (22)2.6.5VCI_ReadErrInfo (22)2.6.6VCI_ReadCANStatus (27)2.6.7VCI_GetReference (28)2.6.8VCI_SetReference (31)2.6.9VCI_StartCAN (34)2.6.10VCI_ResetCAN (34)2.6.11VCI_GetReceiveNum (36)2.6.12VCI_ClearBuffer (36)2.6.13VCI_Transmit (38)2.6.14VCI_Receive (39)3. 接口库函数使用方法 (40)3.1VC调用动态库的方法 (40)3.2VB调用动态库的方法 (40)3.3接口库函数使用流程 (42)3.4Linux下动态库的使用 (43)3.4.1驱动程序的安装 (43)3.4.2USBCAN-I/II/I+/II+驱动的安装 (43)3.4.3PCI-9820驱动的安装 (43)3.5动态库的安装 (43)3.6动态库的调用及编译 (43)4. 参考资料 (44)5. 免责声明 (45)1. 测试软件使用说明CAN-bus 通用测试软件是一个专门用来对所有的ZLGCAN系列板卡进行测试的软件工具,此软件操作简单,容易上手,通过运用此软件可以非常方便的对板卡进行测试,从而熟悉板卡的性能,其主界面如下:1.1. 设备操作1.1.1. 设备类型选择在进行操作之前,首先得从“类型”菜单中选择您想要操作的设备类型,如下图所示:此时会弹出“选择设备”对话框:在这个对话框中您可以选择您要打开的设备索引号和CAN通道,以及设置CAN的初始化参数,然后点“确定”按钮来打开设备操作窗口(或者也可以点击“确定并启动CAN”按钮打开设备操作窗口并自动打开设备和启动CAN通道)。
STM32的CAN现场总线应用总结

STM32的CAN现场总线应用总结CAN现场总线的应用最重要的就是其接口端口映射、初始化及数据的发送、接收。
STM32中的CAN物理引脚可以设置成三种:默认模式、重定义地址1模式、重定义地址2模式。
CAN信号可以被映射到端口A、端口B或端口D上,如下表所示,对于端口D,在36、48和64脚的封装上没有重映射功能。
重映射不适用于36脚的封装当PD0和PD1没有被重映射到OSC_IN和OSC_OUT时,重映射功能只适用于100脚和144脚的封装上---------------------------------------------------------------------------------------------------------------------- 默认模式/* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure);---------------------------------------------------------------------------------------------------------------------- 重定义地址1模式/* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/*Configure CAN Remap 重映射*/GPIO_PinRemapConfig(GPIO_Remap1_CAN,ENABLE);---------------------------------------------------------------------------------------------------------------------- /* Configure CAN pin: RX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/* Configure CAN pin: TX */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIO_CAN_Key, &GPIO_InitStructure);/*Configure CAN Remap 重映射 */GPIO_PinRemapConfig(GPIO_Remap2_CAN,ENABLE);---------------------------------------------------------------------------------------------------------------------- 设置完CAN 的引脚之后还需要打开CAN 的时钟: /* CAN Periph clock enable */RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE); 2. 初始化2.1.1 CAN 单元初始化CAN 单元初始化最重要的就是波特率的设置,原理如下:t波特率=1/位时间位时间 = (1 + t BS1 + t BS2)× t q t q = t PCLKt PCLK = APB1例如现有一STM32系统时钟为72MHz ,关于CAN 波特率有以下设置: CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位 CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq; //时间段1为8个时间单位 CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq; //时间段2为7个时间单位 CAN_InitStructure.CAN_Prescaler = 45; //设定了一个时间单位的长度为45则其CAN 的波特率为1÷[(1+8+7)×456CAN 以外还包括以下设置:CAN_InitTypeDef CAN_InitStructure; //定义一个CAN 单元CAN_InitStructure.CAN_TTCM = DISABLE; //设置时间触发通信模式(失能) CAN_InitStructure.CAN_ABOM = DISABLE;// 使/失能自动离线管理(失能) CAN_InitStructure.CAN_AWUM = DISABLE;// 使/失能自动唤醒模式(失能) CAN_InitStructure.CAN_NART = DISABLE; //使/失能非自动重传输模式(失能) CAN_InitStructure.CAN_RFLM = DISABLE;// 使/失能接收FIFO 锁定模式(失能) CAN_InitStructure.CAN_TXFP = DISABLE; //使/失能发送FIFO 优先级(失能)CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;//设置CAN 工作模式(正常模式) 2.1.2 CAN 报文过滤器初始化STM32共有14组过滤器,每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和CAN_FxR1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CAN应用接口函数库使用手册V1.0目录1.接口卡设备类型定义 (3)2.错误码定义 (4)3.函数库中的数据结构定义 (5)3.1.VCI_BOARD_INFO (5)3.2.VCI_CAN_OBJ (6)3.3.VCI_CAN_STATUS (7)3.4.VCI_ERR_INFO (8)3.5.VCI_INIT_CONFIG (9)3.6.VCI_RxAcptMask (10)3.7.VCI_RxAcptFilter (11)4.接口库函数说明 (12)4.1.FD_OpenDevice (12)4.2.FD_CloseDevice (13)4.3.FD_InitCan (14)4.4.FD_ReadBoardInfo (15)4.5.FD_GetReceiveNum (16)4.6.FD_ClearBuffer (17)4.7.FD_StartCAN (18)4.8.FD_ResetCAN (19)4.9.FD_Transmit (20)4.10.FD_Receive (21)4.11.FD_RxAcptMaskInit (22)4.12.FD_DisableRxAcptFilter (23)4.13.FD_RxAcptFilterInit (24)4.13.FD_SetOperationMode (25)5.接口库函数使用方法 (26)5.1.VC调用动态库的方法 (26)5.2.VB调用动态库的方法 (26)1.接口卡设备类型定义各个接口卡的类型定义如下:设备名称设备类型号备注USBCAN11第一代USBCAN USBCAN22第二代USBCAN CAN2323待开发PCICAN4待开发2.错误码定义在USBCAN II设备中未启用该功能。
3.函数库中的数据结构定义3.1.VCI_BOARD_INFO描述VCI_BOARD_INFO结构体包含USBCAN II调试器的设备信息。
结构体将在FD_ReadBoardInfo函数中被填充。
typedef struct_VCI_BOARD_INFO{CHAR hw_Type[20];//硬件型号USHORT hw_Version;//硬件版本USHORT fw_Version;//固件版本CHAR BuildDate[20];//固件编译日期CHAR SerialNumber[16];//序列号USHORT Reserved[4];}VCI_BOARD_INFO,*PVCI_BOARD_INFO;成员hw_Type硬件型号,使用ASIIC码表示。
比如USBCAN II。
hw_Version硬件版本号,用16进制表示。
比如0x0100表示V1.00。
fw_Version固件版本号,用16进制表示。
BuildDate固件编译日期,使用ASIIC码表示。
比如Sep72009。
SerialNumber该设备的序列号。
Reserved系统保留。
3.2.VCI_CAN_OBJ描述VCI_CAN_OBJ结构体在FD_Transmit和FD_Receive函数中被用来传送CAN信息帧。
typedef struct_VCI_CAN_OBJ{UINT ID;UINT TimeStamp;BYTE TimeFlag;BYTE SendType;BYTE RemoteFlag;BYTE ExternFlag;BYTE DataLen;BYTE Data[8];BYTE Reserved[3];}VCI_CAN_OBJ,*PVCI_CAN_OBJ;成员ID报文ID。
TimeStamp接收到信息帧时的时间标识,从CAN控制器初始化开始计时。
TimeFlag是否使用时间标识,为1时TimeStamp有效,TimeFlag和TimeStamp只在此帧为接收帧时有意义。
SendType发送帧类型,在USBCAN II设备中未启用该功能。
RemoteFlag是否是远程帧。
ExternFlag是否是扩展帧。
DataLen数据长度(<=8),即Data的长度。
Data报文的数据。
Reserved系统保留。
3.3.VCI_CAN_STATUS描述VCI_CAN_STATUS结构体包含CAN控制器状态信息。
结构体将在FD_ReadCanStatus函数中被填充。
在USBCAN II设备中未启用该功能。
typedef struct_VCI_CAN_STATUS{UCHAR ErrInterrupt;UCHAR regMode;UCHAR regStatus;UCHAR regALCapture;UCHAR regECCapture;UCHAR regEWLimit;UCHAR regRECounter;UCHAR regTECounter;DWORD Reserved;}VCI_CAN_STATUS,*PVCI_CAN_STATUS;成员ErrInterrupt中断记录,读操作会清除。
regModeCAN控制器模式寄存器。
regStatusCAN控制器状态寄存器。
regALCaptureCAN控制器仲裁丢失寄存器。
regECCaptureCAN控制器错误寄存器。
regEWLimitCAN控制器错误警告限制寄存器。
regRECounterCAN控制器接收错误寄存器。
regTECounterCAN控制器发送错误寄存器。
Reserved系统保留。
3.4.VCI_ERR_INFO描述VCI_ERR_INFO结构体用于装载VCI库运行时产生的错误信息。
结构体将在FD_ReadErrInfo函数中被填充。
在USBCAN II设备中未启用该功能。
typedef struct_ERR_INFO{UINT ErrCode;BYTE Passive_ErrData[3];BYTE ArLost_ErrData;}VCI_ERR_INFO,*PVCI_ERR_INFO;成员ErrCode错误码。
Passive_ErrData当产生的错误中有消极错误时表示为消极错误的错误标识数据。
ArLost_ErrData当产生的错误中有仲裁丢失错误时表示为仲裁丢失错误的错误标识数据。
3.5.VCI_INIT_CONFIG描述VCI_INIT_CONFIG结构体定义了初始化CAN的配置。
结构体将在FD_InitCan函数中被填充。
typedef struct_INIT_CONFIG{DWORD AccCode;DWORD AccMask;DWORD Reserved;UCHAR Filter;UINT BaudRate;//波特率选择:10,20,50,125,250,500,800,1000kbpsUCHAR Mode;}VCI_INIT_CONFIG,*PVCI_INIT_CONFIG;成员AccCode验收码,在USBCAN II设备中未启用该功能。
AccMask屏蔽码,在USBCAN II设备中未启用该功能。
Reserved保留,在USBCAN II设备中未启用该功能。
Filter滤波方式,在USBCAN II设备中未启用该功能。
BaudRateCAN总线波特率。
Mode模式。
在USBCAN II设备中未启用该功能。
RxAcptMask3.6.VCI_VCI_RxAcptMask描述VCI_RxAcptMask结构体定义了接收掩码的配置。
结构体将在FD_RxAcptMaskInit函数中被填充。
typedef struct VCI_RxAcptMask{UINT ID;UCHAR M;UCHAR Mide;UCHAR Exide;}RX_MASK,*PRX_MASK;成员ID识符位1=过滤器比较操作包含SIDx位0=过滤器比较操作与SIDx位无关M第几路掩码器Mide标识符接收模式位1=只匹配与过滤器中EXIDE位对应的报文类型(标准或扩展地址);0=如果过滤器匹配则与标准或扩展地址报文匹配(即,如果(过滤器SID)=(报文SID)或(过滤器SID/EID)=(报文SID/EID))Exide扩展标识符位1=过滤器比较操作包含EIDx位0=过滤器比较操作与EIDx位无关_RxAcptFilterVCI_RxAcptFilter3.7.VCI描述VCI_RxAcptMask结构体定义了接收滤波器的配置。
结构体将在FD_RxAcptFilterInit函数中被填充。
typedef struct VCI_RxAcptFilter{UINT ID;UCHAR N;UCHAR Exide;UCHAR MaskSel;}RX_FILTER,*PRX_FILTER;成员ID标识符位1=报文地址位SIDx必须为1才能与过滤器匹配0=报文地址位SIDx必须为0才能与过滤器匹配N第几路滤波器Exide扩展标识符使能位如果MIDE=1:1=只与带有扩展标识符地址的报文匹配0=只与带有标准标识符地址的报文匹配如果MIDE=0:忽略EXIDE位。
MaskSel掩码器选择位3=无屏蔽2=选择接收屏蔽寄存器21=选择接收屏蔽寄存器10=选择接收屏蔽寄存器04.接口库函数说明_OpenDevice4.1.FDFD_OpenDevice描述此函数用以打开设备。
DWORD__stdcall FD_OpenDevice(DWORD DevType,DWORD DevIndex,DWORD Reserved);参数DevType设备类型号。
DevIndex设备索引号,比如当只有一个USBCAN II时,索引号为0,有两个时可以为0或1。
(注:当为CAN232时,0表示要打开的是COM1,1表示要打开的是COM2。
)Reserved当设备为CAN232时,此参数表示为用以打开串口的波特率,可以为2400,4800,9600,14400,19200,28800,57600。
当设备为CANETE-E时,此参数表示要打开的本地端口号,建议在5000到40000范围内取值。
当为其他设备时此参数无意义。
返回值为1表示操作成功,0表示操作失败。
_CloseDevice4.2.FDFD_CloseDevice描述此函数用以关闭设备。
DWORD__stdcall FD_CloseDevice(DWORD DevType,DWORD DevIndex);参数DevType设备类型号。
DevIndex设备索引号,比如当只有一个USBCAN II时,索引号为0,有两个时可以为0或1。
(注:当为CAN232时,0表示要打开的是COM1,1表示要打开的是COM2。
)返回值为1表示操作成功,0表示操作失败。
_InitCanFD_InitCan4.3.FD描述此函数用以初始化指定的CAN。
DWORD__stdcall FD_InitCan(DWORD DevType,DWORD DevIndex,DWORD CANIndex, PVCI_INIT_CONFIG pInitConfig);参数DevType设备类型号。