999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于STM32F103的J1939多包傳輸底層軟件設計

2020-01-05 07:00:06王勢權吳長水
軟件導刊 2020年11期

王勢權 吳長水

摘 要:針對某車載終端與CAN總線間的長數據傳輸問題,以STM32F103單片機為主控制器,設計一種符合SAE J1939多包傳輸協議的底層軟件。根據SAE J1939協議中多包數據傳輸工作原理,基于STM32CubeMX硬件平臺對控制器CAN節點端口進行初始化配置,在Keil5開發環境下,實現J1939多包傳輸底層軟件開發,最后開發上位機軟件對所設計的底層軟件進行驗證。實驗結果表明,該底層軟件能夠穩定有效地進行長數據多包傳輸,符合設計要求。

關鍵詞:STM32F103;SAE J1939;多包傳輸;底層軟件;汽車電子控制

DOI:10. 11907/rjdk. 201186????????????????????????????????????????????????????????????????? 開放科學(資源服務)標識碼(OSID):

中圖分類號:TP319 ? 文獻標識碼:A ??????????????? 文章編號:1672-7800(2020)011-0126-05

Underlying Software Design of J1939 Multi-packet Transmission

Based on STM32F103

WANG Shi-quan,WU Chang-shui

(College of Mechanical and Automotive Engineering, Shanghai University of Engineering Science, Shanghai 201620, China)

Abstract: Aiming at the problem of long data transmission between a vehicle terminal and the CAN bus, the STM32F103 single-chip microcomputer is used as the main controller, and an underlying software conforming to the SAE J1939 multi-packet transmission protocol is designed. According to the working principle of multi-packet data transmission in the SAE J1939 protocol, this paper initializes the configuration of the CAN node port of the controller based on the STM32CubeMX hardware platform. In the development environment of Keil5, the development of the underlying software for the multi-packet transmission of J1939 is realized. The upper computer software verifies the design of the underlying software. The experimental results show that the underlying software can stably and efficiently perform long data multi-packet transmission, which meets the design requirements.

Key Words: STM32F103; SAE J1939; multi-packet transmission; underlying software; automotive electronic control

0 引言

重型柴油車國六標準首次對車載監控終端提出了要求,即終端能夠讀取并存儲車輛數據流信息和OBD信息[1-2]。SAE J1939作為目前商用車中最廣泛的應用層協議,描述了重型車輛現場總線的一種網絡應用,其以CAN2.0B作為網絡核心協議,包括物理層和數據鏈路層,數據傳輸速率可達250kbps[3-5]。

對于符合SAE J1939的CAN總線各節點間信息交互及診斷報文收發,數據長度小于8個字節時,單幀即可完成數據發送,數據長度大于8個字節時,需要使用SAE J1939多包傳輸協議[6]。劉明[7]研究J1939在ECU通信中的功能應用、具體通訊流程及應用實例;謝娟娟等[8]分析多包傳輸協議在商用車整車CAN網絡開發過程中的應用;李志濤[9]提出一種基于VSPY3工具的多幀總線數據庫設計方法;董建業等[10]在VC6.0環境下設計并實現CAN總線長幀數據拆裝與重組。

上述文獻大多只對SAE J1939多包傳輸在CAN總線中的應用進行分析,沒有對底層傳輸軟件作詳細設計。本文在分析J1939協議多包傳輸工作原理基礎上,基于STM32平臺開發一種多包傳輸底層軟件。該軟件主要由多包接收與多包發送兩部分組成,并對多包數據收發的各階段進行詳細設計,能夠實現基于J1939協議的CAN網絡節點間多包數據傳輸,適用于商用車車載監控終端開發。

1 SAE J1939多包傳輸工作原理

1.1 SAE J1939數據結構

SAE J1939協議對CAN2.0B協議擴展幀的29位ID進行了重新定義,并與數據域組成了SAE J1939協議數據單元(PDU)[11]。協議數據單元由優先級(P)、保留位(R)、數據頁(DP)、PDU格式(PF)、特定PDU(PS)、源地址(SA)和數據段組成[12]。

1.2 SAE J1939多包傳輸通訊過程

SAE J1939在數據鏈路層對多包數據傳輸方法進行定義,主要包括數據拆裝、重組和連接管理[13]。對于采用多包傳輸的CAN幀消息,其數據域的第1個字節從1開始作為數據包的序號,后7個字節用于存放數據,按照編號依次發送數據包,最后一個數據包未使用的字節,使用0xFF進行補充。接收節點根據數據域中首字節的大小重新組合出原有數據。如果消息需要發送到多個節點或是全局,無需使用數據流控制管理功能,只需通過廣播公告消息完成長數據發送即可。如果多包數據需要發送到指定的目標地址,必須使用連接模式下的點對點會話,這種連接管理可以實現CAN網絡節點間虛擬連接的打開、關閉和數據流控制。

在進行多包數據傳輸時,若目標地址為全局地址,發送節點首先發送一條TP.CM_BAM,向其它節點聲明自己要發送多包消息,之后可直接使用TP.DT進行數據傳輸,而不必等待接收節點響應,數據傳輸完成后也沒有關閉連接操作。若目標地址為特定地址,發送節點必須先與接收節點建立虛擬連接,發送節點首先要發送一條TP.CM_RTS消息,等待接收節點返回一條TP.CM_CTS后,數據傳輸才正式開始,數據傳輸完成后,接收節點返回結束應答TP.CM_EndOfMsgAck并關閉連接,數據傳輸結束。

2 CAN端口在STM32CubeMX中的配置

2.1 底層硬件

控制器主芯片采用意法半導體集團(ST)所產芯片STM32F103RCT6,CAN收發器芯片為TJA1050。主控芯片STM32F103RCT6采用ARM公司32位Cortex-M3內核,其內部帶有支持CAN2.0B協議的CAN控制器,3個發送郵箱,2個3級深度的接收郵箱,3級14個可調節的濾波器,支持11位標準幀或29位擴展幀收發,最高支持通訊速率1Mbps[14]。TJA1050是一種標準的高速CAN收發器,可以與STM32自帶的CAN控制器主控芯片相結合,為CAN總線提供差動發送功能,為STM32CAN控制器提供差動接收功能,實現車載終端與CAN總線信號的交互。

2.2 CAN端口初始化配置

STM32CubeMX集成了一個全面的圖形化軟件設置平臺,支持STM32全系列芯片,用戶可以非常方便地配置MCU的引腳、時鐘、外設等,并且支持自動生成工程項目文件[15]。首先對系統時鐘進行配置,STM32CubeMX極大地簡化了開發人員的工作,使用更形象的圖形化界面表示時鐘配置關系。參考STM32F103官方數據手冊,選取外部8MHz晶振作為系統輸入時鐘,配置鎖相環(PLL)倍頻至72MHz為系統時鐘,并配置CAN外設掛載的APB1總線時鐘為最大值36MHz。然后初始化CAN端口GPIO引腳模式,配置CAN_RX引腳PA11為輸入模式,CAN_TX引腳PA12為復用推挽輸出模式。

最后對CAN工作模式進行配置,配置過程下:①配置CAN總線波特率,根據手冊可知CAN總線波特率計算公式為:

BaudRate=Fpclktsync+tbs1+tbs2×brp (1)

其中,Fpclk為CAN外設掛載的總線時鐘頻率,為36MHz,brp為分頻系數,設定為8,tsync為STM32中CAN位時序的同步段,固定位1,tbs1和tbs2為CAN位時序的BS1段和BS2段,設定為9和8,由此確定CAN網絡波特率為250kbps,滿足SAE J1939報文傳輸速率要求;②禁用時間觸發模式,該模式只有在需要生成接收發送時間戳時才啟用;③啟動自動離線管理,當報文發送錯誤超過一定次數時,使CAN總線處于離線狀態,關閉CAN節點收發;④啟用CAN網絡自動喚醒,CAN外設可使用軟件進入低功耗睡眠模式,當檢測到總線活動時自動喚醒;⑤禁用報文自動重傳,當報文發送失敗時,為了不影響其它報文的正常發送,默認發送失敗的報文只重傳1次;⑥禁用接收郵箱報文鎖定模式,當接收郵箱溢出時,新報文覆蓋舊報文;⑦啟用報文發送優先級由幀ID標識符決定,當CAN外設的發送郵箱中有多個待發送報文時,根據存進發送郵箱的報文ID優先級順序發送;⑧將該CAN外設工作設定在正常模式,只有當調試程序時,可選用其它模式進行測試。

CAN端口及工作模式初始化配置完成后,使用STM32CubeMX平臺自帶的Generate Code工具可生成初始化MDK工程,將所生成的工程文件導入Keil5中,在此基礎上進行J1939多包傳輸底層軟件開發。

3 J1939多包傳輸實現

在STM32CubeMX生成的MDK文件中,包含有一個STM32的抽象層集成軟件HAL庫[16],在Keil5開發環境下,主要通過HAL庫進行編程。本文設計的J1939多包傳輸底層軟件采用輪詢方式進行CAN節點數據收發,并設置消息緩存隊列,保證接收發送數據不掉幀。首先設置J1939_MASSAGE結構體,實現長數據與HAL庫自帶的CAN驅動結構體賦值,然后設置接收步驟結構體J1939_TP_Rx_Step和發送步驟結構體J1939_TP_Tx_Step,用于標識多包數據傳輸的不同階段,以便對不同連接管理消息進行解析和存儲,同時加入超時判斷機制,保證長數據傳輸的完整性,最后設置一個心跳函數J1939_Poll,該函數由接收函數J1939_ReceiveMessages和發送函數J1939_TransmitMessages兩部分組成,用于驅動總線數據收發,并將收發數據存入消息緩存隊列。

在進行長數據接收時,首先進入接收等待階段J1939_TP_RX_WAIT,保存長數據源地址、總字節數、數據包個數、參數組編號,并解析該幀數據域控制字節。若為點對點會話,跳轉至接收準備階段J1939_TP_RX_READY,返回CTS消息,與長數據源地址建立虛擬連接,寫入控制字節0x11,向源地址返回可接收的數據包個數,將要接收的下一個數據包編號并確認長數據參數組編號,之后跳轉至數據接收階段J1939_TP_RX_DATA;若為廣播公告會話,則直接跳轉至數據接收階段J1939_TP_RX_DATA。在數據接收階段,根據存儲的長數據總數據包個數,可判斷是否接收到最后一個數據包,若接收到最后一包數據,則跳轉至接收完成階段J1939_RX_DONE。在接收完成階段,廣播公告會話根據數據包總字節數,完成長數據重組;點對點會話首先返回消息結束應答TP.CM_EndOfMsgAck,確認收到的總數據字節數和數據包個數,中斷虛擬連接,然后完成長數據重組。

在進行長數據發送時,首先進入發送等待階段J1939_TP_TX_WAIT,對長數據進行 拆分,確定要發送的長數據參數組編號、字節數、包個數,并對最后一包不足7個字節的數據位補充0xFF。若該長數據目標地址為特定地址,跳轉至連接請求階段J1939_TP_TX_CM_START,裝載RTS消息,寫入數據域控制字節0x10,長數據總字節數,將要發送的數據包個數及長數據參數組編號,跳轉至連接等待階段J1939_TP_TX_CM_WAIT,解析目標地址返回的CTS消息,包括可接收的數據包個數及將要接收的下一個數據包編號,跳轉至數據發送階段J1939_TP_TX_DT;若該長數據目標地址為全局,則跳轉至廣播公告準備階段J1939_TP_TX_BAM,寫入控制字節0x20,長數據總字節數、數據包個數及參數組編號,跳轉至數據發送階段J1939_TP_TX_DT。在數據發送階段,廣播公告消息按照長數據數據包編號依次發送,點對點會話按照連接管理消息中的流控制完成所有數據包發送。當所有數據包發送完成,進入發送結束階段J1939_TX_DONE,對J1939發送結構體變量進行清零,以便下一長數據發送。

4 測試與驗證

在Visual Studio平臺上搭建上位機軟件,對J1939多包傳輸底層軟件進行驗證。上位機軟件通過調用CAN驅動動態鏈接庫,實現CAN報文收發功能,在選擇測試配置一欄,可選擇不同模式下的多包數據傳輸,包括請求PGN、廣播公告消息、點對點會話等。通過USB-CAN連接下位機進行測試,實際測試結果如圖7所示。

圖7(a)為點對點會話模式下車輛VIN碼的多幀傳輸測試,下位機首先向上位機請求車輛VIN碼的參數組編號0x00FEEC,上位機收到請求后,首先發送一個TP.CM_RTS,其中0x10為控制字節16,表示該幀消息屬于指向下位機地址的發送請求(RTS),0x0011表示上位機將要發送的長數據為17個字節,0x03表示該長數據共分為3個數據包發送,0xFF為填充字節,0x00FEEC為將要發送數據所在的參數組編號。當下位機收到RTS消息發送請求后,回復一個TP.CM_CTS,其中0x11為控制字節17,表示該幀消息為指向上位機地址的準備發送(CTS),0x03為下位機可接收的數據包個數,0x01表示下位機請求上位機從第一包數據開始發送,0xFF為填充字節,0x00FEEC為下位機確認接收到的數據為車輛VIN碼PGN編號。上位機收到返回的CTS消息后,調用連接管理TP.DT,按下位機最大接收數據包進行發送,當所有數據傳輸完成后,下位機發送一個TP.CM_EndOfMsgAck,其中0x13為控制字節19,表示該幀消息為結束應答,0x11表示接收到的數據總字節數為17,0x03表示完整接收到了3個數據包,0xFF為填充字節,0x00FEEC表示所接收到的數據為車輛VIN碼。

圖7(b)為廣播公告模式下車輛故障碼測試。以故障2為例,由上位機發出廣播公告消息TP.CM_BAM,其中0x20為控制字節32,表示該幀消息屬于廣播公告消息,0x18表示將要發送的長數據為24個字節,0x04表示該長數據分為4個數據包發送,0xFF為填充字節,0x00FECA表示該廣播公告消息為車輛故障碼。

5 結語

本文分析J1939多包傳輸工作原理,設計一種基于輪詢收發機制的多階段長數據多包傳輸底層軟件,在STM32CubeMX環境下,通過可視化編程完成初始化工程搭建,節省開發時間,使用HAL庫編程,保證了該底層軟件的最大可移植性。但文中并未對多包傳輸過程中的超時判斷及錯誤診斷機制進行詳細設計,后續將進一步研究完善。

參考文獻:

[1] 生態環境部辦公廳. 重型柴油車污染物排放限值及測量方法(中國第六階段). GB 17691-2018[S]. 2018.

[2] 羅源. 基于國六標準的重型柴油車遠程排放監控系統研發[D]. 杭州:浙江大學,2019.

[3] 駱志宏,許勇,馬秋香. 商用車在線故障診斷系統設計與實現[J]. 計算機測量與控制,2015,23(4):1098-1101.

[4] 梁云龍. 基于AUTOSAR的J1939通訊與診斷模塊設計[D]. 長春:吉林大學,2019.

[5] 付衍法,崔冬梅,馬乾. 基于SAE J1939協議的發動機離線診斷軟件開發[J]. 建筑機械化,2019,40(4):57-59.

[6] 汪志斌,吳長水,黃敏濤,等. 基于J1939協議的車輛故障診斷與ECU報文解析[J]. 單片機與嵌入式系統應用,2017,17(12):7-11.

[7] 劉明. J1939協議在ECU通信中的應用研究[J]. 電子科技,2015,28(5):36-38,42.

[8] 謝娟娟,李晉,鄭創明. SAE J1939多包傳輸協議及應用分析[J]. 周口師范學院學報,2016,33(2):66-67.

[9] 李志濤. 基于VSPY3的CAN總線多幀數據庫的設計與應用[J]. 汽車電器,2016(6):43-45,48.

[10] 董建業,劉子龍. 基于J1939標準的長幀數據應用[J]. 電子技術與軟件工程,2015(2):18-19.

[11] 曾海林,李懿,陳平松. 基于J1939的發動機通信控制軟件設計[J]. 測控技術,2018,37(5):156-160.

[12] 周良潤. 基于J1939協議的汽車信息采集系統的研究[D]. 武漢:湖北工業大學,2017.

[13] 藺春明,王守勝,高美芹,等. 商用車CAN總線多幀數據通訊[J]. 汽車實用技術,2018,44(11):87-91.

[14] 董小輝,胡錦波,黃浩,等. 基于SAE J1939的商用車智能車載終端系統設計[J]. 計算機測量與控制,2019,27(7):209-213.

[15] 劉鵬. 基于STM32F407的雙CAN總線設計與實現[J]. 科技視界,2016(13):130-132.

[16] 許鵬程,李小波. MATLAB與STM32CubeMX聯合的嵌入式開發方法[J]. 單片機與嵌入式系統應用,2016,16(10):14-16.

(責任編輯:孫 娟)

主站蜘蛛池模板: 亚洲国产成熟视频在线多多| 少妇精品久久久一区二区三区| 免费无码一区二区| 婷婷色狠狠干| 国产va欧美va在线观看| 国产91久久久久久| 亚洲嫩模喷白浆| 国产aⅴ无码专区亚洲av综合网| 欧美三级自拍| 国禁国产you女视频网站| 国产白丝av| 中文字幕调教一区二区视频| 91成人在线观看视频| 午夜日b视频| 国产女人18毛片水真多1| 亚洲日韩高清在线亚洲专区| 久久天天躁狠狠躁夜夜2020一| 国产人成网线在线播放va| 色悠久久综合| 91区国产福利在线观看午夜 | 9啪在线视频| 高潮毛片无遮挡高清视频播放| 亚洲大学生视频在线播放| 99视频在线免费看| 精品国产免费观看| 99在线免费播放| 欧美一级在线看| 不卡无码h在线观看| 狠狠ⅴ日韩v欧美v天堂| AⅤ色综合久久天堂AV色综合| 在线免费亚洲无码视频| 久久精品91麻豆| 天堂网亚洲综合在线| 日本人妻一区二区三区不卡影院| 亚洲二区视频| 97se亚洲综合不卡| 国产黄色视频综合| 又黄又爽视频好爽视频| 亚洲AV无码精品无码久久蜜桃| 国产无码网站在线观看| 99久久人妻精品免费二区| 五月激激激综合网色播免费| 国产性爱网站| 国产农村妇女精品一二区| 伊人久久青草青青综合| 一级一毛片a级毛片| 国产精品一区在线麻豆| 国产精品自拍露脸视频 | 国产欧美精品午夜在线播放| 在线视频亚洲色图| 国产精品无码在线看| 国产传媒一区二区三区四区五区| julia中文字幕久久亚洲| 中文字幕伦视频| 国产va免费精品| 欧美精品v欧洲精品| 亚洲国产理论片在线播放| 成人午夜视频免费看欧美| 中文字幕佐山爱一区二区免费| 色悠久久综合| 试看120秒男女啪啪免费| 九九这里只有精品视频| 精品乱码久久久久久久| 凹凸精品免费精品视频| 99热这里只有精品5| 久久精品娱乐亚洲领先| a毛片免费在线观看| 国产h视频在线观看视频| 日本道中文字幕久久一区| 中文国产成人精品久久| 精品国产成人高清在线| 国产精品欧美日本韩免费一区二区三区不卡| 国产午夜精品一区二区三区软件| 欧美成人日韩| 91久久性奴调教国产免费| 久久精品人人做人人综合试看| 国产极品粉嫩小泬免费看| 久久国产高清视频| 日本国产精品一区久久久| 国产在线97| 久久9966精品国产免费| 国产真实乱子伦精品视手机观看 |