日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> HK32/航順 >> 航順芯片HK32F103CAN的驅(qū)動應(yīng)用

航順芯片HK32F103CAN的驅(qū)動應(yīng)用

關(guān)鍵字:航順芯片 HK32F103 CAN的驅(qū)動應(yīng)用 作者: 來源: 發(fā)布時間:2022-04-15  瀏覽:10

航順芯片HK32F103系列是一款功能強大的32bit MCU,內(nèi)部集成多個通信模塊,其中CAN模塊支持CAN協(xié)議2.0A和2.0B。目前廣泛應(yīng)用的是CAN 2.0B協(xié)議,其收發(fā)數(shù)據(jù)速度高達1Mbps,有兩種不同長度的ID標識符,分別是11位和29位的。

HK32F103系列CAN接口協(xié)議的主要特點:

(1) 多主控制:

總線空閑時,所有的單元均可開始發(fā)送消息。

(2) 消息的發(fā)送:

在 CAN 協(xié)議中,所有的消息都以固定的格式發(fā)送,總線空閑時,所有與總線相連的單元都可以開始發(fā)送新消息。兩個以上的單元同時開始發(fā)送消息時,根據(jù)標識符( Identifier 以下稱為 ID)決定優(yōu)先級。 ID 并不是表示發(fā)送的目的地址,而是表示訪問總線的消息的優(yōu)先級。兩個以上的單元同時開始發(fā)送消息時,對各消息ID的每個位進行逐個仲裁比較。仲裁獲勝(被判定為優(yōu)先級最高)的單元可繼續(xù)發(fā)送消息,仲裁失利的單元則立刻停止發(fā)送而進行接收工作。即多個單元同時開始發(fā)送時,發(fā)送高優(yōu)先級 ID 消息的單元可獲得發(fā)送權(quán)。

(3) 系統(tǒng)的柔軟性:

與總線相連的CAN節(jié)點沒有類似于“地址”的信息。因此在總線上增加CAN節(jié)點時,連接在總線上的其它CAN節(jié)點的軟硬件及應(yīng)用層都不需要改變。

(4) 通信速度:

根據(jù)整個網(wǎng)絡(luò)的規(guī)模,可設(shè)定適合的通信速度。在同一網(wǎng)絡(luò)中,所有CAN節(jié)點必須設(shè)定成統(tǒng)一的通信速度。即使有一個CAN節(jié)點的通信速度與其它的不一樣,此CAN節(jié)點也會輸出錯誤信號,妨礙整個網(wǎng)絡(luò)的通信。不同網(wǎng)絡(luò)間則可以有不同的通信速度。

(5) 錯誤檢測功能·錯誤通知功能·錯誤恢復(fù)功能:

所有的CAN節(jié)點都可以檢測錯誤(錯誤檢測功能)

(6) 遠程數(shù)據(jù)請求:

所有的CAN節(jié)點都可以檢測錯誤(錯誤檢測功能)

檢測出錯誤的CAN節(jié)點會立即同時通知其他所有CAN節(jié)點(錯誤通知功能)

正在發(fā)送消息的CAN節(jié)點一旦檢測出錯誤,會強制結(jié)束當(dāng)前的發(fā)送。強制結(jié)束發(fā)送的CAN節(jié)點會不斷反復(fù)重新發(fā)送此消息直到成功發(fā)送為止(錯誤恢復(fù)功能)。

(7) 故障封閉:

CAN 可以判斷出錯誤的類型是總線上暫時的數(shù)據(jù)錯誤(如外部噪聲等)還是持續(xù)的數(shù)據(jù)錯誤(如單元內(nèi)部故障、驅(qū)動器故障、斷線等)。由此功能,當(dāng)總線上發(fā)生持續(xù)數(shù)據(jù)錯誤時,可將引起此故障的CAN節(jié)點從總線上隔離出去。

(8) 位填充: CAN通信的同步信息包含于傳輸數(shù)據(jù)中,電平的跳轉(zhuǎn)提供了同步信息,如果連續(xù)多個相同的總線值出現(xiàn),這將影響到同步信息的提取。為此CAN采用位填充規(guī)則,即在一幀中的幀起始,仲裁場,控制場,數(shù)據(jù)場和CRC場部分( CRC界定符,應(yīng)答幀和幀結(jié)束除外),當(dāng)發(fā)送器檢測到5個具有相同數(shù)值的連續(xù)位時,將自動插入一個補碼位。接收節(jié)點收到5個連續(xù)位后下一位自動刪除。

(9) 連接:

CAN 總線是可同時連接多個CAN節(jié)點的總線。可連接的節(jié)點總數(shù)理論上是沒有限制的。但實際上可連接的節(jié)點數(shù)受總線上的時間延遲及電氣負載的限制。降低通信速度,可連接的CAN節(jié)點數(shù)增加;提高通信速度,則可連接的CAN節(jié)點數(shù)減少。如下是CAN通信速度和距離對應(yīng)圖:

航順芯片HK32F103CAN的驅(qū)動應(yīng)用

(9) CAN總線物理框架可以抽象為:

MCU(微處理器) <--> CAN控制器 <--> CAN收發(fā)器 <--> CAN數(shù)據(jù)傳輸總線(CAN-H,CAN-L)。如下所示:

航順芯片HK32F103CAN的驅(qū)動應(yīng)用

CAN總線的數(shù)據(jù)傳輸線——>兩條雙向數(shù)據(jù)線,分為高位﹝CAN-H﹞和低位﹝CAN-L﹞數(shù)據(jù)線, 為了防止外界電磁波干擾和向外輻射,兩條數(shù)據(jù)線纏繞在一起,要求至少每 2.5cm 就要扭絞一次,兩條線上的電位是相反的,電壓的和總等于常值。

CAN總線的終端電阻——>防止數(shù)據(jù)在到達線路終端后象回聲一樣返回,并因此而干擾原始數(shù)據(jù),從而保證了數(shù)據(jù)的正確傳送,終端電阻裝在控制單元內(nèi)。

CAN總線幀類型:

數(shù)據(jù)幀-Data frame

攜帶數(shù)據(jù)從發(fā)送節(jié)點到接收節(jié)點。

分為標準幀(11位標識符)和擴展幀(29位標識符)。

航順芯片HK32F103CAN的驅(qū)動應(yīng)用




        遠程幀-Remote frame
向其他節(jié)點請求發(fā)送具有同一標識符的數(shù)據(jù)幀, 遠程幀也有標準幀和擴展幀兩種格式。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



例如CAN節(jié)點A需要知道CAN節(jié)點B的油溫溫度,CAN節(jié)點A發(fā)送一個遠程幀給節(jié)點B,節(jié)點B收到該遠程幀后發(fā)送一個帶油溫數(shù)據(jù)的數(shù)據(jù)幀給節(jié)點A。

錯誤幀-Error frame
        節(jié)點檢測到錯誤之后發(fā)送錯誤幀。
                錯誤標志: 主動錯誤標志(000000)和被動錯誤標志(111111)。
                錯誤界定符:11111111。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



        過載幀-Overload frame
        接收節(jié)點通知其尚未做好接收準備, 過載標志(過載標志重疊部分)+過載標志界定符。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



       
以下是關(guān)于CAN幀/報文中各個部分的說明:
幀起始:SOF
0,占用1位。當(dāng)總線空閑時發(fā)送,用于CAN總線上的每個節(jié)點的信息同步。
仲裁段:ID+RTR
                ID:
                        表示數(shù)據(jù)幀的優(yōu)先級,先發(fā)送高位再發(fā)送低位。 11位或29位長度。
                RTR(Remote Transmit Request):
                        0: 表示該CAN幀是數(shù)據(jù)幀。
                        1: 表示該CAN幀是遠程幀。
控制段:IDE+r0+DLC
        IDE(IDentifier Extension):
                0: 標準格式。
                1: 擴展格式。
        保留位r0:
                0。
                保留位r1:
                        0。
                DLC(Data Length Code):
                        表示數(shù)據(jù)域中的字節(jié)數(shù),范圍0~8.
數(shù)據(jù)段:Data
CRC段:CRC Sequence+CRC界定符
        CRC polynomial:
x15+x14+x10+x8+x7+x4+x3+1
        CRC界定符:
                1.
ACK段:ACK Slot+ACK界定符
接收到匹配CRC序列的節(jié)點會在應(yīng)答位期間,寫0在發(fā)送器的隱性位作為回應(yīng)。
        ACK界定符:
                1.
幀結(jié)束:EOF
        1111111,表示數(shù)據(jù)幀或遠程幀的結(jié)束。
SRR(Substitute Remote Request):
        1, 擴展幀中代替RTR位.
CAN總線通信機制—報文發(fā)送
        -載波偵聽和帶沖突檢測協(xié)議的多路訪問( CSMA/CD)
-發(fā)送節(jié)點:回讀;
接收節(jié)點:監(jiān)聽
-線與機制:
所有節(jié)點發(fā)送1,總線上才是1;有一個節(jié)點發(fā)送0,總線上就是0,即高電平是隱性位,低電平是顯性位。
-總線仲裁:如果有兩個或兩個以上的節(jié)點同時向總線上發(fā)送數(shù)據(jù),標識符小的獲得仲裁,標識符大的退出仲裁(回讀和線與)。
例如:
ID1:00000000010
ID2:00000000001
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



CAN總線通信機制—報文接收




        如果總線上有數(shù)據(jù)正在發(fā)送,所有節(jié)點都會接收總線數(shù)據(jù),只有通過接收節(jié)點的報文過濾規(guī)則才能被節(jié)點接收進控制器。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



       
CAN的錯誤狀態(tài):
主動錯誤狀態(tài):主動錯誤狀態(tài)是可以正常參加總線通信的狀態(tài)。處于主動錯誤狀態(tài)的單元檢測出錯誤時,輸出主動錯誤標志。
    被動錯誤狀態(tài): 被動錯誤狀態(tài)是易引起錯誤的狀態(tài)。 處于被動錯誤狀態(tài)的單元檢測出錯誤時,輸出被動錯誤標志。處于被動錯誤狀態(tài)的單元即使檢測出錯誤,而其它處于主動錯誤狀態(tài)的單元如果沒發(fā)現(xiàn)錯誤,整個總線也被認為是沒有錯誤的。
  總線關(guān)閉狀態(tài):總線關(guān)閉態(tài)是不能參加總線上通信的狀態(tài)。信息的接收和發(fā)送均被禁止。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



錯誤類型:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



現(xiàn)在以航順芯片的HK32F103VET6(LQFP-100)為例來說明CAN通信的驅(qū)動實現(xiàn)。HK32F103VET6是航順芯片的一款功能強大的32位MCU,內(nèi)部集成CAN控制器,因此進行CAN通信時,只需要外接一個CAN收發(fā)器。
由HK32F103芯片的datasheet,如下截圖我們得知,CAN的發(fā)送引腳為PA12,接收引腳為PA11。







由HK32F103芯片的用戶手冊,如下截圖,得知需要把CAN的發(fā)送引腳PA12設(shè)置為推挽復(fù)用輸出,CAN的接收引腳PA11設(shè)置為浮空輸入或上拉輸入。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



詳細的GPIO配置,依據(jù)該芯片的用戶手冊的表8-1:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



因此,軟件中對引腳的設(shè)置如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



這里,我們使用TJA1050作為CAN收發(fā)器,原理示意圖如下:




將CAN_D連接HK32F103VET6芯片的引腳PA12,CAN_R連接HK32F103VET6芯片的引腳PA11,CANL和CANH接外部CAN總線(即前文提到的CAN-L和CAN-H)。
軟件驅(qū)動方面,首先應(yīng)該使能CAN模塊的時鐘,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



HK32F103VET6芯片CAN模塊(后續(xù)我們簡稱其為bxCAN)有3個主要的工作模式:初始化、正常和睡眠模式。在硬件復(fù)位后,bxCAN 工作在睡眠模式以節(jié)省電能,同時 CANTX 引腳的內(nèi)部上拉電阻被激活。軟件通過對 CAN_MCR 寄存器的INRQ或SLEEP 位置’1’,可以請求 bxCAN 進入初始化或睡眠模式。一旦進入了初始化或睡眠模式,bxCAN 就對 CAN_MSR 寄存器的 INAK 或 SLAK 位置’1’來進行確認,同時內(nèi)部上拉電阻被禁用。當(dāng)INAK 和 SLAK 位都為’0’時,bxCAN 就處于正常模式。在進入正常模式前,bxCAN 必須跟 CAN 總線取得同步;為取得同步,bxCAN 要等待 CAN 總線達到空閑狀態(tài),即在 CANRX 引腳上監(jiān)測到 11 個連續(xù)的隱性位。
因此我們需要把CAN模塊設(shè)置為初始化模式,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



在初始化模式設(shè)置成功之后,根據(jù)具體應(yīng)用的要求,設(shè)置自動離線(Bus-Off)管理、自動喚醒模式、是否禁止報文自動重傳、接收FIFO鎖定模式、發(fā)送 FIFO 優(yōu)先級等,如下示例:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用


航順芯片HK32F103CAN的驅(qū)動應(yīng)用




CAN通信過程中,很重要的一點是設(shè)置通信速率,bxCAN的通信速率設(shè)置依據(jù)HK32F103VET6用戶手冊中的:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



我們現(xiàn)在要設(shè)置500Kbps的通信速度,那么需要設(shè)置APB時鐘頻率為36MHz,還需要設(shè)置位BRP=3,TS1=8,TS2=7,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



至此,CAN初始化中幾個重要特性已經(jīng)設(shè)置好,可以把CAN模塊設(shè)置位正常模式,以便正常地發(fā)送報文。從初始化模式切換為正常模式的設(shè)置,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



報文的發(fā)送,其核心在于正確操作CAN_TIxR、CAN_TDTxR、CAN_TDLxR、CAN_TDHxR寄存器,如下為例,發(fā)送標準格式的ID=0x12的8字節(jié)長度的CAN數(shù)據(jù)幀報文。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用


航順芯片HK32F103CAN的驅(qū)動應(yīng)用




并通過對應(yīng)的狀態(tài)寄存器檢查發(fā)送成功與否:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



某個CAN節(jié)點要接收哪些CAN報文,由其CAN接收規(guī)則(或者稱為接收過濾器)設(shè)定。在接收到有效的報文之前,應(yīng)該先設(shè)置好其接收規(guī)則。為此,HK32F103VET6的bxCAN 控制器為應(yīng)用程序提供了 14 個位寬可變的、可配置的過濾器組(13~0),以便只接收那些軟件需要的報文。硬件過濾的做法節(jié)省了 CPU 開銷,否則就必須由軟件過濾從而占用很大的 CPU開銷。每個過濾器組x由2個32位寄存器,CAN_FiR1和CAN_FiR2【(CAN_FiRx) (i=0..13; x=1..2)】,組成。
每個過濾器組的位寬都可以獨立配置,以滿足應(yīng)用程序的不同需求。根據(jù)位寬的不同,每個過濾器組可提供:
• 1 個 32 位過濾器,包括:STDID[10:0]、EXTID[17:0]、IDE 和 RTR 位
• 2 個 16 位過濾器,包括:STDID[10:0]、IDE、RTR 和 EXTID[17:15]位
此外過濾器可配置為,屏蔽位模式和標識符列表模式。
在屏蔽位模式下,標識符寄存器和屏蔽寄存器一起,指定報文標識符的任何一位,應(yīng)該按照“必須匹配”或“不用關(guān)心”處理。
在標識符列表模式下,屏蔽寄存器也被當(dāng)作標識符寄存器用。因此,不是采用一個標識符加一個屏蔽位的方式,而是使用 2 個標識符寄存器。接收報文標識符的每一位都必須跟過濾器標識符相同。
過濾器組可以通過相應(yīng)的 CAN_FM1R 寄存器配置。在配置一個過濾器組前,必須通過清除 CAN_FAR寄存器的 FACT 位,把它設(shè)置為禁用狀態(tài)。通過設(shè)置 CAN_FS1R 的相應(yīng) FSCx 位,可以配置一個過濾器組的位寬,請參見下圖。通過 CAN_FM1R 的 FBMx 位,可以配置對應(yīng)的屏蔽/標識符寄存器的標識符列表模式或屏蔽位模式。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



我們以常用的一個32位過濾器+標識符屏蔽的方式為例進行說明。
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



如上圖,“映像”行中,RTR對應(yīng)CAN_FiRx的bit1,IDE對應(yīng)CAN_FiRx的bit2,EXID對應(yīng)CAN_FiRx的bit3-bit20,STID對應(yīng)CAN_FiRx的bit21-bit31。結(jié)合前文仲裁段和控制段所述,RTR為0時表示該CAN幀是數(shù)據(jù)幀,為1時表示該CAN幀是遠程幀;IDE為0時表示該CAN幀是標準格式,為1時表示該CAN幀是擴展格式。標準格式下只用到STID位,擴展格式下還會用到EXID位。在32位過濾器+標識符屏蔽的方式應(yīng)用中,“ID”行中,即CAN_FiR1寄存器用于設(shè)置CAN報文的ID、IDE、RTR。“屏蔽”行中,即CAN_FiR2寄存器用于設(shè)置接收報文過程中,是否比較ID、IDE、RTR這些對應(yīng)的各個位,為0時表示“不用關(guān)心”,為1時表示“必須匹配”。以RTR為例,當(dāng)設(shè)置CAN_FiR2的RTR為1“必須匹配”,且CAN_FiR1時RTR為0時,表示只接收數(shù)據(jù)幀,不接收遠程幀;而當(dāng)設(shè)置CAN_FiR2的RTR為0時“不用關(guān)心”,表示無論是數(shù)據(jù)幀還是遠程幀,都會進行接收。
下面,我們開始說明過濾器的具體設(shè)置。
首先應(yīng)該設(shè)置過濾器組工作在初始化模式并暫時禁用過濾器,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



接著設(shè)置過濾器的位寬是單個32位,及工作在標識符屏蔽位模式下,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



假設(shè)我們現(xiàn)在只需要接收兩條CAN標準數(shù)據(jù)幀,且其ID分別為00000000000和00000000001,那么應(yīng)該設(shè)置IDE為0,RTR為0,CAN_FiR1為0,CAN_FiR2為0xFFC00006,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



接著設(shè)置接收到的報文存放于哪個FIFO,這里我們存放到FIFO 0,如下:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用



最后重新激活過濾器和設(shè)置過濾器工作在正常模式:
航順芯片HK32F103CAN的驅(qū)動應(yīng)用


編輯:zzy  最后修改時間:2022-04-15

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

山东| 巴林左旗| 浪卡子县| 裕民县| 全椒县| 武城县| 中超| 栖霞市| 梁河县| 泰来县| 安达市| 宁陵县| 简阳市| 西宁市| 昂仁县| 洛宁县| 西丰县| 普兰县| 阳山县| 周宁县| 曲沃县| 中超| 海口市| 鹿邑县| 张北县| 勐海县| 庆安县| 江孜县| 龙井市| 安宁市| 临猗县| 田东县| 台北市| 石林| 乌兰浩特市| 惠安县| 白水县| 乌兰县| 拉孜县| 申扎县| 甘洛县|