資源描述:
《CAN總線學(xué)習(xí)總結(jié)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、1、首先通讀手冊中關(guān)于CAN的文檔,必須精讀。STM32F10xxx參考手冊Rev7V3.pdf需要精讀的部分為RCC和CAN兩個章節(jié)。為什么需要精讀RCC呢?因為我們將學(xué)習(xí)CAN的波特率的設(shè)置,將要使用到RCC部分的設(shè)置,因此推薦大家先復(fù)習(xí)下這部分中的幾個時鐘。關(guān)于STM32的can總線簡單介紹bxCAN是基本擴展CAN(BasicExtendedCAN)的縮寫,它支持CAN協(xié)議2.0A和2.0B。它的設(shè)計目標(biāo)是,以最小的CPU負(fù)荷來高效處理大量收到的報文。它也支持報文發(fā)送的優(yōu)先級要求(優(yōu)先級特性可軟件配置)。對于安全緊要的應(yīng)用,bxCAN提供所有支持時間觸發(fā)通信模式所需的硬件功能。主要特點
2、·支持CAN協(xié)議2.0A和2.0B主動模式·波特率最高可達1兆位/秒·支持時間觸發(fā)通信功能發(fā)送·3個發(fā)送郵箱·發(fā)送報文的優(yōu)先級特性可軟件配置·記錄發(fā)送SOF時刻的時間戳接收·3級深度的2個接收FIFO·14個位寬可變的過濾器組-由整個CAN共享·標(biāo)識符列表·FIFO溢出處理方式可配置·記錄接收SOF時刻的時間戳可支持時間觸發(fā)通信模式·禁止自動重傳模式·16位自由運行定時器·定時器分辨率可配置·可在最后2個數(shù)據(jù)字節(jié)發(fā)送時間戳管理·中斷可屏蔽·郵箱占用單獨1塊地址空間,便于提高軟件效率2、STM32FVBT6的can的工作模式分為#defineCAN_Mode_Normal((u8)0x00)#d
3、efineCAN_Mode_LoopBack((u8)0x01)#defineCAN_Mode_Silent((u8)0x02)#defineCAN_Mode_Silent_LoopBack((u8)0x03)在此章我們的豆皮教程中我們將使用到CAN_Mode_LoopBack和CAN_Mode_Normal兩種模式。我們第一步做的就是使用運行在CAN_Mode_LoopBack下進行自測試。在參考手冊中CAN_Mode_LoopBack(環(huán)回模式)的定義如下:環(huán)回模式可用于自測試。為了避免外部的影響,在環(huán)回模式下CAN內(nèi)核忽略確認(rèn)錯誤(在數(shù)據(jù)/遠程幀的確認(rèn)位時刻,不檢測是否有顯性位)。在環(huán)回
4、模式下,bxCAN在內(nèi)部把Tx輸出回饋到Rx輸入上,而完全忽略CANRX引腳的實際狀態(tài)。發(fā)送的報文可以在CANTX引腳上檢測到。因此比較適合我們只有一塊豆皮的情況下面測試STM32的CAN部分BSP程序。3、STM32FVBT6中的can物理引腳腳位可以設(shè)置成三種:默認(rèn)模式,重定義地址1模式,重定義地址2模式。在我們的豆皮中我們使用的是重定義地址2模式,即CANRX,CANTX分別重定義到PD0,PD1引腳上面。因此我們軟件中第一步要進行重定義的操作:------------------------------------------------------------------------
5、//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//GPIO_InitStructure.GPIO_Mode=GPIO_
6、Mode_AF_PP;//GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIO_PinRemapConfig(GPIO_Remap1_CAN,ENABLE);-------------------------------------------------------------------------GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GP
7、IO_Init(GPIOD,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_Init(GPIOD,&GPIO_InitStructur