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