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

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

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

STM32中CAN總線接口發(fā)送和接收數(shù)據(jù)

MCU開發(fā)加油站 ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-03-17 11:00 ? 次閱讀
CAN協(xié)議基礎(chǔ)知識

I2C.SPI總線多用于短距離傳輸,協(xié)議簡單,數(shù)據(jù)量少,主要用于IC之間的通訊,而 CAN 總線則不同,CAN(Controller Area Network) 總線定義了更為優(yōu)秀的物理層、數(shù)據(jù)鏈路層,并且擁有種類豐富、簡繁不一的上層協(xié)議。與I2C、SPI有時鐘信號的同步通訊方式不同,CAN通訊并不是以時鐘信號來進(jìn)行同步的,它是一種異步通訊,只具有CAN_High和CAN_Low兩條信號線,共同構(gòu)成一組差分信號線,以差分信號的形式進(jìn)行通訊。

CAN物理層的形式主要分為閉環(huán)總線及開環(huán)總線網(wǎng)絡(luò)兩種,一個適合于高速通訊,一個適合于遠(yuǎn)距離通訊。CAN閉環(huán)通訊網(wǎng)絡(luò)是一種遵循ISO11898標(biāo)準(zhǔn)的高速、短距離網(wǎng)絡(luò),它的總線最大長度為40m,通信速度最高為1Mbps,總線的兩端各要求有一個

“120歐”的電阻來做阻抗匹配,以減少回波反射。

閉環(huán)總線網(wǎng)絡(luò) 409c8e00-a4d9-11ec-952b-dac502259ad0.jpg

CAN開環(huán)總線網(wǎng)絡(luò)是遵循ISO11519-2標(biāo)準(zhǔn)的低速、遠(yuǎn)距離網(wǎng)絡(luò),它的最大傳輸距離為1km,最高通訊速率為125kbps,兩根總線是獨(dú)立的、不形成閉環(huán),要求每根總線上各串聯(lián)有一個“2.2千歐”的電阻。

開環(huán)總線網(wǎng)絡(luò)

40b0dd9c-a4d9-11ec-952b-dac502259ad0.jpg

CAN總線上可以掛載多個通訊節(jié)點(diǎn),節(jié)點(diǎn)之間的信號經(jīng)過總線傳輸,實現(xiàn)節(jié)點(diǎn)間通訊。由于CAN通訊協(xié)議不對節(jié)點(diǎn)進(jìn)行地址編碼,而是對數(shù)據(jù)內(nèi)容進(jìn)行編碼,所以網(wǎng)絡(luò)中的節(jié)點(diǎn)個數(shù)理論上不受限制,只要總線的負(fù)載足夠即可,可以通過中繼器增強(qiáng)負(fù)載。

CAN通訊節(jié)點(diǎn)由一個CAN控制器及CAN收發(fā)器組成,控制器與收發(fā)器之間通過CAN_Tx及CAN_Rx信號線相連,收發(fā)器與CAN總線之間使用CAN_High及CAN_Low信號線相連。其中CAN_Tx及CAN_Rx使用普通的類似TTL邏輯信號,而CAN_High及CAN_Low是一對差分信號線,使用比較特別的差分信號。當(dāng)CAN節(jié)點(diǎn)需要發(fā)送數(shù)據(jù)時,控制器把要發(fā)送的二進(jìn)制編碼通過CAN_Tx線發(fā)送到收發(fā)器,然后由收發(fā)器把這個普通的邏輯電平信號轉(zhuǎn)化成差分信號,通過差分線CAN_High和CAN_Low線輸出到CAN總線網(wǎng)絡(luò)。而通過收發(fā)器接收總線上的數(shù)據(jù)到控制器時,則是相反的過程,收發(fā)器把總線上收到的CAN_High及CAN_Low信號轉(zhuǎn)化成普通的邏輯電平信號,通過CAN_Rx輸出到控制器中。

差分信號

差分信號又稱差模信號,與傳統(tǒng)使用單根信號線電壓表示邏輯的方式有區(qū)別,使用差分信號傳輸時,需要兩根信號線,這兩個信號線的振幅相等,相位相反,通過兩根信號線的電壓差值來表示邏輯0和邏輯1。

相對于單信號線傳輸?shù)姆绞?,使用差分信號傳輸具有如下?yōu)點(diǎn):

  • 抗干擾能力強(qiáng),當(dāng)外界存在噪聲干擾時,幾乎會同時耦合到兩條信號線上,而接收端只關(guān)心兩個信號的差值,所以外界的共模噪聲可以被完全抵消。

  • 能有效抑制它對外部的電磁干擾,同樣的道理,由于兩根信號的極性相反,他們對外輻射的電磁場可以相互抵消,耦合的越緊密,泄放到外界的電磁能量越少。

  • 時序定位精確,由于差分信號的開關(guān)變化是位于兩個信號的交點(diǎn),而不像普通單端信號依靠高低兩個閾值電壓判斷,因而受工藝,溫度的影響小,能降低時序上的誤差,同時也更適合于低幅度信號的電路。

  • 由于差分信號線具有這些優(yōu)點(diǎn),所以在USB協(xié)議、485協(xié)議、以太網(wǎng)協(xié)議及CAN協(xié)議的物理層中,都使用了差分信號傳輸。
CAN協(xié)議中的差分信號

CAN協(xié)議中對它使用的CAN_High及CAN_Low表示的差分信號做了規(guī)定。以高速CAN協(xié)議為例,當(dāng)表示邏輯1時(隱性電平),CAN_High和CAN_Low線上的電壓均為2.5v,即它們的電壓差V H -V L =0V;而表示邏輯0時(顯性電平),CAN_High的電平為3.5V,CAN_Low線的電平為1.5V,即它們的電壓差為V H -V L =2V。

40bef288-a4d9-11ec-952b-dac502259ad0.jpg

CAN 總線的特點(diǎn)

CAN 總線網(wǎng)絡(luò)是一種真正的多主機(jī)網(wǎng)絡(luò),在總線處于空閑狀態(tài)時,任何一個節(jié)點(diǎn)單元都可以申請成為主機(jī),向總線發(fā)送消息。其原則是:最先訪問總線的節(jié)點(diǎn)單元可以獲得總線的控制權(quán);多個節(jié)點(diǎn)單元同時嘗試獲取總線的控制權(quán)時,將發(fā)生仲裁事件,具有高優(yōu)先級的節(jié)點(diǎn)單元將獲得總線控制權(quán)。

CAN 協(xié)議中,所有的消息都以固定的數(shù)據(jù)格式打包發(fā)送。兩個以上的節(jié)點(diǎn)單元同時發(fā)送信息時,根據(jù)節(jié)點(diǎn)標(biāo)識符(常稱為 ID,亦打包在固定的數(shù)據(jù)格式中)決定各自優(yōu)先級關(guān)系,所以 ID 并非表示數(shù)據(jù)發(fā)送的目的地址,而是代表著各個節(jié)點(diǎn)訪問總線的優(yōu)先級。如此看來,CAN 總線并無類似其他總線“地址”的概念,在總線上增加節(jié)點(diǎn)單元時,連接在總線的其他節(jié)點(diǎn)單元的軟硬件都不需要改變。

CAN 總線的通信速率和總線長度有關(guān),在總線長度小于 40m 的場合中,數(shù)據(jù)傳輸速率可以達(dá)到 1Mbps,而即便總線長度上升至 1000m,數(shù)據(jù)的傳輸速率仍可達(dá)到 50Kbps,無論在速率還是傳輸距離都明顯優(yōu)于常見的 RS232、RS485 和 I2C 總線。

對于總線錯誤,CAN 總線有錯誤檢測功能、錯誤通知功能、錯誤恢復(fù)功能三種應(yīng)對措施,分別應(yīng)對于下面三點(diǎn)表述:所有的單元節(jié)點(diǎn)都可以自動檢測總線上的錯誤;檢測出錯誤的節(jié)點(diǎn)單元會立刻將錯誤通知給其他節(jié)點(diǎn)單元;若正在發(fā)送消息的單元檢測到當(dāng)前總線發(fā)生錯誤,則立刻強(qiáng)制取消當(dāng)前發(fā)送,并不斷反復(fù)發(fā)送此消息至成功為止。

CAN 總線上的每個節(jié)點(diǎn)都可以通過判斷得出,當(dāng)前總線上的錯誤時的錯誤(如瞬間的強(qiáng)干擾)還是持續(xù)的錯誤(如總線斷裂)。當(dāng)總線上發(fā)生持續(xù)錯誤時,引起故障的節(jié)點(diǎn)單元會自動脫離總線。

CAN 總線上的節(jié)點(diǎn)數(shù)量在理論上沒有上限,但在實際受到總線上的時間延時及電氣負(fù)載的限制。降低最大通信速率,可以增加節(jié)點(diǎn)單元的連接數(shù);反之,減少節(jié)點(diǎn)單元的連接數(shù),則最大通信速率可以提高。

CAN總線的數(shù)據(jù)通信是以數(shù)據(jù)幀的格式進(jìn)行的,而數(shù)據(jù)幀又是由位場組成的,其中每一個位又被劃分為四段.即SS(SYNC SEG),PTS(PROP SEG--傳播時間段),PBS1(PHASE SEG1--相位緩沖段1),PBS2(PHASE SEG1--相位緩沖段2).

數(shù)據(jù)幀的結(jié)構(gòu)圖:

40d83a90-a4d9-11ec-952b-dac502259ad0.png圖中D表示顯性電平,R表示隱形電平.ID:高位在前,低位在后。基本ID,禁止高7位都為隱性,即不能:ID=1111111XXXX。RTR,遠(yuǎn)程請求位。0,數(shù)據(jù)幀;1, 遠(yuǎn)程幀;SRR,替代遠(yuǎn)程請求位。設(shè)置為1(隱性電平);IDE,標(biāo)識符選擇位。0,標(biāo)準(zhǔn)標(biāo)識符;1,擴(kuò)展標(biāo)識符;r0,r1:保留位。必須以顯現(xiàn)電平發(fā)送,但是接收可以是隱性電平。DLC:數(shù)據(jù)長度碼。0~8,表示發(fā)送/接收的數(shù)據(jù)長度(字節(jié))。IDE,標(biāo)識符選擇位。0,標(biāo)準(zhǔn)標(biāo)識符;1,擴(kuò)展標(biāo)識符; 位時序分解

為了實現(xiàn)位同步,CAN協(xié)議把每一個數(shù)據(jù)位的時序分解成SS段、PTS段、PBS1段、PBS2段,這四段的長度加起來即為一個CAN數(shù)據(jù)位的長度。分解后最小的時間單位是Tq,而一個完整位由8~25個Tq組成。

40f7d45e-a4d9-11ec-952b-dac502259ad0.png

STM32中的CAN接口

STM32的芯片中具有bxCAN控制器 (Basic Extended CAN),它支持CAN協(xié)議2.0A和2.0B標(biāo)準(zhǔn)。該CAN控制器支持最高的通訊速率為1Mb/s;可以自動地接收和發(fā)送CAN報文,支持使用標(biāo)準(zhǔn)ID和擴(kuò)展ID的報文;外設(shè)中具有3個發(fā)送郵箱,發(fā)送報文的優(yōu)先級可以使用軟件控制,還可以記錄發(fā)送的時間;具有2個3級深度的接收FIFO,可使用過濾功能只接收或不接收某些ID號的報文;可配置成自動重發(fā);不支持使用DMA進(jìn)行數(shù)據(jù)收發(fā)。

4110b67c-a4d9-11ec-952b-dac502259ad0.jpg

1. CAN控制內(nèi)核2. CAN發(fā)送郵箱3. CAN接收FIFO

4. 驗收篩選器

STM32有兩組CAN控制器,其中CAN1是主設(shè)備,框圖中的“存儲訪問控制器”是由CAN1控制的,CAN2無法直接訪問存儲區(qū)域,所以使用CAN2的時候必須使能CAN1外設(shè)的時鐘。

STM32至少配備一個bxCAN(basic extend can )控制器,支持2.0A和2.0B協(xié)議,最高數(shù)據(jù)傳輸速率可達(dá)1M bps,支持11位標(biāo)準(zhǔn)幀格式和29位擴(kuò)展幀格式的接收和發(fā)送,具備三個發(fā)送郵箱和兩個接收FIFO,此wa此外還有三級可編程濾波器,STM32的bxCAN非常適應(yīng)CAN總線網(wǎng)絡(luò)y網(wǎng)絡(luò)應(yīng)用發(fā)展需求,其主要主要特征如下 :

  • 支持CAN協(xié)議2.0A和2.0B主動模式

  • 波特率最高可達(dá)1Mbps

  • 支持時間觸發(fā)通訊功能

數(shù)據(jù)發(fā)送特性:具備三個發(fā)送郵箱;發(fā)送報文的優(yōu)先級可以通過軟件配置,可記錄發(fā)送時間的時間戳。

數(shù)據(jù)接收特性:具備三級深度和兩個接收FIFO;具備可變的過濾器組,具備可編程標(biāo)識符列表,可配置FIFO溢出處理方式,記錄接收時間的時間戳報文管理:中斷可屏蔽;郵箱單獨(dú)占有一塊地址空間,便于提高軟件效率。本文的實驗設(shè)計將利用STM32 的bxCAN控制器的環(huán)回工作模式,實現(xiàn)bxCAN控制器的自收發(fā)過程,并使用串口設(shè)備跟蹤監(jiān)視數(shù)據(jù)收發(fā)情況。程序流程如下圖

4125a906-a4d9-11ec-952b-dac502259ad0.png

本程序設(shè)計主要圍繞bxCAN控制器的初始化初始化配置展開,其要點(diǎn)羅列如下:

1. 初始化RCC寄存器,配置PLL輸出72MHZ時鐘,APB1總線頻率為36MHZ,分別打開CAN,GPIO和USART1的設(shè)備時鐘。

2. 設(shè)置CAN的Tx引腳(即PA12)為復(fù)用推挽模式,并設(shè)置Rx引腳(即PA1)為上拉輸入模式,其中三個重要的參數(shù)如下配置

CAN_InitStructure.CAN_SJW配置為CAN_SJW_1tq;CAN_InitStructure.CAN_BS1配置為CAN_BS1_8tq;CAN_InitStructure.CAN_BS2配置為CAN_BS2_7tq;

3. 最后分頻數(shù)配置為5,配置接受接受緩沖區(qū)標(biāo)識符為0x00AA0000,配置過濾器為32位屏蔽位模式,過濾器屏蔽標(biāo)識符為0x00FF0000.

4. 初始化USART設(shè)備

5. 使用擴(kuò)展幀shu幀數(shù)據(jù)格式,ID為0xAA,數(shù)據(jù)長度長度為8
STM32的CAN控制器設(shè)計的重點(diǎn)集中在CAN寄存器組的初始化過程中,而CAN初始化的重點(diǎn)在于波特率的設(shè)置,過濾器的設(shè)置和位時序的設(shè)置,以下作詳細(xì)敘述。

(1)CAN波特率的計算

計算波特率是任何一種總線的zhon重要內(nèi)容之一,CAN總線也不例外.從STM32微控制器的官方參考手冊里可以查找到關(guān)于CAN波特率的計算公式如下.

通過配置位時序寄存器CAN_BTR的TS1[3:0]及TS2[2:0]寄存器位設(shè)定BS1及BS2段的長度后,就可以確定每個CAN數(shù)據(jù)位的時間:

BS1段時間:

T S1 =Tq x (TS1[3:0] + 1),

BS2段時間:

T S2 = Tq x (TS2[2:0] + 1),

一個數(shù)據(jù)位的時間:

T 1bit =1Tq+T S1 +T S2 =1+ (TS1[3:0] + 1)+ (TS2[2:0] + 1)= N Tq

其中單個時間片的長度Tq與CAN外設(shè)的所掛載的時鐘總線及分頻器配置有關(guān),CAN1和CAN2外設(shè)都是掛載在APB1總線上的,而位時序寄存器CAN_BTR中的BRP[9:0]寄存器位可以設(shè)置CAN外設(shè)時鐘的分頻值 ,所以:

Tq = (BRP[9:0]+1) x T PCLK其中的PCLK指APB1時鐘,默認(rèn)值為36MHz。

最終可以計算出CAN通訊的波特率:

BaudRate = 1/N Tq程序設(shè)計要點(diǎn)中強(qiáng)調(diào)的三個重要參數(shù),其實是can總線物理層中所要求的位時序。共三個階段,分別為SJW,BS1和BS2階段,這三個階段的時間長度都是以長度為tq的時間單元為單位的。這樣可以逐步計算出CAN總線的波特率。因此要點(diǎn)提示中所要求的參數(shù),實際上將CAN的波特率設(shè)置為450kdps。
過濾器的設(shè)置

can總線沒有所謂地址的概念??偩€上的每個報文都可以被各個節(jié)點(diǎn)接收。這是一種典型的廣播式網(wǎng)絡(luò)。在實際應(yīng)用中。某個節(jié)點(diǎn)往往只希望接收到特定類型的數(shù)據(jù), 這就要借助過濾器來實現(xiàn)。顧名思義,過濾器的作用就是把節(jié)點(diǎn)不希望接收到的數(shù)據(jù)過濾掉。只將希望接收到的數(shù)據(jù)給予通行。

stm32的CAN控制器,提供14個過濾器??梢栽O(shè)置為屏蔽模式和列表模式對can總線上的報文進(jìn)行過濾。當(dāng)節(jié)點(diǎn)希望接收到一種報文時??梢杂闷帘挝荒J綄an總線上的報文進(jìn)行過濾。反之,當(dāng)節(jié)點(diǎn)希望接受到單一類型報文時。則應(yīng)該配置為列表模式。本機(jī)程序中使用了32位的屏蔽位模式。

下面僅對這種模式進(jìn)行解析。can控制器的每個過濾器都具備一個寄存器。稱為屏蔽寄存器。其中標(biāo)識符寄存器的每一位都有屏蔽寄存器的每一位所對應(yīng)。事實上,這也對應(yīng)著can數(shù)據(jù)。事實上,這也對應(yīng)著看標(biāo)準(zhǔn)數(shù)據(jù)幀中的標(biāo)識符段。

如下圖所示。415a97c4-a4d9-11ec-952b-dac502259ad0.png此處重點(diǎn)在于屏蔽寄存器的作用。通過查閱stm32微控制器參考文檔可以知道。當(dāng)過濾器工作在屏蔽模式下時。屏蔽寄存器被置為1的每一位都要求can接收到的數(shù)據(jù)幀標(biāo)識符段必須和對應(yīng)的接收緩沖區(qū)標(biāo)識位相同。否則予以濾除。以本程序為例。要點(diǎn)中要求將節(jié)點(diǎn)接收緩沖標(biāo)識符配置為0x00AA0000。過濾器屏蔽標(biāo)識符為0x00FF0000。該節(jié)點(diǎn)接收到的數(shù)據(jù)幀的標(biāo)識符段的位[23:16],必須和接收緩沖區(qū)標(biāo)識符中的[23:16]匹配。否則予以濾除。但若滿足了這一條件而即便如下的位不匹配。則該數(shù)據(jù)幀仍不會被濾除。正如本程序而言。即can接口僅僅接收標(biāo)識符段的位[23:16]為0xAA的數(shù)據(jù)幀.

根據(jù)can總線物理層的要求。can總線的波特率和傳輸距離成反比關(guān)系。傳輸距離變化時,要根據(jù)位時序來調(diào)整can總線的波特率。

41791582-a4d9-11ec-952b-dac502259ad0.png

4192b352-a4d9-11ec-952b-dac502259ad0.jpg

程序代碼如下:
void RCC_Config(void){
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE) RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE) }void GPIO_for_can_and_uart_Config(void){/*定義一個GPIO_InitTypeDef類型的結(jié)構(gòu)體*/GPIO_InitTypeDef GPIO_InitStructure; 
/*設(shè)置can的RX--pa.11引腳*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/*設(shè)置can的TX--pa.12引腳*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/*設(shè)置usart1 的RX 腳 -PA.10為父浮空輸入腳*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure); 


} void Can_Config(void){CAN_InitTypeDef          CAN_InitStructure;CAN_FilterInitTypeDef  CAN_FilterInitStructure; CAN_DeInit(CAN1); CAN_StructInit(&CAN_InitStructure);CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFIM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE; CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; CAN_InitStructure.CAN_Prescaler=5;CAN_Init(CAN1,&CAN_InitStructure); CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;CAN_FilterInitStructure.CAN_FilterIdHigh=0x00AA<<3;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x00FF<<3;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure); } void main(void){u8 TransmitMailbox=0;CanTxMsg   TxMessage;CanRxMsg   RxMessage;RCC_Config();GPIO_for_can_and_uart_Config();USART_Config();Can_Config(); TxMessage.ExtId=0x00aa0000;TxMessage.RTR=CAN_RTR_Data;TxMessage.IDE=CAN_ID_EXT;TxMessage.DLC=8;TxMessage.Data[0]=0x00;TxMessage.Data[1]=0x12;TxMessage.Data[2]=0x34;TxMessage.Data[3]=0x56;TxMessage.Data[4]=0x78;TxMessage.Data[5]=0xab;TxMessage.Data[6]=0xcd;TxMessage.Data[7]=0xef; TransmitMailbox=CAN_Transmit(CAN1,&TxMessage);while((CAN_TransmitStatus(CAN1,TransmitMailbox))!=CANTXOK);printf("rnThe CAN has send data :0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,rn",TxMessage.Data[0],TxMessage.Data[1],TxMessage.Data[2],TxMessage.Data[3],TxMessage.Data[4],TxMessage.Data[5],TxMessage.Data[6],TxMessage.Data[7],); while((CAN_MessagePending(CAN1,CAN_FIFO0)==0));
RxMessage.StdId=0x00;RxMessage.IDE=CAN_ID_EXT;RxMessage.DLC=0;RxMessage.Data[0]=0x00;RxMessage.Data[1]=0x12;RxMessage.Data[2]=0x34;RxMessage.Data[3]=0x56;RxMessage.Data[4]=0x78;RxMessage.Data[5]=0xab;RxMessage.Data[6]=0xcd;RxMessage.Data[7]=0xef; CAN_Receive(CAN1,CAN_FIFO0,&RxMessage);printf("rnThe CAN has received data :0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,rn",RxMessage.Data[0],RxMessage.Data[1],RxMessage.Data[2],RxMessage.Data[3],RxMessage.Data[4],RxMessage.Data[5],RxMessage.Data[6],RxMessage.Data[7],);while(1);  }
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • CAN總線
    +關(guān)注

    關(guān)注

    145

    文章

    1911

    瀏覽量

    130561
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354293

原文標(biāo)題:STM32中CAN總線接口發(fā)送和接收數(shù)據(jù)

文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式總結(jié)

    STM32串口發(fā)送數(shù)據(jù)接收數(shù)據(jù)方式總結(jié)
    的頭像 發(fā)表于 09-19 09:14 ?7127次閱讀
    <b class='flag-5'>STM32</b>串口<b class='flag-5'>發(fā)送</b><b class='flag-5'>數(shù)據(jù)</b>和<b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>方式總結(jié)

    英創(chuàng)WinCE主板CAN接口數(shù)據(jù)接收性能測試

      在英創(chuàng)公司嵌入式主板產(chǎn)品,高端的335x主板系列及低端的ESM9287主板均可支持2路CAN總線標(biāo)準(zhǔn)接口。本文提供CE平臺的EM3352和EM9287的
    發(fā)表于 09-19 11:15

    基于CAN總線與RS485的DSP通信接口設(shè)計

    )當(dāng)發(fā)送出錯或仲裁過程數(shù)據(jù)丟失時,該控制器具有自動重發(fā)功能;(4)能夠通過軟件編程實現(xiàn)自檢測功能。4.1硬件設(shè)計應(yīng)用TMS320LF2407微控制器組成一個CAN
    發(fā)表于 12-10 10:19

    采用CAN總線與RS-485實現(xiàn)DSP通信接口

    控制器具有自動重發(fā)功能;(4)能夠通過軟件編程實現(xiàn)自檢測功能?! ?.1硬件設(shè)計  應(yīng)用TMS320LF2407微控制器組成一個CAN總線網(wǎng)絡(luò),進(jìn)行實時接收發(fā)送
    發(fā)表于 06-14 05:00

    CAN總線通訊,怎么定時發(fā)送接收多個郵箱

    各位專家,您好。我打算在DSP2812開發(fā)板和上位機(jī)之間實現(xiàn)CAN通信:設(shè)置2個發(fā)送郵箱,1個接收郵箱,定時接收發(fā)送
    發(fā)表于 06-11 15:08

    STM32 CAN總線簡介

    ,能夠讓掛載在總線上的不同節(jié)點(diǎn)接收到相同的數(shù)據(jù),再根據(jù)每個節(jié)點(diǎn)的配置對信息進(jìn)行選擇性處理(處理or丟棄)。CAN總線具有以下特點(diǎn):1. 多主
    發(fā)表于 08-19 06:04

    通過CAN總線接收指令并發(fā)送反饋信息

    下面先把在總體思路里面確定的需求及機(jī)構(gòu)分析搬過來〇 需求及結(jié)構(gòu)分析1、能夠通過CAN總線接收指令,并發(fā)送反饋信息 ;STM32自帶
    發(fā)表于 08-23 08:24

    Small RTOS51 下CAN 總線數(shù)據(jù)收發(fā)實現(xiàn)

    本文將介紹CAN 總線節(jié)點(diǎn)的設(shè)計以及在實時操作系統(tǒng)Small RTOS51 下CAN 總線數(shù)據(jù)接收
    發(fā)表于 06-06 15:57 ?27次下載

    STM32_CAN發(fā)送接收過濾原理

    STM32_CAN發(fā)送接收過濾原理介紹。
    發(fā)表于 07-22 17:04 ?9次下載

    CAN總線多對一程序

    CAN總線的多對一程序,通過多個STM32開發(fā)板驗證,最終實現(xiàn)多對一數(shù)據(jù)包的發(fā)送接收。
    發(fā)表于 08-09 15:08 ?20次下載

    基于CAN總線接口卡的軟件設(shè)計

    硬件部分主要包括主控制器、CAN總線控制器、CAN總線收發(fā)器以及與計算機(jī)的RS 232通信接口芯片等。系統(tǒng)的總體結(jié)構(gòu)如圖1所示。主控制器通過
    發(fā)表于 03-26 13:56 ?1597次閱讀

    英創(chuàng)信息技術(shù)WinCE主板CAN接口數(shù)據(jù)接收性能測試介紹

    在英創(chuàng)公司嵌入式主板產(chǎn)品,高端的335x主板系列及低端的ESM9287主板均可支持2路CAN總線標(biāo)準(zhǔn)接口。本文提供CE平臺的EM3352和EM9287的
    的頭像 發(fā)表于 02-04 11:39 ?1465次閱讀
    英創(chuàng)信息技術(shù)WinCE主板<b class='flag-5'>CAN</b><b class='flag-5'>接口</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>接收</b>性能測試介紹

    CAN總線發(fā)送or接收失敗問題

    CAN總線發(fā)送or接收失敗問題在調(diào)試遇到了這樣的問題:在用CAN
    發(fā)表于 12-04 16:21 ?22次下載
    <b class='flag-5'>CAN</b><b class='flag-5'>總線</b>的<b class='flag-5'>發(fā)送</b>or<b class='flag-5'>接收</b>失敗問題

    使用nanoFramework通過CAN總線發(fā)送接收數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《使用nanoFramework通過CAN總線發(fā)送接收數(shù)據(jù).zip》資料免費(fèi)下載
    發(fā)表于 01-05 10:44 ?0次下載
    使用nanoFramework通過<b class='flag-5'>CAN</b><b class='flag-5'>總線</b><b class='flag-5'>發(fā)送</b>和<b class='flag-5'>接收</b><b class='flag-5'>數(shù)據(jù)</b>

    STM32 CAN接收/發(fā)送錯誤寄存器如何清零?

    ,每一個節(jié)點(diǎn)都有一個CAN控制器,CAN控制器通過內(nèi)部寄存器和接口CAN總線連接。其中,在CAN
    的頭像 發(fā)表于 09-14 14:22 ?4745次閱讀