女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

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

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

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

第三十六章 CAN——控制器局域網(wǎng)絡(luò)接口

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-07-01 16:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單芯片解決方案,開啟全新體驗(yàn)——W55MH32高性能以太網(wǎng)單片機(jī)

W55MH32是WIZnet重磅推出的高性能以太網(wǎng)單片機(jī),它為用戶帶來前所未有的集成化體驗(yàn)。這顆芯片將強(qiáng)大的組件集于一身,具體來說,一顆W55MH32內(nèi)置高性能Arm? Cortex-M3核心,其主頻最高可達(dá)216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數(shù)據(jù)處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協(xié)議棧、內(nèi)置MAC以及PHY,擁有獨(dú)立的32KB以太網(wǎng)收發(fā)緩存,可供8個(gè)獨(dú)立硬件socket使用。如此配置,真正實(shí)現(xiàn)了All-in-One解決方案,為開發(fā)者提供極大便利。

在封裝規(guī)格上,W55MH32提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復(fù)雜工控場景設(shè)計(jì)。它擁有66個(gè)GPIO、3個(gè)ADC、12通道DMA、17個(gè)定時(shí)器、2個(gè)I2C、5個(gè)串口、2個(gè)SPI接口(其中1個(gè)帶I2S接口復(fù)用)、1個(gè)CAN、1個(gè)USB2.0以及1個(gè)SDIO接口。如此豐富的外設(shè)資源,能夠輕松應(yīng)對工業(yè)控制中多樣化的連接需求,無論是與各類傳感器、執(zhí)行器的通信,還是對復(fù)雜工業(yè)協(xié)議的支持,都能游刃有余,成為復(fù)雜工控領(lǐng)域的理想選擇。同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網(wǎng)關(guān)模組等場景,軟件使用方法一致。更多信息和資料請進(jìn)入http://www.w5500.com/網(wǎng)站或者私信獲取。

此外,本W(wǎng)55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應(yīng)用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網(wǎng)絡(luò)通信安全再添保障。

為助力開發(fā)者快速上手與深入開發(fā),基于W55MH32L這顆芯片,WIZnet精心打造了配套開發(fā)板。開發(fā)板集成WIZ-Link芯片,借助一根USB C口數(shù)據(jù)線,就能輕松實(shí)現(xiàn)調(diào)試、下載以及串口打印日志等功能。開發(fā)板將所有外設(shè)全部引出,拓展功能也大幅提升,便于開發(fā)者全面評估芯片性能。

若您想獲取芯片和開發(fā)板的更多詳細(xì)信息,包括產(chǎn)品特性、技術(shù)參數(shù)以及價(jià)格等,歡迎訪問官方網(wǎng)頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGhjkceAQighABA5X7BENG0290.png

第三十六章 CAN——控制器局域網(wǎng)絡(luò)接口

控制器局域網(wǎng)(Controller Area Network, CAN)作為工業(yè)自動(dòng)化汽車電子領(lǐng)域的核心通信技術(shù),以其高可靠性和實(shí)時(shí)性著稱。下面我們將基于W55MH32以太網(wǎng)單片機(jī)的bxCAN(基本擴(kuò)展 CAN)模塊,系統(tǒng)講解CAN通信的原理、架構(gòu)及實(shí)際應(yīng)用要點(diǎn),和大家一起學(xué)習(xí)和使用這一技術(shù)。

1CAN通信概述

1.1簡介

CAN(Controller Area Network)是一種用于實(shí)時(shí)控制的串行通信總線,由博世公司開發(fā),廣泛應(yīng)用于汽車電子、工業(yè)自動(dòng)化等領(lǐng)域。

1.2功能特點(diǎn)

CAN接口有以下特點(diǎn):

多主通信機(jī)制:網(wǎng)絡(luò)中所有節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)發(fā)送數(shù)據(jù),無需中央控制器協(xié)調(diào)。當(dāng)多個(gè)節(jié)點(diǎn)同時(shí)發(fā)送時(shí),通過標(biāo)識符仲裁決定優(yōu)先級,確保高優(yōu)先級消息優(yōu)先傳輸。

非破壞性總線仲裁:仲裁過程基于標(biāo)識符的二進(jìn)制值,數(shù)值越小優(yōu)先級越高。仲裁失敗的節(jié)點(diǎn)會自動(dòng)停止發(fā)送,避免總線沖突。

錯(cuò)誤處理:集成CRC校驗(yàn)、應(yīng)答校驗(yàn)等多種錯(cuò)誤檢測機(jī)制,檢測到錯(cuò)誤時(shí)自動(dòng)發(fā)送錯(cuò)誤幀,并通過錯(cuò)誤計(jì)數(shù)器實(shí)現(xiàn)故障界定(主動(dòng)錯(cuò)誤、被動(dòng)錯(cuò)誤、離線狀態(tài))。

實(shí)時(shí)性保障:通信速率最高可達(dá)1Mbps(短距離),滿足實(shí)時(shí)控制場景需求。

1.3CAN幀結(jié)構(gòu)與類型

CAN協(xié)議定義了四種幀類型,每種幀具有特定的結(jié)構(gòu)和功能:

幀類型 作用 結(jié)構(gòu)特點(diǎn)
數(shù)據(jù)幀 傳輸數(shù)據(jù) 包含幀起始、仲裁段、控制段、數(shù)據(jù)段、CRC段、應(yīng)答段和幀結(jié)束,數(shù)據(jù)長度0-8字節(jié)。
遠(yuǎn)程幀 請求其他節(jié)點(diǎn)發(fā)送數(shù)據(jù) 無數(shù)據(jù)段,仲裁段標(biāo)識符用于標(biāo)識請求的消息,接收節(jié)點(diǎn)接收到遠(yuǎn)程幀后發(fā)送對應(yīng)數(shù)據(jù)幀。
錯(cuò)誤幀 檢測到錯(cuò)誤時(shí)發(fā)送 由錯(cuò)誤標(biāo)志(6個(gè)連續(xù)顯性位)和錯(cuò)誤界定符(8個(gè)隱性位)組成,所有節(jié)點(diǎn)檢測到錯(cuò)誤時(shí)發(fā)送。
過載幀 通知其他節(jié)點(diǎn)自身接收緩沖器滿 用于延緩數(shù)據(jù)傳輸,由過載標(biāo)志和過載界定符組成。

1.4標(biāo)識符與優(yōu)先級

CAN幀通過標(biāo)識符(ID)確定優(yōu)先級,ID越小優(yōu)先級越高。

W55MH32支持兩種幀格式:

標(biāo)準(zhǔn)幀:11位ID。

擴(kuò)展幀:29位ID。

標(biāo)識符不代表節(jié)點(diǎn)地址,而是與消息內(nèi)容相關(guān)。例如,汽車中“發(fā)動(dòng)機(jī)轉(zhuǎn)速”的消息可能對應(yīng)標(biāo)識符0x100,所有訂閱該消息的節(jié)點(diǎn)均可接收。

2W55MH32的bxCAN模塊詳解

2.1功能特點(diǎn)

W55MH32集成的 bxCAN(Basic Extended CAN)模塊是一款高性能 CAN控制器,專為減輕 CPU負(fù)荷設(shè)計(jì),其關(guān)鍵特性包括:

協(xié)議兼容性:完全支持CAN 2.0A和2.0B主動(dòng)模式,波特率最高1Mbps。

發(fā)送處理能力:3個(gè)獨(dú)立發(fā)送郵箱,支持優(yōu)先級配置和時(shí)間戳記錄(發(fā)送幀起始時(shí)刻的定時(shí)器值)。

接收管理機(jī)制:2個(gè)3級深度的接收FIFO(FIFO0和FIFO1),硬件自動(dòng)管理報(bào)文存儲,減少CPU干預(yù)。

靈活的過濾系統(tǒng):14個(gè)可配置的過濾器組,支持32位或16位過濾寬度,可設(shè)置為屏蔽位模式或標(biāo)識符列表模式。

時(shí)間觸發(fā)通信:支持TTCM模式,內(nèi)部16位定時(shí)器為報(bào)文添加時(shí)間戳,適用于對實(shí)時(shí)性要求極高的場景。

2.2硬件資源與內(nèi)存映射

bxCAN模塊的硬件資源包括:

引腳連接:通過CANTX和CANRX引腳連接外部收發(fā)器(如TJA1050),總線需接120Ω終端電阻

寄存器組:包含控制寄存器(CAN_MCR)、狀態(tài)寄存器(CAN_MSR)、發(fā)送狀態(tài)寄存器(CAN_TSR)、接收FIFO寄存器(CAN_RF0R/CAN_RF1R)等,共32個(gè)32位寄存器,地址范圍0x00至0x31C。

共享內(nèi)存:與USB模塊共用512字節(jié)SRAM,用于數(shù)據(jù)收發(fā)緩沖,二者不可同時(shí)使用。

2.3時(shí)鐘與波特率

bxCAN的時(shí)鐘源自APB1總線,其波特率計(jì)算公式為:

波特率 =系統(tǒng)時(shí)鐘 / [2 × CAN_BRP × (CAN_SJW + 1 + CAN_BS1 + 1 + CAN_BS2 + 1)]

CAN_BRP:波特率分頻器,范圍1~1024。

CAN_SJW:重新同步跳躍寬度,決定總線相位誤差的補(bǔ)償能力。

CAN_BS1/CAN_BS2:時(shí)間段1和時(shí)間段2,用于定義采樣點(diǎn)位置和位時(shí)序。

例如,當(dāng)系統(tǒng)時(shí)鐘為72MHz,設(shè)置CAN_BRP=9、CAN_SJW=1、CAN_BS1=6、CAN_BS2=3時(shí),波特率為1Mbps,采樣點(diǎn)位于75%位時(shí)間處,兼顧抗干擾性和同步能力。

3bxCAN工作模式與狀態(tài)轉(zhuǎn)換

3.1工作模式

bxCAN支持三種主要工作模式,通過CAN_MCR寄存器配置:

初始化模式

進(jìn)入條件:軟件設(shè)置CAN_MCR.INRQ=1,等待CAN_MSR.INAK=1確認(rèn)。

功能:僅在此模式下可配置波特率(CAN_BTR寄存器)、過濾器組參數(shù)(位寬、模式、FIFO關(guān)聯(lián)等)。

注意事項(xiàng):初始化完成后需退出該模式才能正常通信,退出時(shí)需等待總線空閑(檢測到11個(gè)連續(xù)隱性位)。

正常模式

工作狀態(tài):支持完整的收發(fā)功能,節(jié)點(diǎn)與總線同步后即可發(fā)送和接收報(bào)文。

同步機(jī)制:通過檢測幀起始位(SOF)的上升沿實(shí)現(xiàn)位同步,后續(xù)通過重新同步調(diào)整相位誤差。

典型應(yīng)用:工業(yè)控制中的數(shù)據(jù)交互、汽車ECU間的實(shí)時(shí)通信。

睡眠模式

低功耗設(shè)計(jì):時(shí)鐘停止,僅保留喚醒邏輯,功耗顯著降低。

喚醒方式:軟件清CAN_MCR.SLEEP位,或硬件檢測到總線活動(dòng)(需設(shè)置CAN_MCR.AWUM=1)。

應(yīng)用場景:電池供電設(shè)備的節(jié)能模式,如車載傳感器的待機(jī)狀態(tài)。

3.2測試模式:靜默與環(huán)回

為便于開發(fā)調(diào)試,bxCAN支持兩種測試模式,需在初始化模式下配置CAN_BTR寄存器:

靜默模式(SILM=1)

特性:可接收數(shù)據(jù)幀和遠(yuǎn)程幀,但發(fā)送時(shí)僅輸出隱性位,不影響總線狀態(tài)。

用途:用于分析總線活動(dòng),不干擾現(xiàn)有通信,如故障診斷時(shí)的總線監(jiān)聽。

環(huán)回模式(LBKM=1)

特性:發(fā)送的報(bào)文直接在內(nèi)部回環(huán)至接收端,忽略CANRX引腳輸入。

用途:自測試場景,無需外部硬件即可驗(yàn)證收發(fā)功能,如模塊出廠前的自測。

環(huán)回靜默模式(SILM=1+LBKM=1)

組合特性:兼具環(huán)回和靜默功能,發(fā)送報(bào)文不影響外部總線,僅內(nèi)部回環(huán)測試。

安全測試:適用于"熱自測試",避免干擾實(shí)際總線通信。

4報(bào)文發(fā)送與接收處理機(jī)制

4.1發(fā)送處理流程

bxCAN的發(fā)送流程由硬件自動(dòng)管理,軟件只需配置郵箱并請求發(fā)送:

郵箱選擇:3個(gè)發(fā)送郵箱(郵箱0~2),空閑時(shí)可選擇任意郵箱。

參數(shù)配置:設(shè)置標(biāo)識符(STDID/EXID)、幀類型(數(shù)據(jù)幀/遠(yuǎn)程幀)、數(shù)據(jù)長度(DLC)和數(shù)據(jù)內(nèi)容。

發(fā)送請求:置位CAN_TIxR.TXRQ位,郵箱狀態(tài)變?yōu)?掛號",等待仲裁。

仲裁與發(fā)送:仲裁成功后進(jìn)入"發(fā)送中"狀態(tài),發(fā)送完成后CAN_TSR.TXOK位置1,郵箱重置為空閑。

發(fā)送優(yōu)先級規(guī)則

標(biāo)識符優(yōu)先:CAN_MCR.TXFP=0時(shí),標(biāo)識符數(shù)值小的報(bào)文優(yōu)先發(fā)送;標(biāo)識符相同時(shí),郵箱號小的優(yōu)先。

FIFO優(yōu)先:CAN_MCR.TXFP=1時(shí),按發(fā)送請求的先后順序排隊(duì),適用于分段發(fā)送場景。

4.2接收管理與FIFO機(jī)制

接收處理通過2個(gè)3級深度FIFO實(shí)現(xiàn),完全由硬件管理:

有效報(bào)文判定:正確接收(無CRC錯(cuò)誤、格式錯(cuò)誤等)且通過過濾器檢查的報(bào)文為有效報(bào)文。

FIFO存儲:有效報(bào)文按接收順序存入FIFO,F(xiàn)IFO0和FIFO1各自獨(dú)立,可通過過濾器配置關(guān)聯(lián)到不同F(xiàn)IFO。

狀態(tài)標(biāo)識:CAN_RF0R/FIFO1R中的FMP[1:0]位指示FIFO中的報(bào)文數(shù)量(0~3),滿時(shí)FULL位被置1。

溢出處理:可配置FIFO鎖定模式(CAN_MCR.RFLM=1),此時(shí)新報(bào)文會被丟棄;否則最新報(bào)文覆蓋舊報(bào)文。

時(shí)間戳與過濾器匹配序號

時(shí)間戳:每個(gè)接收報(bào)文記錄幀起始時(shí)刻的16位定時(shí)器值,存入CAN_RDTxR.TIME[15:0],用于分析報(bào)文延遲。

過濾器匹配序號(FMI):記錄匹配的過濾器組編號,存入CAN_RDTxR.FMI[7:0],軟件可據(jù)此快速區(qū)分報(bào)文類型。

5標(biāo)識符過濾系統(tǒng)解析

5.1過濾機(jī)制的核心價(jià)值

CAN網(wǎng)絡(luò)中,節(jié)點(diǎn)通常只關(guān)注部分報(bào)文,過濾器的作用是硬件層面篩選有效報(bào)文,減輕CPU負(fù)荷。bxCAN的過濾系統(tǒng)具有以下特點(diǎn):

14個(gè)過濾器組:每個(gè)組可獨(dú)立配置,支持標(biāo)準(zhǔn)幀和擴(kuò)展幀過濾。

可變位寬:每個(gè)組可設(shè)置為32位單過濾器或2個(gè)16位過濾器。

雙模式配置:屏蔽位模式或標(biāo)識符列表模式,靈活適應(yīng)不同場景。

5.2屏蔽位模式與列表模式

屏蔽位模式

工作原理:每個(gè)過濾器組包含1個(gè)標(biāo)識符寄存器和1個(gè)屏蔽寄存器,屏蔽位為1的位置需嚴(yán)格匹配,為0的位置"不關(guān)心"。

典型應(yīng)用:過濾一組相關(guān)報(bào)文,如標(biāo)識符0x100~0x1FF的標(biāo)準(zhǔn)幀,可設(shè)置標(biāo)識符為0x100,屏蔽碼為0x0FF。

標(biāo)識符列表模式

工作原理:兩個(gè)寄存器均作為標(biāo)識符寄存器,報(bào)文必須與其中一個(gè)完全匹配才會通過過濾。

典型應(yīng)用:精確過濾特定報(bào)文,如只接收標(biāo)識符為0x200的擴(kuò)展幀,可設(shè)置兩個(gè)寄存器均為0x200的擴(kuò)展幀格式。

5.3過濾器優(yōu)先級規(guī)則

當(dāng)報(bào)文匹配多個(gè)過濾器時(shí),優(yōu)先級由以下規(guī)則決定:

位寬優(yōu)先:32位過濾器優(yōu)先級高于16位過濾器。

模式優(yōu)先:列表模式優(yōu)先級高于屏蔽位模式。

編號優(yōu)先:過濾器組編號小的優(yōu)先級高(0-13)。

例如,32位列表模式的過濾器組0優(yōu)先級高于16位屏蔽位模式的過濾器組1,確保關(guān)鍵報(bào)文優(yōu)先處理。

6錯(cuò)誤管理與總線健康監(jiān)測

6.1錯(cuò)誤檢測與計(jì)數(shù)器機(jī)制

bxCAN通過發(fā)送錯(cuò)誤計(jì)數(shù)器(TEC)和接收錯(cuò)誤計(jì)數(shù)器(REC)實(shí)現(xiàn)故障界定:

錯(cuò)誤類型:支持位錯(cuò)誤、填充錯(cuò)誤、CRC錯(cuò)誤、格式錯(cuò)誤、應(yīng)答錯(cuò)誤等,錯(cuò)誤碼存入CAN_ESR.LEC[2:0]。

計(jì)數(shù)器更新:

發(fā)送錯(cuò)誤時(shí)TEC加1,接收錯(cuò)誤時(shí)REC加1。

成功發(fā)送/接收時(shí),TEC和REC減1(超過127時(shí)減至120)。

狀態(tài)轉(zhuǎn)換:

TEC或REC > 127時(shí)進(jìn)入錯(cuò)誤被動(dòng)狀態(tài),此時(shí)發(fā)送錯(cuò)誤幀為隱性位。

TEC > 255時(shí)進(jìn)入離線狀態(tài),無法收發(fā)報(bào)文,需通過自動(dòng)恢復(fù)或軟件干預(yù)重新上線。

6.2離線恢復(fù)機(jī)制

離線狀態(tài)的恢復(fù)方式由CAN_MCR.ABOM位決定:

自動(dòng)恢復(fù)(ABOM=1):檢測到128次11個(gè)連續(xù)隱性位后自動(dòng)恢復(fù)為錯(cuò)誤主動(dòng)狀態(tài)。

手動(dòng)恢復(fù)(ABOM=0):軟件需先請求進(jìn)入初始化模式,再退出,等待總線同步后恢復(fù)。

6.3錯(cuò)誤中斷與狀態(tài)監(jiān)控

通過CAN_IER寄存器可配置多種錯(cuò)誤中斷:

錯(cuò)誤警告中斷(EWGIE=1):TEC或REC ≥ 96時(shí)觸發(fā),提示總線可能出現(xiàn)異常。

錯(cuò)誤被動(dòng)中斷(EPVIE=1):進(jìn)入錯(cuò)誤被動(dòng)狀態(tài)時(shí)觸發(fā),需關(guān)注總線穩(wěn)定性。

離線中斷(BOFIE=1):進(jìn)入離線狀態(tài)時(shí)觸發(fā),需啟動(dòng)恢復(fù)流程。

上次錯(cuò)誤碼中斷(LECIE=1):每次錯(cuò)誤時(shí)更新錯(cuò)誤碼并觸發(fā)中斷,便于快速定位問題。

7應(yīng)用場景

7.1工業(yè)自動(dòng)化網(wǎng)絡(luò)

多設(shè)備協(xié)同控制:如PLC與傳感器、執(zhí)行器間的實(shí)時(shí)數(shù)據(jù)交互,通過CANopen協(xié)議實(shí)現(xiàn)設(shè)備聯(lián)網(wǎng)。

抗干擾設(shè)計(jì):采用隔離收發(fā)器(如CTM1051)和屏蔽雙絞線,總線兩端接120Ω終端電阻,降低電磁干擾影響。

7.2汽車電子系統(tǒng)

車載網(wǎng)絡(luò):連接發(fā)動(dòng)機(jī)控制單元(ECU)、ABS、儀表盤等,遵循J1939或CANopen協(xié)議。

低功耗需求:利用睡眠模式和喚醒功能,減少待機(jī)功耗,滿足汽車電源管理要求。

8注意事項(xiàng)

8.1硬件連接與終端配置

總線兩端必須接入120Ω終端電阻,中間節(jié)點(diǎn)無需額外電阻,避免阻抗不匹配導(dǎo)致信號反射。

工業(yè)場景建議使用隔離收發(fā)器(如CTM1051)和屏蔽雙絞線,屏蔽層單點(diǎn)接地以降低電磁干擾。

8.2波特率一致性配置

所有節(jié)點(diǎn)的波特率參數(shù)(CAN_BRP、BS1、BS2、SJW)必須完全一致,建議通過寄存器硬編碼避免計(jì)算誤差。

長距離通信(>100m)需降低波特率至50kbps以下,并將采樣點(diǎn)后移至80%位時(shí)間處(增大BS1參數(shù))。

8.3過濾器與FIFO管理

未使用的過濾器組需設(shè)置為非激活狀態(tài)(CAN_FA1R對應(yīng)位清0),避免無效報(bào)文占用資源。

接收FIFO需定期查詢或啟用中斷(如FMPIE),防止因軟件處理延遲導(dǎo)致報(bào)文溢出。

8.4錯(cuò)誤處理與恢復(fù)機(jī)制

監(jiān)控發(fā)送/接收錯(cuò)誤計(jì)數(shù)器(TEC/REC),超過96時(shí)觸發(fā)預(yù)警,超過127時(shí)切換至降級模式。

離線恢復(fù)時(shí),若使用手動(dòng)模式(ABOM=0),需確保退出初始化模式后等待總線同步完成(CAN_MSR.INAK=0)。

8.5低功耗模式操作規(guī)范

進(jìn)入睡眠模式前需確認(rèn)所有發(fā)送郵箱為空(CAN_TSR.TME=1),喚醒時(shí)優(yōu)先使用硬件總線活動(dòng)檢測(AWUM=1)以降低功耗。

9程序設(shè)計(jì)

9.1CAN_LoopBack例程

CAN_LoopBack例程實(shí)現(xiàn)了CAN總線回環(huán)測試程序,通過串口接收指令控制CAN數(shù)據(jù)發(fā)送,并自動(dòng)接收回環(huán)數(shù)據(jù)進(jìn)行打印輸出,用于驗(yàn)證CAN控制器功能。以下是實(shí)現(xiàn)過程和結(jié)果驗(yàn)證:

9.1.1CAN初始化

CAN_Mode_Init()函數(shù)是W55MH32的CAN總線初始化函數(shù),內(nèi)容如下:

uint8_t CAN_Mode_Init(uint8_t tsjw,uint8_t tbs2,uint8_t tbs1,uint16_t brp,uint8_t mode) { GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//reuse push pull GPIO_Init(GPIOB,&GPIO_InitStructure); //initialize io GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;//pull up input GPIO_Init(GPIOB,&GPIO_InitStructure); //initialize io //CAN unit settings CAN_InitStructure.CAN_TTCM= DISABLE;//non time triggered communication mode CAN_InitStructure.CAN_ABOM= DISABLE;//software automatic offline management CAN_InitStructure.CAN_AWUM= DISABLE;//Sleep mode Wake up via software (clear the SLEEP bit of CAN- > MCR) CAN_InitStructure.CAN_NART= ENABLE; //prohibit automatic transmission of messages CAN_InitStructure.CAN_RFLM= DISABLE;//message not locked new overwrite old CAN_InitStructure.CAN_TXFP= DISABLE;//priority is determined by the message identifier CAN_InitStructure.CAN_Mode= mode; //Mode settings: mode: 0, normal mode; 1, loop mode; //set baud rate CAN_InitStructure.CAN_SJW = tsjw; //Resynchronize jump width (Tsjw) to tsjw + 1 time unit CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq CAN_InitStructure.CAN_BS1 = tbs1; //Tbs1=tbs1+1 unit of timeCAN_BS1_1tq ~CAN_BS1_ CAN_InitStructure.CAN_BS2 = tbs2; //Tbs2=tbs2+1 unit of timeCAN_BS2_1tq ~ CAN_ CAN_InitStructure.CAN_Prescaler= brp; //The frequency division factor (Fdiv) is brp + 1 CAN_Init(CAN1,&CAN_InitStructure); //Initialize CAN1 CAN_FilterInitStructure.CAN_FilterNumber =0; //filter0 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;//shielding mode CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;//32 bit width CAN_FilterInitStructure.CAN_FilterIdHigh =0x0000; //32 bit id CAN_FilterInitStructure.CAN_FilterIdLow =0x0000; CAN_FilterInitStructure.CAN_FilterMaskIdHigh =0x0000; //32 bit mask CAN_FilterInitStructure.CAN_FilterMaskIdLow =0x0000; CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; //filter 0 is associated with fifo0 CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //activate filter 0 CAN_FilterInit(&CAN_FilterInitStructure); //filter initialization #if CAN_RX0_INT_ENABLE CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//FIFO0 message registration interruption allowed. NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;// the primary priority is 1 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;// the secondary priority is 0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); #endif return0; }

該函數(shù)通過配置GPIOB引腳(PB8接收上拉、PB9發(fā)送復(fù)用)和CAN1控制器,設(shè)置工作模式(含回環(huán)測試)、位時(shí)序參數(shù)(同步段、位段1/2、分頻系數(shù))以確定波特率,使用32位ID屏蔽過濾器接收所有消息,并可選擇性開啟FIFO0中斷(需定義CAN_RX0_INT_ENABLE),最終完成CAN總線的初始化配置,為通信做準(zhǔn)備。

9.1.2CAN數(shù)據(jù)發(fā)送

Can_Send_Msg()為CAN總線數(shù)據(jù)發(fā)送函數(shù):

uint8_tCan_Send_Msg(uint8_t*msg,uint8_t len) { uint8_t mbox; uint16_t i=0; CanTxMsgTxMessage; TxMessage.StdId=0x12; // standard identifier TxMessage.ExtId=0x12; // set extension identifier TxMessage.IDE = CAN_Id_Standard;// standard frame TxMessage.RTR = CAN_RTR_Data; // data frame TxMessage.DLC = len; // the length of the data to be sent for(i=0; i< len; i++) TxMessage.Data[i]?= msg[i]; mbox?= CAN_Transmit(CAN1,?&TxMessage); i? =?0; while?((CAN_TransmitStatus(CAN1, mbox)?== CAN_TxStatus_Failed)?&&?(i?=0XFFF)return1; return0; }

此程序首先配置CAN幀參數(shù)(標(biāo)準(zhǔn)ID為0x12、標(biāo)準(zhǔn)數(shù)據(jù)幀、數(shù)據(jù)長度由參數(shù)指定),將待發(fā)送數(shù)據(jù)填充至發(fā)送緩沖區(qū),然后調(diào)用發(fā)送函數(shù)并通過郵箱狀態(tài)輪詢機(jī)制(最多等待0XFFF次)確認(rèn)發(fā)送結(jié)果,最終返回成功(0)或失敗(1)。

9.1.3CAN數(shù)據(jù)接收

Can_Receive_Msg()為CAN總線數(shù)據(jù)接收函數(shù):

uint8_tCan_Receive_Msg(u8*buf) { uint32_t i; CanRxMsgRxMessage; if(CAN_MessagePending(CAN1, CAN_FIFO0)==0)return0;//no data received exit directly CAN_Receive(CAN1, CAN_FIFO0,&RxMessage); //read data for(i=0; i

通過檢查CAN1的FIFO0接收緩沖區(qū)狀態(tài),若有數(shù)據(jù)則讀取CAN幀信息(含ID、數(shù)據(jù)等),將有效數(shù)據(jù)(最多8字節(jié))復(fù)制到用戶緩沖區(qū),并返回實(shí)際數(shù)據(jù)長度(DLC),若無數(shù)據(jù)則直接返回0,實(shí)現(xiàn)了簡潔的非阻塞式CAN數(shù)據(jù)接收功能。

9.1.4串口接收

GetCmd()為USART1串口單字符接收函數(shù):

uint8_tGetCmd(void) { uint8_t tmp=0; if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE)) { tmp= USART_ReceiveData(USART1); } return tmp; }

通過檢查接收緩沖區(qū)非空標(biāo)志位(RXNE)判斷是否有數(shù)據(jù)可讀,若有則讀取并返回接收到的字符(8位),若無則返回0。

9.1.5主程序

main()函數(shù)為CAN總線回環(huán)測試主程序:

int main(void) { uint8_t res, i, key; uint8_t canbuf[8]; RCC_ClocksTypeDef clocks; delay_init(); UART_Configuration(115200); RCC_GetClocksFreq(&clocks); printf("n"); printf("SYSCLK: %3.1fMhz, HCLK: %3.1fMhz, PCLK1: %3.1fMhz, PCLK2: %3.1fMhz, ADCCLK: %3.1fMhzn", (float)clocks.SYSCLK_Frequency /1000000,(float)clocks.HCLK_Frequency/1000000, (float)clocks.PCLK1_Frequency /1000000,(float)clocks.PCLK2_Frequency/1000000,(float)clocks.ADCCLK_Frequency/1000000); printf("CAN LoopBack Test.n"); CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq,4, CAN_Mode_LoopBack);//CAN initialize loopback mode,baud rate 500Kbps while(1) { if(GetCmd()=='s') { for(i=0; i< DATA_LEN; i++) { canbuf[i]?=?0x5A?+ i; } res?=?Can_Send_Msg(canbuf,?8);?//send 8 bytes if?(res?==?0) printf("Can Loop Back Send Data Successn"); else printf("Can Loop Back Send Data Failn"); } key?=?Can_Receive_Msg(canbuf); if?(key) { printf("Can Loop Back Recv Data Successn"); for?(i?=?0; i?< key; i++) { printf("canbuf[%d] = 0x%xn", i, canbuf[i]); } } } }

通過初始化系統(tǒng)時(shí)鐘、UART1和CAN控制器(配置為回環(huán)模式,波特率500Kbps),在主循環(huán)中監(jiān)聽串口輸入,當(dāng)接收到“s”字符時(shí)發(fā)送8字節(jié)測試數(shù)據(jù)(0x5A~0x61),并持續(xù)檢查CAN接收緩沖區(qū),若收到數(shù)據(jù)則打印內(nèi)容,實(shí)現(xiàn)自收自發(fā)的通信驗(yàn)證。

9.1.6下載驗(yàn)證

程序下載運(yùn)行后,首先打印了系統(tǒng)各時(shí)鐘的頻率和示例名稱,我們手動(dòng)通過串口發(fā)送“s”之后,W55MH32便會通過CAN接口發(fā)送數(shù)據(jù)并接收來實(shí)現(xiàn)回環(huán)測試。發(fā)送和接收成功后都會打印出對應(yīng)的提示信息,接收成功后同時(shí)也會將接收緩沖區(qū)的內(nèi)容打印出來:

wKgZPGhjm8yAYvgdAANwVGwZe9w894.png

9.2CAN_Normal例程

CAN_Normal是CAN總線正常模式通信測試程序,與回環(huán)測試不同,它需通過物理總線與外部CAN節(jié)點(diǎn)通信。該例程除了CAN初始化的CAN模式參數(shù)變成的CAN_Mode_Normal之外,CAN初始化函數(shù)內(nèi)容、發(fā)送、接收函數(shù)、主程序等與CAN_LoopBack例程保持一致。改動(dòng)如下:

CAN_Mode_Init(CAN_SJW_1tq, CAN_BS2_8tq, CAN_BS1_9tq,4, CAN_Mode_Normal);//baud rate 500Kbps

9.2.1下載驗(yàn)證

程序下載運(yùn)行后,首先打印了系統(tǒng)各時(shí)鐘的頻率和示例名稱,通過串口發(fā)送“s”后,W55MH32便會通過CAN接口發(fā)送數(shù)據(jù),發(fā)送成功后串口打印“Can Normal Send Data Success”的信息:

wKgZPGhjm8yAf6ItAAJswYAFeb4543.png

wKgZO2hjm8yAAN-JAACciTsKmTQ446.png

10總結(jié)

本文聚焦W55MH32的bxCAN模塊,詳解CAN通信核心內(nèi)容。先介紹CAN協(xié)議特性與幀結(jié)構(gòu),再解析bxCAN的發(fā)送郵箱、接收FIFO及工作模式,接著闡述收發(fā)機(jī)制、過濾規(guī)則、錯(cuò)誤管理和波特率配置,最后從硬件連接、參數(shù)匹配、過濾配置等方面給出示例程序以及講解,幫助大家理解CAN的使用。

WIZnet是一家無晶圓廠半導(dǎo)體公司,成立于1998年。產(chǎn)品包括互聯(lián)網(wǎng)處理器iMCU?,它采用TOE(TCP/IP卸載引擎)技術(shù),基于獨(dú)特的專利全硬連線TCP/IP。iMCU?面向各種應(yīng)用中的嵌入式互聯(lián)網(wǎng)設(shè)備。

WIZnet在全球擁有70多家分銷商,在香港、韓國、美國設(shè)有辦事處,提供技術(shù)支持和產(chǎn)品營銷。

香港辦事處管理的區(qū)域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

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

    關(guān)注

    114

    文章

    17067

    瀏覽量

    183760
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2910

    瀏覽量

    467390
  • WIZnet
    +關(guān)注

    關(guān)注

    3

    文章

    20

    瀏覽量

    42427
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    開關(guān)量對傳控制器局域網(wǎng)通訊,應(yīng)用廣泛

    局域網(wǎng)開關(guān)量(數(shù)字量)雙向?qū)髂K是一種專門用于在局域網(wǎng)(如以太網(wǎng)、CAN、RS485轉(zhuǎn)TCP/IP等)上,實(shí)現(xiàn)繼電器觸點(diǎn)、按鈕狀態(tài)、傳感通斷信號等開關(guān)狀態(tài)信號,和繼電器吸合/釋放、
    的頭像 發(fā)表于 06-20 16:03 ?194次閱讀

    局域網(wǎng)開關(guān)對傳控制器:無需設(shè)置,即裝即用

    局域網(wǎng)開關(guān)對傳控制器(也稱“網(wǎng)絡(luò)型開關(guān)量對傳模塊”)是一種基于本地網(wǎng)絡(luò)(如以太網(wǎng)、工業(yè)環(huán)網(wǎng))實(shí)現(xiàn)開關(guān)量信號雙向傳輸?shù)膶S迷O(shè)備。其核心功能是用網(wǎng)絡(luò)
    的頭像 發(fā)表于 06-16 14:42 ?191次閱讀

    MAX13041具有±80V故障保護(hù)的高速CAN收發(fā),提供低功耗管理和CAN喚醒功能技術(shù)手冊

    MAX13041是具有±80V故障保護(hù)的高速控制局域網(wǎng)(CAN)收發(fā),可理想用于要求高可靠性和先進(jìn)的電源管理功能的高速汽車網(wǎng)絡(luò)。該器件可將
    的頭像 發(fā)表于 05-27 10:46 ?186次閱讀
    MAX13041具有±80V故障保護(hù)的高速<b class='flag-5'>CAN</b>收發(fā)<b class='flag-5'>器</b>,提供低功耗管理和<b class='flag-5'>CAN</b>喚醒功能技術(shù)手冊

    驅(qū)動(dòng)軟件定義整車變革的網(wǎng)絡(luò)技術(shù)

    隨著汽車工業(yè)的不斷進(jìn)步,汽車網(wǎng)絡(luò)技術(shù)也經(jīng)歷了從簡單到復(fù)雜、從低帶寬到高帶寬的演變過程。最初,汽車內(nèi)部的電子控制單元(ECU)之間的通信主要依賴于控制器局域網(wǎng)絡(luò)
    的頭像 發(fā)表于 04-01 13:42 ?513次閱讀
    驅(qū)動(dòng)軟件定義整車變革的<b class='flag-5'>網(wǎng)絡(luò)</b>技術(shù)

    詳解配置控制器局域網(wǎng)絡(luò)(CAN)位時(shí)序?qū)崿F(xiàn)系統(tǒng)性能優(yōu)化

    方法是重新配置CAN控制器,使其支持最大傳播延遲,以保證支持所需的數(shù)據(jù)速率和總線長度,即使是在節(jié)點(diǎn)采取了隔離措施的條件下。
    的頭像 發(fā)表于 11-15 18:27 ?2036次閱讀
    詳解配置<b class='flag-5'>控制器</b><b class='flag-5'>局域網(wǎng)絡(luò)</b>(<b class='flag-5'>CAN</b>)位時(shí)序?qū)崿F(xiàn)系統(tǒng)性能優(yōu)化

    局域網(wǎng)的連接設(shè)備有哪些類型

    局域網(wǎng)的連接設(shè)備是構(gòu)建局域網(wǎng)的關(guān)鍵組成部分,它們負(fù)責(zé)將網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)(如計(jì)算機(jī)、服務(wù)、打印機(jī)等)連接起來,實(shí)現(xiàn)數(shù)據(jù)的傳輸和共享。以下是對局域網(wǎng)
    的頭像 發(fā)表于 10-08 10:33 ?4485次閱讀

    CAN總線控制器的工作原理

    CAN(Controller Area Network,控制器局域網(wǎng))總線控制器的工作原理涉及多個(gè)方面,包括消息傳輸、沖突檢測與解決、總線仲裁等關(guān)鍵機(jī)制。以下是對
    的頭像 發(fā)表于 09-30 11:33 ?1983次閱讀

    CAN XL總線測試與譯碼

    什么是CANXL?CANXL是第三控制器局域網(wǎng)協(xié)議,建立在經(jīng)典CAN和CANFD網(wǎng)絡(luò)的基礎(chǔ)上,并支持向后兼容。它面向車載
    的頭像 發(fā)表于 09-26 08:03 ?840次閱讀
    <b class='flag-5'>CAN</b> XL總線測試與譯碼

    物聯(lián)網(wǎng)行業(yè)中汽車電子控制系統(tǒng)分享_CAN接口芯片詳解

    物聯(lián)網(wǎng)系統(tǒng)中為什么要使用CAN接口芯片 物聯(lián)網(wǎng)系統(tǒng)中使用CAN(Controller Area Network,控制器局域網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-24 14:34 ?2391次閱讀
    物聯(lián)網(wǎng)行業(yè)中汽車電子<b class='flag-5'>控制</b>系統(tǒng)分享_<b class='flag-5'>CAN</b><b class='flag-5'>接口</b>芯片詳解

    SIT2515帶SPI接口的獨(dú)立局域網(wǎng)(CAN)控制器中文手冊

    電子發(fā)燒友網(wǎng)站提供《SIT2515帶SPI接口的獨(dú)立局域網(wǎng)(CAN)控制器中文手冊.pdf》資料免費(fèi)下載
    發(fā)表于 09-02 14:23 ?0次下載

    用于控制器局域網(wǎng)的可配置錯(cuò)誤發(fā)生

    電子發(fā)燒友網(wǎng)站提供《用于控制器局域網(wǎng)的可配置錯(cuò)誤發(fā)生.pdf》資料免費(fèi)下載
    發(fā)表于 08-27 09:59 ?0次下載
    用于<b class='flag-5'>控制器</b><b class='flag-5'>局域網(wǎng)</b>的可配置錯(cuò)誤發(fā)生<b class='flag-5'>器</b>

    CAN總線應(yīng)用常見問題

    CAN控制器局域網(wǎng)絡(luò)(ControllerAreaNetwork,CAN)的簡稱,由德國的BOSCH公司開發(fā),并最終成為國際標(biāo)準(zhǔn)(ISO 11898),是國際上應(yīng)用最廣泛的現(xiàn)場總線之
    的頭像 發(fā)表于 08-06 11:52 ?1409次閱讀
    <b class='flag-5'>CAN</b>總線應(yīng)用常見問題

    CAN BUS芯片靜電浪涌擊穿整改方案

    在現(xiàn)代電子系統(tǒng)中,CANBus(ControllerAreaNetworkBus,控制器局域網(wǎng)絡(luò)總線)作為一種常用的通信協(xié)議,標(biāo)準(zhǔn)CAN通常指的是CAN2.0A和
    的頭像 發(fā)表于 07-31 08:02 ?3781次閱讀
    <b class='flag-5'>CAN</b> BUS芯片靜電浪涌擊穿整改方案

    HVDA551-Q1/HVDA553-Q1 5V控制器局域網(wǎng)(CAN)收發(fā)數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《HVDA551-Q1/HVDA553-Q1 5V控制器局域網(wǎng)(CAN)收發(fā)數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-11 10:10 ?0次下載
    HVDA551-Q1/HVDA553-Q1 5V<b class='flag-5'>控制器</b><b class='flag-5'>局域網(wǎng)</b>(<b class='flag-5'>CAN</b>)收發(fā)<b class='flag-5'>器</b>數(shù)據(jù)表

    低功率網(wǎng)絡(luò)控制器局域網(wǎng)絡(luò)(CAN)收發(fā)SN65HVD1040-HT數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《低功率網(wǎng)絡(luò)控制器局域網(wǎng)絡(luò)(CAN)收發(fā)SN65HVD1040-HT數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-09 09:14 ?0次下載
    低功率<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>控制器</b><b class='flag-5'>局域網(wǎng)絡(luò)</b>(<b class='flag-5'>CAN</b>)收發(fā)<b class='flag-5'>器</b>SN65HVD1040-HT數(shù)據(jù)表
    主站蜘蛛池模板: 景泰县| 田阳县| 额尔古纳市| 庄浪县| 尼木县| 米易县| 深泽县| 新兴县| 喀什市| 枝江市| 彝良县| 金塔县| 福泉市| 革吉县| 区。| 东至县| 新邵县| 崇州市| 维西| 石林| 昂仁县| 怀集县| 林州市| 广宁县| 东台市| 盐城市| 黔南| 富蕴县| 淳化县| 昭觉县| 宜章县| 福鼎市| 西乌珠穆沁旗| 扬中市| 临城县| 阜新| 剑阁县| 泉州市| 克山县| 舟曲县| 拉萨市|