天天看點

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

本節介紹stm32f107微控制器的主要片内外設,着重介紹10/100m以太網接口、can總線接口和rs485總線接口。

1.功能介紹

stm32f107的以太網子產品支援通過以太網收發資料,符合ieee 802.3-2002标準。stm32f107以太網子產品靈活可調,能适應各種不同客戶的需求。該子產品支援兩種标準接口連接配接到外接的實體層(phy)子產品:ieee 802.3協定定義的獨立于媒體的接口(mii)和簡化的獨立于媒體的接口(rmii)。該子產品适用于各類應用,如交換機、網絡接口卡等。stm32f107以太網子產品符合以下标準:

ieee 802.3-2002标準的以太網mac協定。

ieee 1588-2002的網絡精确時鐘同步标準。

amba2.0标準的ahb主/從端口。

rmii協會定義的rmii标準。

2.主要功能

(1)mac控制器功能

通過外接的phy接口,支援10/100mbps的資料傳輸速率。

通過相容ieee 802.3标準的mii接口,外接高速以太網phy。

支援全雙工和半雙工操作:

支援符合csma/cd協定的半雙工操作。

支援符合ieee 802.3流控的全雙工操作。

在全雙工模式下,可以選擇性地轉發接收的pause控制幀到使用者的應用程式。

支援背壓流控的半雙工操作。

在全雙工模式下,當輸入流控信号失效時,會自動發送pause控制幀。

在發送時插入前導符和幀開始資料(sfd),在接收時去掉這些域。

以幀為機關,自動計算crc和産生可控制的填充位。

在接收幀時,自動去除填充位/crc為可選項。

可對幀長度進行程式設計,支援最長為16kb的标準幀。

可對幀間隙進行程式設計(40~96位,以8位為機關改變)。

支援多種靈活的位址過濾模式:

多達4個48位完美的目的位址(da)過濾器,可在比較時屏蔽任意位元組。

多達3個48位源位址(sa)比較器,可在比較時屏蔽任意位元組。

64位hash過濾器(可選的),用于多點傳播和單點傳播(目的)位址。

可選的令所有的多點傳播位址幀通過。

混雜模式,支援在進行網絡監測時不過濾,允許所有的幀直接通過。

允許所有接收的資料包通過,并附帶其通過每個過濾器的結果報告。

對于發送和接收的資料包,傳回獨立的32位狀态資訊。

支援檢測接收到幀的ieee 802.1q vlan标簽。

應用程式有獨立的發送、接收和控制接口。

支援使用rmon/mib計數器(rfc2819/rfc2665)進行強制性的網絡統計。

使用mdio接口對phy進行配置和管理。

檢測lan喚醒幀和amd的magic packettm幀。

對ipv4和由以太網幀封裝的tcp資料包的接收校驗和解除安裝分流功能。

對ipv4報頭校驗以及對ipv4或ipv6資料格式封裝的tcp、udp或icmp的校驗和進行檢查的進階接收功能。

支援由ieee 1588-2002标準定義的以太網幀時間戳,在每個幀的接收或發送狀态中加上64位的時間戳。

兩套fifo:一個2kb的傳輸fifo,帶可程式設計的發送門檻值,以及一個2kb的接收fifo,帶可程式設計的接收門檻值(預設值是64b)。

在接收fifo的eof後插入接收狀态資訊,使得多個幀可以存儲在同一個接收fifo中,而不需要另開辟一個fifo來存儲這些幀的接收狀态資訊。

可以過濾接收的錯誤幀,并在存儲–轉發模式下,不向應用程式轉發錯誤的幀。

可以轉發“好”的短幀給應用程式。

支援通過産生脈沖來統計在接收fifo中丢失和破壞(由于溢出)的幀數目。

對于mac控制器的資料傳輸,支援存儲–轉發機制。

根據接收fifo的填充程度(門檻值可程式設計),自動向mac控制器産生pause幀或背壓信号。

在發送時,如遇到沖突可以自動重發。

在遲到沖突、沖突過多、順延過多和欠載(underrun)情況下丢棄幀。

軟體控制清空發送fifo。

在存儲–轉發模式下,在要發送的幀内,計算并插入ipv4的報頭校驗以及tcp、udp或icmp的校驗和。

支援mii接口的内循環,可用于調試。

(2)dma功能

在ahb從接口下,支援所有類型的ahb突發傳輸。

在ahb主接口下,軟體可以選擇ahb突發傳輸的類型(固定的或者不固定長度的突發)。

可以選擇來自ahb主接口的位址對齊的突發傳輸。

優化的dma傳輸,傳輸以幀分隔符為界的資料幀。

支援以位元組對齊的方式對資料緩存區尋址。

雙緩存區(環)或連結清單形式的描述符清單。

優先描述符的架構,使得大量的資料傳輸僅需要介入最小量的cpu時間。

每個描述符可以傳輸高達8kb的資料。

無論正常傳輸還是錯誤傳輸都有完整的狀态資訊報告。

可配置的發送與接收dma突發傳輸長度,優化總線使用。

可以設定以不同的操作條件産生對應的中斷。

每個幀發送/接收完成時産生中斷。

通過輪換或固定優先級方式仲裁dma發送/接收控制器的優先級。

開始/停止模式。

狀态寄存器指向目前發送/接收緩存區。

狀态寄存器指向目前發送/接收描述符。

(3)ptp功能

設定接收/發送幀的時間戳。

粗調和細調的校正方法。

當系統時間比目标時間大時觸發中斷。

(通過mcu的複用功能i/o)輸出秒脈沖。

3.功能子產品描述

以太網子產品包括一個符合ieee 802.3協定的mac和專用的dma控制器。以太網子產品結構框圖如圖2.2所示。該子產品支援預設的獨立于媒體的接口(mii)和簡化的獨立于媒體的接口(rmii),可通過afio_mapr寄存器的選擇位來選擇使用哪個接口。

dma控制器通過ahb主/從接口,分别通路mac控制器和存儲器。ahb主接口用于控制資料傳輸,ahb從接口則用于通路控制和狀态寄存器(csr)區域。在mac控制器發送資料前,dma會從系統存儲區讀出資料并存儲到發送fifo中。同樣,從總線上收到的以太網幀會存儲在接收fifo中,并由dma傳送到系統存儲區。

以太網子產品還包括一個站點管理接口(smi),用于與外接的phy通信。一組配置寄存器則允許使用者配置mac和dma控制器,以實作所需要的功能。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

(1)站點管理接口(smi)

站點管理接口(smi)允許應用程式通過時鐘和資料兩根線來通路任何的phy寄存器。這個接口可以支援多達32個phy。

應用程式可以選擇32個phy中的任意一個,并通路phy的32個寄存器中的任意一個。但在任意時刻,隻能通路一個phy的一個寄存器。圖2.3為smi接口信号示意圖,在控制器内部,mdc時鐘線和mdio資料線都是作為複用(af)功能的i/o端口:

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

mdc:一個周期性的時鐘信号,為資料的傳輸提供時鐘,最高頻率為2.5mhz。mdc信号的高電平和低電平的最小維持時間為160ns,mdc信号的最小周期為400ns。在空閑狀态下,smi接口将驅動mdc時鐘信号保持在低電平狀态。

mdio:資料的輸入/輸出線,在mdc時鐘信号的驅動下,向phy裝置傳遞狀态資訊。

(2)獨立于媒體的接口(mii)

獨立于媒體的接口(mii)用于mac子層和phy之間的互聯,允許10mbps和100mbps資料傳輸,圖2.4為獨立于媒體的接口(mii)信号線接口示意圖,圖2.5為mii時鐘源與外置phy接口示意圖。

mii_tx_clk:為傳輸發送資料而提供連續的時鐘信号,對于10mbps的資料傳輸,此時鐘為2.5mhz,對于100mbps的資料傳輸,此時鐘為25mhz。

mii_rx_clk:為傳輸接收資料而提供連續的時鐘信号,對于10mbps的資料傳輸,此時鐘為2.5mhz,對于100mbps的資料傳輸,此時鐘為25mhz。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

mii_tx_en:傳輸使能信号,表示mac正在輸出要求mii接口傳輸的資料。此使能信号必需與資料前導符的起始位同步(mii_tx_clk)出現,并且必需一直保持到所有需要傳輸的位都傳輸完畢為止。

mii_txd[3:0]:由mac子層控制,每次同步傳輸4位資料,資料在mii_tx_en信号有效時有效。mii_txd[0]是資料的最低位,mii_txd[3]是資料的最高位。當mii_tx_en信号無效時,傳輸的資料對phy無效。

mii_crs:載波偵聽信号,由phy控制,當發送或接收的媒體非空閑時,使能此信号。當傳送和接收的媒體都空閑時,phy會撤消此信号。phy必需保證mii_cs信号在發生沖突的整個時間段内都保持有效。不需要此信号與發送/接收的時鐘同步。在全雙工模式下,此信号的狀态對于mac子層無意義。

mii_col:沖突檢測信号,由phy控制,當檢測到媒體發生沖突時,使能此信号,并且在整個沖突的持續時間内,保持此信号有效。此信号不需要與發送/接收的時鐘同步。在全雙工模式下,此信号的狀态對于mac子層無意義。

mii_rxd[3:0]:由phy控制,每次同步傳輸4位資料,資料在mii_rx_dv信号有效時有效。mii_rxd[0]是資料的最低位,mii_rxd[3]是資料的最高位。當mii_rx_en無效,而mii_rx_er有效時,phy會通過傳送一組特殊的mii_rxd[3:0]資料來告知一些特殊的資訊。

mii_rx_dv:接收資料使能信号,由phy控制,當phy準備好解除安裝和解碼資料供mii接收時,使能該信号。此信号必需和解除安裝好的幀資料的首位同步(mii_rx_clk)出現,并在資料完全傳輸完畢之前,都保持有效。在傳送最後4位資料後的第一個時鐘之前,此信号必需變為無效狀态。為了正确接收一個幀,mii_rx_dv信号必需在整個幀傳輸期間内都保持有效,有效電平不能晚于資料線上的sfd位。

mii_rx_er:接收出錯信号,保持一個或多個時鐘周期(mii_rx_clk)的有效狀态,訓示mac子層在幀内檢測到錯誤。錯誤情況必需配合mii_rx_dv的狀态。

(3)簡化的獨立于媒體的接口(rmii)

簡化的獨立于媒體的接口(rmii)規範減少了與10/100mbps通信時,stm32f107以太網子產品和外部以太網之間的引腳數。根據ieee 802.3u标準,mii接口需要16個資料和控制信号引腳,而rmii标準則将引腳數減少到7個(減少了56%的引腳數目)。

rmii子產品用于連接配接mac和phy,該子產品将mac的mii信号轉換到rmii接口上,其與外置phy接口的示意圖如圖2.6所示,圖2.7為rmii時鐘源接口示意圖。rmii子產品具有以下特性:

支援10mbps和100mbps的通信速率。

時鐘信号提高到50mhz。

mac和外部的以太網phy需要使用同樣的時鐘源。

使用2位寬度的資料收發。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

注意 在使用以太網子產品時,ahb的頻率應至少為25mhz。

4.電路設計

圖2.8為以太網部分的電路原理圖。除了按照微控制器資料手冊的要求進行原理圖設計外,在設計時還需要注意的是,以太網接口部分mii_txd[3:0]和mii_rxd[0]為高速收發信号,需要線上路中串接終端比對電阻以實作阻抗比對,保障傳輸線路上信号的完整性。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

注意 阻抗比對是指負載阻抗與激勵源内部阻抗互相适配,得到最大功率輸出的一種工作狀态。對于不同特性的電路,比對條件有所差異。在純電阻電路中,當負載電阻等于激勵源内阻時,則輸出功率為最大,這種工作狀态稱為比對,否則稱為失配。當激勵源内阻抗和負載阻抗含有電抗成分時,為使負載得到最大功率,負載阻抗與内阻必須滿足共扼關系,即電阻成分相等,電抗成分隻數值相等而符号相反,這種比對條件稱為共扼比對。

在mii_txd[3:0]和mii_rxd[0]資料收發總線上串接的比對電阻應與傳輸線的特征阻抗近似或相等。特征阻抗并非普通意義上的電阻值,在高頻電子線路中,特征阻抗有着特定的含義,讀者可參閱相關文獻進一步了解。此外,在電路布線時,應注意以下事項:

變壓器與rj45之間以及phy層晶片與變壓器之間的距離應控制在1英寸内為宜。當布局條件限制時,應優先保證變壓器與rj45之間的距離在1 英寸内。

器件布局按照信号流向放置,避免路徑迂回。

對于沒有內建網絡變壓器的rj45接口,變壓器下方的地平面要分割,分割線寬度不小于100mil,網口變壓器放置在gnd和pgnd的分隔線上。

每對差分走線都要進行等長布線,同時注意阻抗比對。

注意phy層晶片的數字地和模拟地統一,數字電源和模拟電源使用磁珠進行隔離。同時要與變壓器配合。注意phy晶片的電源濾波,應參照晶片資料手冊要求進行設計。

網口訓示燈的電源線3.3v或者2.5v來自于電源平面,要對它們使用磁珠和電容進行退耦;訓示燈驅動線要靠近phy串聯電阻,并在進入i/o區域之前進行電容濾波。這樣防止噪聲通過訓示燈電源線耦合到差分線對區域。

訓示燈電源線和驅動信号線要靠近走線,盡量減小環路面積。

對訓示燈線和差分線進行必要的隔離,兩者要保證距離足夠遠,如果有必要,可以使用gnd平面進行隔離。

注意網口變壓器晶片側中心抽頭對地的濾波電容要盡量靠近變壓器引腳,保證引線最短,分布電感最小。

用于連接配接gnd和pgnd的0Ω電阻或者電容要放置在地分割線上。

phy晶片的模拟電源不宜大面積覆銅,應采取局部走線并串接磁珠接到變壓器晶片側的中心抽頭上。

phy晶片與變壓器之間已經沒有vdd,将phy晶片與變壓器之間的平面層區域定義為gnd,這樣可以切斷來自vdd平面的噪聲途徑。

沿單闆pcb的邊緣每隔250mil打一個接地過孔,這些過孔排可以切斷單闆噪聲向外輻射的途徑,減小對pgnd靜地的影響。

單闆的pgnd、gnd通過螺孔和結構相連接配接,保證系統地電位的統一。

保證電源平面和地平面之間的良好退耦(低阻),電源平面最好和地平面相鄰。

和電源平面相鄰的信号線不要超出電源平面的投影區域。

要保證和電源平面相鄰的信号線的回流路徑的完整性,否則需要改變平面的形狀,使得信号線處在平面層内,回流路徑的不完整會帶來嚴重的電磁相容性問題。

推薦把所有的高速信号線、i/o線、差分線對優先靠近地平面走線,如果無法實作才以電源平面作為參考平面。

差分線要遠離其他信号線,數字信号線或電源要遠離模拟信号線或電源。

電源的去耦和旁路是十分重要的,它們可以為信号提供一個低阻抗通路,減小電源和地平面間的諧振。電容可以起到去耦和旁路的作用,但要保證由電容、走線、過孔、焊盤組成的環路的面積盡量小,以保證引線電感盡量小。

以上是在以太網接口原理圖設計及布線時應注意的問題,關于軟體設計的部分将在本書後續章節中詳細叙述。

控制器區域網路絡(controller area network,can)是由研發和生産汽車電子産品著稱的德國bosch公司開發,并最終成為國際标準(iso11898),是國際上應用最廣泛的現場總線之一。在北美和西歐,can總線協定已經成為汽車計算機控制系統和嵌入式工業控制區域網路的标準總線,并且産生了以can為底層協定專為大型貨車和重工機械車輛設計的j1939協定。近年來,can所具有的高可靠性和良好的錯誤檢測能力受到重視,廣泛應用于汽車計算機控制系統和環境溫度惡劣、電磁輻射強和振動大的工業環境。

can總線屬于現場總線的範疇,它是一種有效支援分布式控制或實時控制的串行通信網絡。較之目前許多rs485基于r線建構的分布式控制系統而言,基于can總線的分布式控制系統在以下幾個方面具有明顯的優越性:

通信實時性強

首先,can控制器可以工作于多種方式下,網絡中的各節點都可根據總線通路優先權(取決于封包辨別符)采用無損結構的逐位仲裁的方式競争向總線發送資料,且can協定廢除了站位址編碼,而代之以對通信資料進行編碼,這可使不同的節點同時接收到相同的資料,這些特點使得can總線構成的網絡各節點之間的資料通信實時性強,并且容易構成備援結構,提高系統的可靠性和系統的靈活性。而利用rs485隻能構成主從式結構系統,通信方式也隻能以主站輪詢的方式進行,系統的實時性、可靠性較差。

開發周期短

can總線通過can收發器接口晶片82c250的兩個輸出端canh和canl與實體總線相連,而canh端的狀态隻能是高電平或懸浮狀态,canl端隻能是低電平或懸浮狀态。這就保證不會出現rs485網絡中的現象,即當系統有錯誤,出現多節點同時向總線發送資料時,導緻總線呈現短路,進而損壞某些節點的現象。而且can節點在錯誤嚴重的情況下具有自動關閉輸出功能,以使總線上其他節點的操作不受影響,進而保證不會出現在網絡中,因個别節點出現問題,而使得總線處于“死鎖”的狀态。而且,can完善的通信協定可由can控制器晶片及其接口晶片來實作,進而大大降低系統開發難度,縮短開發周期,這些是僅有電氣協定的rs485所無法比拟的。

國際标準化

另外,與其他現場總線相比較而言,can總線是集通信速率高、容易實作且成本效益高等諸多特點于一體的一種已形成國際标準的現場總線。這些也是目前 can總線應用于衆多領域,具有強勁的市場競争力的重要原因。

應用廣泛

can屬于工業現場總線的範疇。與一般的通信總線相比,can總線的資料通信具有突出的可靠性、實時性和靈活性。由于其良好的性能及獨特的設計,can總線越來越受到人們的重視。它在汽車領域的應用是最廣泛的,世界上一些著名的汽車制造廠商,如benz(奔馳)、bmw(寶馬)、porsche(保時捷)、rolls-royce(勞斯萊斯)和jaguar(美洲豹)等都采用了can總線來實作汽車内部控制系統與各檢測和執行機構間的資料通信。同時,由于can總線本身的特點,其應用範圍目前已不再局限于汽車行業,而向自動控制、航空航天、航海、過程工業、機械工業、紡織機械、農用機械、機器人、數控機床、醫療器械及傳感器等領域發展。can已經形成國際标準,并已被公認為幾種最有前途的現場總線之一。其典型的應用協定有:sae j1939/iso11783、canopen、canaerospace、devicenet、nmea2000等。接下來簡要介紹關于can總線的功能及工作模式。

stm32支援can協定2.0a和2.0b。它的設計目标是,以最小的cpu負荷來高效處理收到的大量封包。它也支援封包發送的優先級要求(優先級特性可軟體配置)。對于注重安全的應用,bxcan提供所有支援時間觸發通信模式所需的硬體功能。

stm32主要特點如下:

支援can協定2.0a和2.0b主動模式。

波特率最高可達1mbps。

支援時間觸發通信功能。

(1)發送

3個發送郵箱。

發送封包的優先級特性可軟體配置。

記錄發送sof時刻的時間戳。

(2)接收

2個3級深度的接收fifo。

可變的過濾器組:

在互聯型産品中,can1和can2分享28個過濾器組。

其他stm32f103系列産品中有14個過濾器組。

辨別符清單。

fifo溢出處理方式可配置。

記錄接收sof時刻的時間戳。

(3)時間觸發通信模式

禁止自動重傳模式。

16位自由運作定時器。

可在最後2個資料位元組發送時間戳。

(4)管理

中斷可屏蔽。

郵箱占用單獨1塊位址空間,便于提升軟體執行效率。

(5)雙can

can1:是主bxcan,負責管理bxcan和512b的sram存儲器之間的通信。

can2:是從bxcan,不能直接通路sram存儲器。

兩個bxcan子產品共享512b的sram存儲器。

注意?在中容量和大容量産品中,usb和can共用一個專用的512b的sram存儲器用于資料的發送和接收,是以不能同時使用usb和can(usb和can子產品互斥地通路共享的sram存儲器)。usb和can可以同時用于一個應用中但不能在同一個時間使用。

2.主要模式

bxcan有3個主要的工作模式:初始化模式、正常模式和睡眠模式。在硬體複位後,bxcan工作在睡眠模式以節省電能,同時激活cantx引腳的内部上拉電阻。軟體通過對can_mcr寄存器的inrq或sleep位置1,可以請求bxcan進入初始化或睡眠模式。一旦進入了初始化或睡眠模式,bxcan就對can_msr寄存器的inak或slak位置1來進行确認,同時禁用内部上拉電阻。當inak和slak位都為0時,bxcan就處于正常模式。在進入正常模式前,bxcan必須跟can總線取得同步;為取得同步,bxcan要等待can總線達到空閑狀态,即在canrx引腳上監測到11個連續的隐性位。

除此之外,bxcan還有測試模式,其中又包括靜默模式、環回模式和環回靜默模式。

在靜默模式下,bxcan可以正常地接收資料幀和遠端幀,但隻能發出隐性位,而不能真正發送封包。程式設計人員可通過對can_btr寄存器的silm位置1來選擇靜默模式。靜默模式通常用于分析can總線的活動,而不會對總線造成影響——顯性位(确認位、錯誤幀)不會真正發送到總線上。

在環回模式下,bxcan把發送的封包當做接收的封包并儲存(如果可以通過接收過濾)在接收郵箱裡。通過對can_btr寄存器的lbkm位置1來選擇環回模式。為了避免外部的影響,在環回模式下can核心忽略确認錯誤。環回模式通常用于自測試目的。

環回靜默模式可用于“熱自測試”,既可以像環回模式那樣測試bxcan,又不會影響cantx和canrx所連接配接的整個can系統。在環回靜默模式下,canrx引腳與can總線斷開,同時cantx引腳被驅動到隐性位狀态。通過對can_btr寄存器的lbkm和silm位同時置1,可以選擇環回靜默模式。

3.功能描述

(1)發送處理

發送封包的流程為(見圖2.9):

1)應用程式選擇1個空置的發送郵箱;設定辨別符、資料長度和待發送資料;然後對can_tixr寄存器的txrq位置1來請求發送。

2)txrq位置1後,郵箱不再是空郵箱;而一旦郵箱不再為空,軟體不再對郵箱寄存器有寫權限。txrq位置1後,郵箱馬上進入挂号狀态,并等待成為最高優先級的郵箱。

3)一旦郵箱成為最高優先級的郵箱,其狀态變為預定發送狀态。一旦can總線進入空閑狀态,預定發送郵箱中的封包就馬上被發送(進入發送狀态)。

4)一旦郵箱中的封包成功發送後,郵箱馬上變為空置郵箱;硬體相應地對can_tsr寄存器的rqcp和txok位置1,來表明一次成功發送。

5)如果發送失敗,由仲裁引起的就對can_tsr寄存器的alst位置1,由發送錯誤引起的就對terr位置1。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

注意事項1:封包能否立即發送取決于發送的優先級與發送模式(見圖2.10)。

當有超過1個發送郵箱在挂号時,發送順序由郵箱中封包的辨別符決定。根據can協定,辨別符數值最低的封包具有最高的優先級。如果辨別符的值相等,那麼郵箱号小的封包先被發送。

通過對can_mcr寄存器的txfp位置1,可以把發送郵箱配置為發送fifo。在該模式下,發送的優先級由發送請求次序決定。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

注意事項2:發送中止(見圖2.11)及禁止自動重傳(見圖2.12和圖2.13)。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源
《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

發送中止:通過對can_tsr寄存器的abrq位置1,可以中止發送請求。如果郵箱處于挂号或預定狀态,發送請求立即被中止。如果郵箱處于發送狀态,那麼中止請求可能導緻兩種結果。如果郵箱中的封包已成功發送,那麼郵箱變為空置郵箱,并且can_tsr寄存器的txok位被硬體置1;如果郵箱中的封包發送失敗,那麼郵箱變為預定狀态,然後發送請求被中止,郵箱變為空置郵箱且txok位被硬體清零。二者最終都将郵箱清空,差別在于對can_tsr寄存器的txok标志位的影響。

禁止自動重傳:通過對can_mcr寄存器的nart位置1,來讓硬體工作在禁止自動重傳模式。在該模式下,發送操作隻會執行一次。無論是由于仲裁丢失或出錯導緻的發送失敗,硬體都不會再自動發送該封包。并在完成後将can_tsr寄存器的rqcp位置1,同時發送的結果反映在txok、alst和terr位上。該模式主要用于滿足can标準中時間觸發通信選項的需求。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

(2)接收管理

接收的封包存儲在3級郵箱深度的fifo中。fifo完全由硬體來管理,進而節省了cpu的處理負荷,簡化了軟體并保證資料的一緻性。應用程式隻能通過讀取fifo輸出郵箱來讀取fifo中最先收到的封包,如圖2.14所示。

根據can協定,當封包被正确接收(直到eof域的最後一位都沒有錯誤),且通過了辨別符過濾,那麼認為該封包是有效封包。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

1)fifo從空狀态開始,在接收到第一個有效的封包後,fifo狀态變為挂号_1(pending_1),硬體相應地把can_rfr寄存器的fmp[1:0]設定為01(二進制01b)。軟體可以讀取fifo輸出郵箱來讀出郵箱中的封包,然後通過對can_rfr寄存器的rfom位設定1來釋放郵箱,将fifo清空。如果在釋放郵箱的同時又收到了一個有效的封包,那麼fifo仍然保留在挂号_1狀态,軟體可以讀取fifo輸出郵箱來讀取新收到的封包。

2)如果應用程式不釋放郵箱,在接收到第二個有效的封包後,fifo狀态變為挂号_2(pending_2),硬體相應地把fmp[1:0]設定為10(二進制10b)。

3)重複上面的過程,第三個有效的封包把fifo變為挂号_3狀态(pending_3,此時fmp[1:0]=11b)。此時,軟體必須對rfom位設定1來釋放郵箱,以便fifo可以有空間存儲下一個有效的封包;否則,當下一個有效的封包到來時就會導緻一個封包的丢失。

4)當fifo處于挂号_3狀态(即fifo的3個郵箱都是滿的),下一個有效的封包就會導緻溢出并且丢失。此時,硬體對can_rfr寄存器的fovr位進行置1來表明溢出情況。至于會丢棄哪個封包,取決于對fifo的設定:

如果禁用了fifo鎖定功能(can_mcr寄存器的rflm位被清零),那麼fifo中最後收到的封包就被新封包所覆寫。這樣,最新收到的封包不會丢失。

如果啟用了fifo鎖定功能(can_mcr寄存器的rflm位被置1),那麼新收到的封包就被丢棄,軟體可以讀到fifo中最早收到的3個封包。

有關can子產品的辨別符、出錯管理、位時間特性,讀者可自行參考晶片資料手冊或程式設計手冊,這裡不再贅述。

(3)can中斷

bxcan占用4個專用的中斷向量。通過設定can中斷允許寄存器(can_ier),每個中斷源都可以單獨允許和禁用。

發送中斷可由下列事件産生:

發送郵箱0變為空,can_tsr寄存器的rqcp0位被置1。

發送郵箱1變為空,can_tsr寄存器的rqcp1位被置1。

發送郵箱2變為空,can_tsr寄存器的rqcp2位被置1。

fifo0中斷可由下列事件産生:

fifo0接收到一個新封包,can_rf0r寄存器的fmp0位不再是00。

fifo0變為滿時,can_rf0r寄存器的full0位被置1。

fifo0發生溢出時,can_rf0r寄存器的fovr0位被置1。

fifo1中斷可由下列事件産生:

fifo1接收到一個新封包,can_rf1r寄存器的fmp1位不再是1。

fifo1變為滿時,can_rf1r寄存器的full1位被置1。

fifo1發生溢出時,can_rf1r寄存器的fovr1位被置1。

錯誤和狀态變化中斷可由下列事件産生:

出錯情況,關于出錯情況的詳細資訊請參考can錯誤狀态寄存器(can_esr)。

喚醒情況,在can接收引腳上監視到幀起始位(sof)。

can進入睡眠模式。

在can總線中,can_h和can_l是一對差分信号(differential signal)。所謂差分信号,就是指驅動端發送兩個等值、反相的信号,接收端通過比較這兩個電壓的內插補點來判斷邏輯狀态“0”或“1”,而承載差分信号的那一對走線就稱為差分對,與之相對的是單端信号。

差分信号和普通的單端信号走線相比,具有抗幹擾能力強、電磁輻射小、時序定位精确等特點。當差分走線布線良好,差分對的耦合能夠有效抑制外界的共模噪聲幹擾。同樣的道理,由于兩根信号的極性相反,它們對外輻射的電磁場可以互相抵消,需要注意的是,對噪聲的抑制程度及對外輻射的程度也依賴于線路闆布線的優良程度。

由于差分信号的開關變化位于兩個信号的交點,與普通單端信号依靠高低兩個門檻值電壓判斷不同,因而受工藝、溫度的影響小,能降低時序上的誤差,同時也更适合于低幅度信号的電路。是以,目前高速闆級總線大多采用小振幅差分信号技術。

為保證can總線的穩定性和可靠性,線上路闆布線時應遵循差分布線的原則,與上一節介紹的網絡接口的布線原則類似,can總線的電路原理圖如圖2.15所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

rs485标準是由兩個行業協會共同制定和釋出的,即美國電子工業協會(eia)和美國通訊工業協會(tia)。eia 曾經在其所有的标準前面加上rs(rcommended standard),是以許多工程師一直沿用這種名稱。

rs485 總線作為一種多點差分資料傳輸的電氣規範,已成為業界應用最為廣泛的标準通信接口之一。這種通信接口允許在簡單的一對雙絞線上進行多點雙向通信,它所具有的噪聲抑制能力、資料傳輸速率、電纜長度及可靠性是其他标準無法比拟的。正因為如此,許多不同領域都采用rs485 作為資料傳輸線路。汽車電子、電信裝置區域網路、智能樓宇等中都經常可以見到具有rs485 接口電路的裝置。這項标準得到廣泛接受的另外一個原因是它的通用性。rs485 标準隻對接口的電氣特性做出規定,而不涉及接插件、電纜及協定,在此基礎上使用者可以建立自己的高層通信協定,如modbus協定。

rs485總線雖然得到了廣泛應用,但也存在諸多缺點,諸如接納裝置容量不高、通信速率低、功耗較大、僅支援串行布線、穩定性較差、故障定位難度大、戶外易擊穿損壞等。

1.電路設計

事實上,大多數rs485總線的應用都是以微控制器外擴rs485協定晶片的方式實作的。從設計本質上講,rs485總線接口的原理設計并不困難,難點在于如何保障總線的電磁相容性、穩定性和低功耗。圖2.16是以stm32的uart串行接口外擴的rs485總線接口,rs485總線接口晶片為常用的sp3485。這裡列舉的是以低成本方式實作rs485總線接口,在實際應用中,應充分考慮隔離、保護等措施,保障在工程應用中的穩定性。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

在實際應用中,要注意後面讨論的幾個方面。

2.抗幹擾及保護措施

(1)抗擾措施

共模幹擾問題:rs485 收發器共模電壓範圍為-7~+12v。當網絡線路中共模電壓超出此範圍時就會影響通信的穩定性與可靠性,甚至可能損壞接口。

emi電磁幹擾問題:當發送驅動器輸出信号中的共模部分沒有低阻的傳回通道(信号地)時,共模信号會以輻射的形式傳回源端,總線形成一個巨型天線向外輻射電磁波。是以必須保障整個rs485網絡的各個接口有一條低阻的信号傳回通道,避免形成天線效應。

(2)保護措施

隔離保護方法:采用高頻變壓器、光耦等元件實作接口的電氣隔離。将瞬态高壓轉移到隔離接口中的電隔離層上,進而不會産生損害性的浪湧電流,起到保護接口的作用。

旁路保護方法:利用瞬态抑制元件(如tvs、mov、氣體放電管等)将危害性的瞬态能量旁路到大地。

rs485 總線上每個通信節點上采取保護措施,如在每個節點的a、b 線上串聯一個10Ω的隔離電阻,可以防止某個節點損壞後影響整條線路的通信功能。

3.安裝注意事項

采用一條雙絞線電纜作總線,将各個節點串接起來,從總線到每個節點的引出線長度應盡量短,以便使引出線中的反射信号對總線信号的影響最低。

注意總線特性阻抗的連續性,在阻抗不連續點就會發生信号的反射。易産生這種不連續性的情況有:總線的不同區段采用了不同電纜、某一段總線上有過多收發器緊靠在一起安裝,或者是過長的分支線引出到總線。

當rs485總線空閑或開路時,可能導緻接收器誤觸發。是以接收器一端應加偏置電阻,将總線設定在一個确定的狀态。

當采用rs485總線進行長距離通信時,由于阻抗不比對會引起信号反射,是以必須在電纜的末端跨接一個與電纜的特性阻抗同樣大小的終端電阻(通常為120Ω),使電纜的阻抗連續。

4.總線節能

減小每幀資料發送量。

低功耗設計:收發器處于空閑模式時關閉發送驅動器,以減小功率消耗。

選擇具有失效保護功能的低功耗器件(不需加偏置電阻)。

通信距離短、通信速率不高的場合不需加終端電阻。

網絡終端采用rc 阻容比對或肖特基二極管方式代替終端電阻可有效減小電流消耗。

由于除上述幾種接口以外的其他接口電路較為簡單,且大多數讀者較為熟悉,是以不做太多介紹,接下來僅簡單介紹電路原理圖中涉及的要點。

1.usb主從接口

usb子產品為pc主機和微控制器所實作的功能之間提供了符合usb規範的通信連接配接。pc主機和微控制器之間的資料傳輸是通過共享一個專用的資料緩沖區來完成的,該資料緩沖區能被usb外設直接通路。這塊專用資料緩沖區的大小由所使用的端點數目和每個端點最大的資料分組大小所決定,每個端點最大可使用512b緩沖區,最多可用于16個單向或8個雙向端點。當usb子產品同pc主機通信時,根據usb規範可實作令牌分組的檢測、資料發送/接收的處理以及握手分組的處理。整個傳輸的格式由硬體完成,其中包括crc的生成和校驗。usb接口的電路原理圖如圖2.17所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

每個端點都有一個緩沖區描述塊,用于描述該端點使用的緩沖區位址、大小和需要傳輸的位元組數。

當usb子產品識别出一個有效的功能/端點的令牌分組時,(如果需要傳輸資料并且端點已配置)随之發生相關的資料傳輸。usb子產品通過一個内部的16位寄存器實作端口與專用緩沖區的資料交換。在所有的資料傳輸完成後,如果需要,則根據傳輸的方向,發送或接收适當的握手分組。

在資料傳輸結束時,usb子產品将觸發與端點相關的中斷,通過讀狀态寄存器和/或者利用不同的中斷處理程式,微控制器可以确定:

哪個端點需要得到服務。

産生如位填充、格式、crc、協定、缺失ack、緩沖區溢出/緩沖區未滿等錯誤時,正在進行的是哪種類型的傳輸。

usb子產品對同步傳輸和高吞吐量的批量傳輸提供了特殊的雙緩沖區機制,在微控制器使用一個緩沖區的時候,該機制保證了usb外設總是可以使用另一個緩沖區。

在任何不需要使用usb子產品的時候,通過寫控制寄存器可以使usb子產品置于低功耗模式(suspend模式)。在這種模式下,不産生任何靜态電流消耗,同時usb時鐘也會減慢或停止。通過對usb線上資料傳輸的檢測,可以在低功耗模式下喚醒usb子產品。也可以将一特定的中斷輸入源直接連接配接到喚醒引腳上,以使系統能立即恢複正常的時鐘系統,并支援直接啟動或停止時鐘系統。

2.電源

開發闆中的器件供電電平有兩種5v和3.3v,是以3.3v電源部分采用ams1117-3.3為晶片的供電系統,5v電源則直接由外接5v電源提供能源補給。闆級電源的電路示意圖如圖2.18所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

3.rs232接口

rs232接口是1970年由美國電子工業協會(eia)聯合貝爾系統、數據機廠家及計算機終端生産廠家共同制定的用于串行通信的标準。rs232的全名是“資料終端裝置(dte)和資料通信裝置(dce)之間串行二進制資料交換接口技術标準”。該标準規定采用一個25引腳的db25連接配接器,對連接配接器的每個引腳的信号内容加以規定,還對各種信号的電平加以規定。随着裝置的不斷改進,出現了代替db25的db9接口,目前市面上的産品大多以db9的形式出現,僅有少數裝置保留了db25的接口形式。與rs485類似,rs232接口是通過在uart接口外部擴充的一種實體總線,uart提供了符合rs232的資料終端接口。rs232的電路原理圖如圖2.19所示,接口晶片采用st3232。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

4.sd卡接口

sd卡共支援三種傳輸模式:spi模式(獨立序列輸入和序列輸出)、1位sd模式(獨立指令和資料通道,這是獨有的傳輸格式)和4位sd模式(使用額外的引腳以及某些重新設定的引腳。支援4位寬的并行傳輸)。sd卡接口電路設計如圖2.20所示,需要注意的是,接口形式必須與傳輸模式相比對。比如,本例采用spi模式時,僅需要連接配接miso、sck、mosi、sdcs四根實體信号線。若采用4位sd模式時,接口的電氣連接配接方式必須做相應的調整,讀者可參考sd 2.0規範。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

5.紅外收發接口、射頻子產品接口等

此部分電路較為簡單,讀者參考晶片資料手冊進行了解,在此不再贅述。部分電路示意圖如圖2.21~圖2.24所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源
《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源
《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

6.自定義功能鍵與複位鍵

按鍵開關是各種電子裝置不可或缺的人機接口。在實際應用中,很大一部分的按鍵是機械按鍵。在機械按鍵的觸點閉合和斷開時,都會産生抖動,為了保證系統能正确識别按鍵的開關,就必須對按鍵的抖動進行處理。

在系統設計中,有各種各樣的消除按鍵抖動的設計方法,通常有硬體消抖和軟體延時消抖兩種方法。雖然這兩種方法都比較成熟,但在設計中應予以重視,保證人機互動時的友好和電路的穩定性。按鍵接口電路如圖2.25所示

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

7.外擴tft液晶子產品接口

tft(thin film transistor)一般代指薄膜液晶顯示器。顯示屏由許多可以發出任意顔色的光線的像素組成,通過控制各個像素顯示相應的顔色來達到既定的視覺效果,傳達特定的資訊。在嵌入式應用領域,tft液晶顯示屏通常以“裸屏”或模組形式出現。所謂“裸屏”,即未內建任何驅動,需要工程師進行綜合軟硬體開發才能實作既定的顯示功能。而模組則具備了完整顯示功能要素,具有嚴格、完整的接口規範,工程師僅需要按照規範對接口進行讀寫即可實作人機互動。下面以ili9320為驅動晶片的液晶模組作為顯示單元,該模組采用16位并行接口驅動,帶有觸摸功能,接口較為簡單,tft液晶子產品接口電路圖如圖2.26所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

8.模拟轉換、蜂鳴器、e2prom

e2prom采用i2c接口與微控制器相連,讀寫指令格式可參考24c16資料手冊。模拟電路為簡單的資料采集試驗提供便利,實際工程應用應綜合考慮應用背景與實際需求。蜂鳴器可采用pwm方式驅動,實作音調和音量的調節。模拟轉換、蜂鳴器、e2prom電路圖如圖2.27所示。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源

9.微控制器

圖2.28為微控制器部分的電氣連接配接原理圖,本節中的電路采用平坦式電路設計模式,是以各子產品的外接端口均采用offpage connector引出。

《stm32嵌入式系統開發實戰指南》一2.2 主要闆載資源