在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    6085

    瀏覽量

    35420
收藏 人收藏

    評論

    相關推薦

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會支持,北京航空航天
    的頭像 發表于 12-24 09:57 ?147次閱讀

    有方科技參編的信息技術團體標準發布

    近日,有方科技參編的《信息技術產品供應鏈成熟度 共性指標 第1部分:企業背景評價》《信息技術產品供應鏈成熟度 共性指標 第2部分:技術掌控評價》《信息技術產品供應鏈成熟度 共性指標 第
    的頭像 發表于 12-23 10:44 ?163次閱讀

    使用CAN總線進行數據采集的方法

    是汽車內部各個模塊之間進行通信的一種協議,通過它可以獲取到車輛的各種狀態信息、傳感器數據等。因此,在進行數據采集之前,需要熟悉CAN總線的工作原理、通信協議以及數據格式。 二、選擇合適的CAN
    的頭像 發表于 12-20 18:18 ?791次閱讀

    龍芯中科助力2024首屆教育信息技術應用創新大賽成功舉辦

    近日,2024首屆教育信息技術應用創新大賽在北京航空航天大學成功舉辦。本次大賽由中國教育技術協會主辦,教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信
    的頭像 發表于 12-19 17:02 ?247次閱讀

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

    和汽車領域的網絡技術。Linux下最早使用CAN方法是基于字符設備來實現的,與之不同的是Socket CAN使用伯克利的socket接口
    發表于 11-15 09:25

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

    和汽車領域的網絡技術。Linux下最早使用CAN方法是基于字符設備來實現的,與之不同的是Socket CAN使用伯克利的socket接口
    發表于 11-14 08:51

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?502次閱讀

    CAN/CANFD卡接口函數使用說明

    電子發燒友網站提供《CAN/CANFD卡接口函數使用說明.pdf》資料免費下載
    發表于 10-15 17:35 ?0次下載

    國產化背景下的工控主板發展現狀

    ,是信息技術應用創新產業的簡稱,于2016年“信工委會”(信息技術應用創新工作委員會)提出,目的就是要推動我們國內軟硬件關鍵技術的研發
    的頭像 發表于 09-21 16:15 ?429次閱讀

    梯度科技入選2023年信息技術應用創新解決方案名單

    日前,工業和信息化部網絡安全產業發展中心(工業和信息化部信息中心)在天津舉辦2024信息技術應用創新發展大會暨解決方案應用推廣大會。會上正式公布了2023年
    的頭像 發表于 09-09 16:29 ?441次閱讀

    虹科技術 全新Linux環境PCAN驅動程序發布!CAN/CAN FD通信體驗全面升級!

    全新8.17.0版本的PCAN-Linux驅動程序正式發布,專為CANCAN FD接口量身打造。無論是CAN 2.0 a/b還是
    的頭像 發表于 08-29 09:36 ?456次閱讀
    虹科<b class='flag-5'>技術</b> 全新Linux環境PCAN<b class='flag-5'>驅動</b>程序發布!<b class='flag-5'>CAN</b>/<b class='flag-5'>CAN</b> FD通信體驗全面升級!

    【龍芯2K0300蜂鳥板試用】CAN接口驅動板設計、CANFD測試、CAN C++程序驅動測試

    繪制接口板 3k0300支持4路CANFD,從原理圖來看,只是把TX和RX放出來了,并沒有差分收發器IC。 為了測試CAN功能,必須先做一個驅動板。 兩路CANFD擠在一個6P
    發表于 08-25 21:09

    CAN分析儀的驅動程序如何正確安裝

    新手在使用USB轉CAN時,可能會遇到一些常見問題。以下是一些常見的問題及其解決方法的清晰歸納: 1.驅動安裝問題 問題描述:CAN分析儀的驅動
    的頭像 發表于 06-03 18:07 ?1291次閱讀

    全新Linux環境PCAN驅動程序發布!CAN/CAN FD通信體驗全面升級!

    全新8.17.0版本的PCAN-Linux驅動程序正式發布,專為CANCAN FD接口量身打造。無論是CAN 2.0 a/b還是
    的頭像 發表于 04-19 10:38 ?955次閱讀

    龍芯中科三項信方案入圍工信部2023年信息技術應用創新應用示范案例名單

    近日,工業和信息化部通報了2023年信息技術應用創新解決方案征集遴選結果,本次共評選出典型解決方案173個、應用示范案例83個、單項創新案例64個。
    的頭像 發表于 03-07 16:45 ?956次閱讀
    龍芯中科三項信<b class='flag-5'>創</b>方案入圍工信部2023年<b class='flag-5'>信息技術</b>應用創新應用示范案例名單
    主站蜘蛛池模板: 1000部啪啪| 天天做天天操| 免费国产成高清人在线视频| 欧美白人极品性喷潮| 欧美式free群乱| 免费美剧在线观看| 久久青青成人亚洲精品| 韩国三级视频在线| 国产 日韩 欧美 高清| 97av在线播放| 天天爽夜夜爽每晚高澡| 热之国产| 3344免费播放观看视频| 69女porenhd| 免费国产高清精品一区在线| 边做边爱在线观看视频免费| 亚洲 欧美 自拍 另类| 午夜手机福利| 天天爽夜爽免费精品视频| 久综合色| 3344成年在线视频免费播放男男 | 日本香蕉视频| 激情综合色综合啪啪开心| 成人三级电影在线观看| 天天爽视频| 1024你懂的国产在线播放| 亚洲精品第一| 香蕉久久影院| 美女国产| 婷婷亚洲综合五月天小说在线| 国产视频精品久久| 亚欧洲乱码专区视频| 我想看一级黄色片| 男女爱爱爽爽福利免费视频| 四虎影院台湾辣妹| 毛片免费观看| 亚洲操图| 欧美性极品xxxxx| 伊人久久大香线焦在观看| 人人射人人射| 91久久另类重口变态|