那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術(shù)新CAN驅(qū)動(dòng)接口調(diào)用方法及說(shuō)明

英創(chuàng)信息技術(shù) ? 來(lái)源:英創(chuàng)信息技術(shù) ? 作者:英創(chuàng)信息技術(shù) ? 2020-02-05 10:26 ? 次閱讀

用戶可從英創(chuàng)開發(fā)光盤中或聯(lián)系英創(chuàng)工程師獲得CAN例程源碼。參考例程使用英創(chuàng)已經(jīng)封裝好的.h及.cpp庫(kù)文件可以使開發(fā)更方便。

注冊(cè)表設(shè)置項(xiàng)說(shuō)明

CAN驅(qū)動(dòng)設(shè)置參數(shù)位于注冊(cè)表[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN1]及[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\CAN2]下

主要配置參數(shù)項(xiàng):

TxTimeout:發(fā)送超時(shí)時(shí)間,單位ms。

BusErrorReport:錯(cuò)誤幀上報(bào)標(biāo)記,0:不上報(bào),1:上報(bào)錯(cuò)誤幀

設(shè)置程序可以連接英創(chuàng)工程師獲得。

CAN打開及關(guān)閉

打開關(guān)閉采用標(biāo)準(zhǔn)的流式設(shè)備驅(qū)動(dòng)接口CreateFile及CloseHandle,設(shè)備名為”CAN1:”及”CAN2:”

調(diào)用示例如下:

//打開CAN1

HANDLE hCan;

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

//關(guān)閉CAN

CloseHandle(hCan);

CAN波特率設(shè)置

參考CAN例程,對(duì)驅(qū)動(dòng)的DeviceIoCon trol操作已封裝在SetBaud函數(shù)中。

BOOLSetBaud(HANDLE hCan, DWORD dwBaud)

參數(shù)hCan:CreateFile打開CAN返回的設(shè)備句柄

參數(shù)dwBaud:波特率,單位bps

返回值:TRUE 設(shè)置成功,F(xiàn)ALSE 設(shè)置失敗

調(diào)用示例如下:

//設(shè)置波特率250bps CAN

SetBaud(m_hCan, 250000);

CAN過(guò)濾設(shè)置

調(diào)用方法

參考CAN例程,對(duì)驅(qū)動(dòng)的DeviceIoCon trol操作已封裝在SetFilter函數(shù)中。

BOOLSetFilter(HANDLE hCan, PCAN_FILTER pFilter, DWORD num)

參數(shù)hCan:CreateFile打開CAN返回的設(shè)備句柄

參數(shù)pFilter:過(guò)濾器結(jié)構(gòu)體數(shù)組指針

參數(shù)num:過(guò)濾器結(jié)構(gòu)體數(shù)組長(zhǎng)度,最大為4

返回值:TRUE 設(shè)置成功,F(xiàn)ALSE 設(shè)置失敗

注:此函數(shù)如果重復(fù)調(diào)用,生效的為最后一次調(diào)用設(shè)置值。

CAN_FILTER過(guò)濾器結(jié)構(gòu)體定義

typedefstruct_can_filter

{

CAN_ID can_id;

CAN_ID can_mask;

} CAN_FILTER, *PCAN_FILTER

過(guò)濾器由id和mask組成,設(shè)置的過(guò)濾器組數(shù)最大4個(gè)。CAN包能滿足其中一組過(guò)濾器以下條件才能接收

CAN包id & 過(guò)濾器mask = 過(guò)濾器id

即,2進(jìn)制中,過(guò)濾MASK為1的對(duì)應(yīng)位需和過(guò)濾ID值一致,示例表

調(diào)用示例如下

//設(shè)置一組寄存器

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發(fā)送/接收

發(fā)送接收同樣采用標(biāo)準(zhǔn)的流式設(shè)備驅(qū)動(dòng)接口ReadFile及WriteFile

調(diào)用方法

參考CAN例程,封裝好的函數(shù)定義。

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);

}

參數(shù)hCan:CreateFile打開CAN返回的設(shè)備句柄

參數(shù)pFrame:幀結(jié)構(gòu)體數(shù)組指針

參數(shù)num:幀結(jié)構(gòu)體數(shù)組長(zhǎng)度,默認(rèn)值1,可空

返回值:發(fā)送/接收的數(shù)據(jù)包個(gè)數(shù)

注:發(fā)送函數(shù)為阻塞函數(shù),超時(shí)時(shí)間可以在注冊(cè)表中設(shè)置,默認(rèn)1000ms。

發(fā)送失敗后,應(yīng)用程序應(yīng)當(dāng)自行判斷是否需要重新發(fā)送。

接收函數(shù)應(yīng)當(dāng)單獨(dú)開一個(gè)接收線程,并配合WaitCANEvent函數(shù)使用,參考下一節(jié)。

CAN_FRAME數(shù)據(jù)幀結(jié)構(gòu)體定義

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;

調(diào)用示例如下:

DWORD dwNum;

//發(fā)送

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函數(shù)使用

如果輪詢方式接收CAN包,系統(tǒng)負(fù)荷會(huì)過(guò)高,采用事件方式事半功

WaitCANEvent為等待CAN接收事件的阻塞函數(shù),通過(guò)返回值可以判斷是否有CAN數(shù)據(jù)接收。

BOOLWaitCANEvent( HANDLE hDevice, LPDWORD lpEvtMask, DWORD dwTimeout )

參數(shù)hDevice:CreateFile打開CAN返回的設(shè)備句柄

參數(shù)lpEvtMask:返回事件類型,新驅(qū)動(dòng)目前恒為0

參數(shù)dwTimeout:超時(shí)時(shí)間

返回值:FALSE 等待超時(shí),TRUE 有數(shù)據(jù)幀收到

接收線程調(diào)用示例

//主線程中開啟接收線程

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

//接收線程函數(shù)定義

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 ) // 接收到數(shù)據(jù)包

{

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

while( num )

{

OnRecv(pDlg, rbuf, num); //調(diào)用回調(diào)函數(shù)處理數(shù)據(jù)

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

}

}

else //258

{

}

}

}

return0;

}

錯(cuò)誤幀定義

當(dāng)設(shè)置注冊(cè)表選項(xiàng),允許接收錯(cuò)誤幀后,CAN總線上的出錯(cuò)信息將以幀的形式上報(bào)上來(lái)。

錯(cuò)誤幀的幀結(jié)構(gòu)體中,值為1,可通過(guò)該值判斷是接收到的數(shù)據(jù)幀還是驅(qū)動(dòng)上報(bào)的錯(cuò)誤幀。

if(Frame.can_id.error){

//錯(cuò)誤幀

}

else{

//數(shù)據(jù)幀;

}

錯(cuò)誤幀詳細(xì)定義,請(qǐng)參數(shù)手冊(cè)《CAN錯(cuò)誤幀定義》。

精簡(jiǎn)掉的接口

新CAN驅(qū)動(dòng)能夠自動(dòng)復(fù)位CAN總線,不需要再手動(dòng)復(fù)位,所以之前ResetCAN,StartCAN,StopCAN精簡(jiǎn)掉了。

SetCANLoop功能實(shí)用性不大,故精簡(jiǎn)掉。

但是為了兼容老驅(qū)動(dòng),這些函數(shù)依然可以正常調(diào)用。

相關(guān)測(cè)試?yán)炭梢月?lián)系英創(chuàng)工程師獲得。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6086

    瀏覽量

    35616
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    龍芯中科榮獲2024年度信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)卓越貢獻(xiàn)成員單位

    近日,中國(guó)電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會(huì)信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)(以下簡(jiǎn)稱“信創(chuàng)工委會(huì)”)在北京召開2024年度工作總結(jié)座談會(huì)暨信創(chuàng)“大比武”總結(jié)大會(huì)。中國(guó)工程院院士、信
    的頭像 發(fā)表于 01-23 10:50 ?166次閱讀

    芯盛智能榮獲2024年信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)卓越貢獻(xiàn)成員單位

    日前,中國(guó)電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會(huì)信息技術(shù)應(yīng)用創(chuàng)新工作委員會(huì)(以下簡(jiǎn)稱 “信創(chuàng)工委會(huì)”)2024 年度總結(jié)座談會(huì)于北京隆重舉行。此次會(huì)議對(duì)在信創(chuàng)工作中作出突出貢獻(xiàn)的成員單位予以表彰。江蘇
    的頭像 發(fā)表于 01-20 09:56 ?159次閱讀

    飛騰助力首屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽圓滿落幕

    近日,由中國(guó)教育技術(shù)協(xié)會(huì)主辦,教育部教育管理信息中心教育信創(chuàng)實(shí)驗(yàn)室、公安部第三研究所、中國(guó)電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會(huì)信創(chuàng)工委會(huì)支持,北京航空航天
    的頭像 發(fā)表于 12-24 09:57 ?206次閱讀

    有方科技參編的信息技術(shù)團(tuán)體標(biāo)準(zhǔn)發(fā)布

    近日,有方科技參編的《信息技術(shù)產(chǎn)品供應(yīng)鏈成熟度 共性指標(biāo) 第1部分:企業(yè)背景評(píng)價(jià)》《信息技術(shù)產(chǎn)品供應(yīng)鏈成熟度 共性指標(biāo) 第2部分:技術(shù)掌控評(píng)價(jià)》《信息技術(shù)產(chǎn)品供應(yīng)鏈成熟度 共性指標(biāo) 第
    的頭像 發(fā)表于 12-23 10:44 ?225次閱讀

    使用CAN總線進(jìn)行數(shù)據(jù)采集的方法

    是汽車內(nèi)部各個(gè)模塊之間進(jìn)行通信的一種協(xié)議,通過(guò)它可以獲取到車輛的各種狀態(tài)信息、傳感器數(shù)據(jù)等。因此,在進(jìn)行數(shù)據(jù)采集之前,需要熟悉CAN總線的工作原理、通信協(xié)議以及數(shù)據(jù)格式。 二、選擇合適的CAN
    的頭像 發(fā)表于 12-20 18:18 ?963次閱讀

    龍芯中科助力2024首屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽成功舉辦

    近日,2024首屆教育信息技術(shù)應(yīng)用創(chuàng)新大賽在北京航空航天大學(xué)成功舉辦。本次大賽由中國(guó)教育技術(shù)協(xié)會(huì)主辦,教育信創(chuàng)實(shí)驗(yàn)室、公安部第三研究所、中國(guó)電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會(huì)信
    的頭像 發(fā)表于 12-19 17:02 ?282次閱讀

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-CAN編程示例之socket CAN

    和汽車領(lǐng)域的網(wǎng)絡(luò)技術(shù)。Linux下最早使用CAN方法是基于字符設(shè)備來(lái)實(shí)現(xiàn)的,與之不同的是Socket CAN使用伯克利的socket接口
    發(fā)表于 11-15 09:25

    飛凌嵌入式ElfBoard ELF 1板卡-CAN編程示例之socket CAN

    和汽車領(lǐng)域的網(wǎng)絡(luò)技術(shù)。Linux下最早使用CAN方法是基于字符設(shè)備來(lái)實(shí)現(xiàn)的,與之不同的是Socket CAN使用伯克利的socket接口
    發(fā)表于 11-14 08:51

    中科創(chuàng)達(dá)榮獲2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)

    及前百家企業(yè)”名單。中科創(chuàng)達(dá)憑借非凡的技術(shù)實(shí)力與持續(xù)的創(chuàng)新能力,成功入選“2024年度軟件和信息技術(shù)服務(wù)競(jìng)爭(zhēng)力百?gòu)?qiáng)企業(yè)”以及“2024年軟件和信息技術(shù)服務(wù)優(yōu)秀企業(yè)”。
    的頭像 發(fā)表于 10-30 11:44 ?557次閱讀

    CAN/CANFD卡接口函數(shù)使用說(shuō)明

    電子發(fā)燒友網(wǎng)站提供《CAN/CANFD卡接口函數(shù)使用說(shuō)明.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 17:35 ?0次下載

    梯度科技入選2023年信息技術(shù)應(yīng)用創(chuàng)新解決方案名單

    日前,工業(yè)和信息化部網(wǎng)絡(luò)安全產(chǎn)業(yè)發(fā)展中心(工業(yè)和信息化部信息中心)在天津舉辦2024信息技術(shù)應(yīng)用創(chuàng)新發(fā)展大會(huì)暨解決方案應(yīng)用推廣大會(huì)。會(huì)上正式公布了2023年
    的頭像 發(fā)表于 09-09 16:29 ?493次閱讀

    虹科技術(shù) 全新Linux環(huán)境PCAN驅(qū)動(dòng)程序發(fā)布!CAN/CAN FD通信體驗(yàn)全面升級(jí)!

    全新8.17.0版本的PCAN-Linux驅(qū)動(dòng)程序正式發(fā)布,專為CANCAN FD接口量身打造。無(wú)論是CAN 2.0 a/b還是
    的頭像 發(fā)表于 08-29 09:36 ?498次閱讀
    虹科<b class='flag-5'>技術(shù)</b> 全新Linux環(huán)境PCAN<b class='flag-5'>驅(qū)動(dòng)</b>程序發(fā)布!<b class='flag-5'>CAN</b>/<b class='flag-5'>CAN</b> FD通信體驗(yàn)全面升級(jí)!

    CAN分析儀的驅(qū)動(dòng)程序如何正確安裝

    新手在使用USB轉(zhuǎn)CAN時(shí),可能會(huì)遇到一些常見問(wèn)題。以下是一些常見的問(wèn)題及其解決方法的清晰歸納: 1.驅(qū)動(dòng)安裝問(wèn)題 問(wèn)題描述:CAN分析儀的驅(qū)動(dòng)
    的頭像 發(fā)表于 06-03 18:07 ?1385次閱讀

    全新Linux環(huán)境PCAN驅(qū)動(dòng)程序發(fā)布!CAN/CAN FD通信體驗(yàn)全面升級(jí)!

    全新8.17.0版本的PCAN-Linux驅(qū)動(dòng)程序正式發(fā)布,專為CANCAN FD接口量身打造。無(wú)論是CAN 2.0 a/b還是
    的頭像 發(fā)表于 04-19 10:38 ?1058次閱讀

    龍芯中科三項(xiàng)信創(chuàng)方案入圍工信部2023年信息技術(shù)應(yīng)用創(chuàng)新應(yīng)用示范案例名單

    近日,工業(yè)和信息化部通報(bào)了2023年信息技術(shù)應(yīng)用創(chuàng)新解決方案征集遴選結(jié)果,本次共評(píng)選出典型解決方案173個(gè)、應(yīng)用示范案例83個(gè)、單項(xiàng)創(chuàng)新案例64個(gè)。
    的頭像 發(fā)表于 03-07 16:45 ?1017次閱讀
    龍芯中科三項(xiàng)信<b class='flag-5'>創(chuàng)</b>方案入圍工信部2023年<b class='flag-5'>信息技術(shù)</b>應(yīng)用創(chuàng)新應(yīng)用示范案例名單
    百家乐体育宝贝| 瑞奇国际娱乐| 百家乐官网网哪一家做的最好呀| 顶级赌场真假的微博| 新锦江百家乐官网的玩法技巧和规则 | 贵宾百家乐官网的玩法技巧和规则 | 孟州市| 真人百家乐开户优惠| 罗马百家乐官网娱乐城| 利澳百家乐娱乐城| 百家乐官网翻天粤| 威尼斯人娱乐棋牌| 百家乐官网庄闲必胜打| TT娱乐城娱乐,| 澳门百家乐战法| 百家乐官网开户优惠多的平台是哪家 | 百家乐足球投注网哪个平台网址测速最好 | 滕州市| 如何打百家乐的玩法技巧和规则 | 百家乐官网高手打| 鸿利国际| 百家乐技巧下载| 百家乐官网庄家必赢诀窍| 大发888好吗| 大佬百家乐现金网| 百家乐官网辅助分析软件| sz新全讯网网址2290| 路冲铺面能做生意吗| 平原县| 百家乐庄闲和游戏机| 游戏机百家乐官网的技术| 棋牌游戏大全| 百家乐小钱赢钱| 百家乐官网五湖四海娱乐网| e世博资讯网| 百家乐特殊技巧| 678百家乐官网博彩赌场娱乐网规则| 澳门| 爱婴百家乐的玩法技巧和规则| 宝马百家乐官网的玩法技巧和规则| 百家乐园游戏庄闲|