![嵌入式系統(tǒng)原理-學(xué)生參考技術(shù)stm32之_第1頁](http://file4.renrendoc.com/view/f224791eb3c4b56ea6520cfd18a797f9/f224791eb3c4b56ea6520cfd18a797f91.gif)
![嵌入式系統(tǒng)原理-學(xué)生參考技術(shù)stm32之_第2頁](http://file4.renrendoc.com/view/f224791eb3c4b56ea6520cfd18a797f9/f224791eb3c4b56ea6520cfd18a797f92.gif)
![嵌入式系統(tǒng)原理-學(xué)生參考技術(shù)stm32之_第3頁](http://file4.renrendoc.com/view/f224791eb3c4b56ea6520cfd18a797f9/f224791eb3c4b56ea6520cfd18a797f93.gif)
![嵌入式系統(tǒng)原理-學(xué)生參考技術(shù)stm32之_第4頁](http://file4.renrendoc.com/view/f224791eb3c4b56ea6520cfd18a797f9/f224791eb3c4b56ea6520cfd18a797f94.gif)
![嵌入式系統(tǒng)原理-學(xué)生參考技術(shù)stm32之_第5頁](http://file4.renrendoc.com/view/f224791eb3c4b56ea6520cfd18a797f9/f224791eb3c4b56ea6520cfd18a797f95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一篇STM32CAN---接收管理分類:ARMSTM322012-11-0710:492889閱讀評論(0)收藏前bxCANFIFOFIFO什么是FIFO輸出郵箱設(shè)消息從隊首存入,從隊尾取出)?FIFO有效報文的定CANEOFFIFO的狀號2狀態(tài), 3狀態(tài),溢出狀態(tài)。如下圖所示:用以標(biāo)志FIFO是否溢出。這兩個標(biāo)志處于FIFO寄存器(CAN_RFxR FIFO的狀態(tài)變化分由圖1可知,在初始化狀態(tài)時,F(xiàn)IFO是處于空狀態(tài)的,當(dāng)接收到一個報文時,這個報文到FIFO的郵箱中,此時,F(xiàn)IFO的狀態(tài)變成1狀態(tài),如果應(yīng)用程序取走這個消息,則FIFO恢復(fù)空現(xiàn)在假設(shè)FIFO處于1狀態(tài)即已接個報文,那么FIFO將變成2狀態(tài),以此類推,由于FIFO共有3個郵箱,只FIFOSTM32FIFOFIFOFIFOFIFO(CAN_MCR)RFLM0,F(xiàn)IFO1,F(xiàn)IFOCAN接收相關(guān)的STM32CANbxCANFIFO滿中斷:當(dāng)FIFO滿時,即了3個報文時產(chǎn)生的中斷FIFOFIFO(CAN_IER)如何配置,關(guān)于中斷相關(guān)內(nèi)容,關(guān)注后續(xù)中斷介紹博文FIFO的構(gòu)STM32FIFOFIFO(CAN_RIxRx=0..1),接收郵箱數(shù)據(jù)長度和時間戳寄存器(CAN_RDTxRx=0..1),接收FIFO郵箱低字節(jié)寄存器(CAN_RDLxRx=0..1),FIFO(CAN_RDHxRx=0..1)。標(biāo)識符寄存器CANID11標(biāo)準(zhǔn)id+18位擴(kuò)展id+IDE(擴(kuò)展標(biāo)識)+RTR(幀標(biāo)志)組成。STID[10:0]:擴(kuò)展標(biāo)識的高字節(jié)EXID[17:0]:擴(kuò)展標(biāo)識的低字節(jié)IDE:0:1:RTR:發(fā)送請0:1:幀數(shù)據(jù)長度和時間戳寄存器CAN_RDTxR位TIME[15:0]:SOF,16FMI[15:0]:0DLC[15:0]:該域表明接收數(shù)據(jù)幀的數(shù)據(jù)長度(0~8)。對于幀,數(shù)據(jù)長度DLC恒為0
FMI,序號保存到關(guān)聯(lián)的接收FIFO中,具體來說,應(yīng)該是保留到關(guān)聯(lián)的FIFO中的郵箱FMI接收FIFO數(shù)據(jù)寄存器(CAN_RDLxR)接收到的報文的數(shù)據(jù)用兩個寄存器,分別高節(jié)和低節(jié)。這 DATA3[7:0]3DATA2[7:0]2DATA1[7:0]1DATA0[7:0]0080接收FIFO數(shù)據(jù)寄存器(CAN_RDHxR)含義如6.3節(jié),這時是指接收報文的數(shù)據(jù)的高節(jié)位DATA7[7:0]位DATA6[7:0]6DATA5[7:0]5DATA4[7:0]4CAN的接收FIFO寄存器(CAN_RFxRx=0..1)介FIFO(每個郵箱由四個寄存器組成),接FIFOFIFOFIFOFIF(如釋放FIFO(CAN_RFxRx=0..1)。位RFOM0:FIFO01FIFOFIFO1FIFO1FIFO2FI件為了第2個報文,就需要釋放輸出郵箱才行。0FOVR0:FIFO0FIFO010FULL0:FIFO03FIFO01。0。位FMP0[1:0]:FIFO0FIFO02FIFO01FIFO0,F(xiàn)MP01。RFOM01,F(xiàn)MP01,0需要注意到的是,接收FIFO的溢出模式并非在此寄存器設(shè)置,而是CAN主控制器(CAN_MCRRFLM位)設(shè)置4.2節(jié)。估計是STM32并不想每個FIFO各自STM32固件庫的接收STM32 ReceivesacorrectCAN CANx:wherexcanbe1or2toselecttheCAN FIFONumber:ReceiveFIFOnumber,CAN_FIFO0or RxMessage:pointertoastructurereceiveframewhichcontainsCANId,CANDLC,CANdataandFMI@retvalvoidCAN_Receive(CAN_TypeDef*CANx,uint8_tFIFONumber,CanRxMsg*獲取當(dāng)前接收FIFO中的報文個數(shù) Returnsthenumberofpendingreceived CANx:wherexcanbe1or2toselecttheCAN FIFONumber:ReceiveFIFOnumber,CAN_FIFO0or@retvalNbMessage:whichisthenumberofpendinguint8_tCAN_MessagePending(CAN_TypeDef*CANx,uint8_t第二篇STM32CAN---發(fā)送管理分類:ARMSTM322012-11-0716:565241閱讀評論(7)收藏CAN發(fā)送郵STM32CANbxCANbxCAN中的多個報文又將是誰先發(fā)送誰后發(fā)送呢?有兩種模式:IDFIFOIDIDIDFIFOFIFO由上圖可知,發(fā)送郵箱共有四種狀態(tài),空狀態(tài),狀態(tài),預(yù)定發(fā)送狀(scheduled),CAN_TIxRTXRQ’1’,來請求發(fā)送。TXRQ不再有寫的權(quán)限。TXRQ位置1后,郵箱馬上進(jìn)入狀態(tài),并等待成為最高優(yōu)CAN_TSRRQCPTXOK1,來表明一次成功發(fā)送。TERR’1’。發(fā)送優(yōu)先先級的問題。此時,非空發(fā)送郵箱進(jìn)入發(fā)送仲裁,發(fā)送仲裁有兩種策略:IDFIFOID模式:當(dāng)有超過1個發(fā)送郵箱在時,發(fā)送順序由郵箱中報文的標(biāo)CANCAN_MCRTXFP0FIFO式CAN_MCR(CANTXFP’1’,F(xiàn)IFO。在該模式下,發(fā)送的優(yōu)先級由發(fā)送請取消ABRQ’1’,當(dāng)發(fā)送郵箱處于或預(yù)定狀態(tài)時:發(fā)送請求馬上就被中止了當(dāng)發(fā)送郵箱處于發(fā)送狀態(tài)時2CAN_TSR(CAN)TXOKTXOK Cancelsatransmit CANx:wherexcanbe1or2toselecttheCAN Mailbox:Mailbox@retvalvoidCAN_CancelTransmit(CAN_TypeDef*CANx,uint8_t自動重傳模CAN寄存器的NART位置’1’,來讓硬件工作在該模式(自動重傳)RQCP’1’,TXOK、ALSTTERR發(fā)送郵箱的組FIFOx=0..2),發(fā)送郵箱長度和時間戳寄存器(CAN_TDTxRx=0..2),發(fā)送郵箱低字節(jié)發(fā)送郵箱標(biāo)識CAN_TIxR)地址偏移量:復(fù)位值:0xXXXXXXXX,X=0注:120FIFOSTID[10:0]:擴(kuò)展標(biāo)識的高字節(jié)EXID[17:0]:擴(kuò)展標(biāo)識的低字節(jié)IDE:0:1:RTR:發(fā)送請0:1:幀TXRQ:1,發(fā)送郵箱數(shù)據(jù)長度和時間戳寄存器CAN_TDTxR)位TIME[15:0]:SOF,16位TGT:CANCAN_MCRTTCM10:1:TIME[15:0]8TIME[15:0]27,TIME[15:8]8CAN_TDHxR[31:16]的數(shù)據(jù)(DATA7[7:0])2,DLC8。DLC[15:0]:該域指定了數(shù)據(jù)報文的數(shù)據(jù)長度或者幀請求的數(shù)據(jù)長度。1個報文包含0到8個字DLC發(fā)送郵箱低字CAN_TDLxR)DATA3[7:0]3DATA2[7:0]2DATA1[7:0]1DATA0[7:0]0080發(fā)送郵箱高字CAN_TDHxR)圖5位DATA7[7:0]CAN_MCRTTCM1,TGT1,DATA7位DATA6[7:0]6DATA5[7:0]5DATA4[7:0]4CAN送狀態(tài)寄地址偏移量:復(fù)位值:0x1C00CAN(CAN_TSR)即負(fù)責(zé)此工作的。LOW2:221LOW1:111LOW0:001TME2:221TME1:111TME0:001位CODE[1:0]:1ABRQ2:212221位TERR2:221ALST2:221TXOK2:220:1:21RQCP2:221軟件對該位寫’1’0;0(CAN_TI2R1)。02(TXOK2,ALST2TERR2)0ABRQ1:111111位TERR1:111ALST1:111TXOK1:110:1:11RQCP1:111軟件對該位寫’1’0;0(CAN_TI1R1)。01(TXOK1,ALST1TERR1)0ABRQ0:010001TERR0:001ALST0:001TXOK0:000:1:01RQCP1:001軟件對該位寫’1’0;0(CAN_TI0R1)。00(TXOK0,ALST0TERR0)025~24STM32條發(fā)送報文該到哪個郵箱了。與CAN發(fā)送有關(guān)的固件發(fā)送 InitiatesandtransmitsaCANframe CANx:wherexcanbe1or2totoselecttheCAN DLCandCANdata.@retvalThenumberofthboxthatisusedfortransmissionCAN_TxStatus_NoMailBoxifthereisnoemptyuint8_tCAN_Transmit(CAN_TypeDef*CANx,CanTxMsg* ChecksthetransmissionstatusofaCAN CANx:wherexcanbe1or2toselecttheCAN TransmitMailbox:thenumberofthboxthatisusedfor@retvalCAN_TxStatus_OkiftheCANdrivertransmitstheCAN_TxStatus_Failedinanotheruint8_tCAN_TransmitStatus(CAN_TypeDef*CANx,uint8_t一個CanTxMsgTxMessage;inti;if(id_fmt==STD_ID)/CAN{}{
TxMessage.StdId=send_frame->id; //設(shè)置標(biāo)準(zhǔn)CANIDTxMessage.IDE= //設(shè)置IDE為標(biāo)準(zhǔn)CANTxMessage.StdId=(send_frame-id>>18)&0x7FF;CANIDIDTxMessage.ExtId=send_frame->id& CANIDTxMessage.IDE= IDECAN}TxMessage.RTR=CAN_RTR_DATA;//數(shù)據(jù)幀TxMessage.DLC=8; {TxMessage.Data[i]=send_frame-}第三篇STM32CAN---錯誤管理分類:ARMSTM322012-11-0816:362223閱讀評論(0)收藏幾個重要概ISO11898CANFaultconfinement(錯誤界定CANnodesshallbeabletodistinguishshortdisturbancesfrompermanentfailures.Defectivetransmittingnodesshallbeswitchedoff.Switchedoffmeansanodeislogicallydisconnectedfromthebus,sothatitcanneithersendnorreceiveanyframes.CAN節(jié)點(diǎn)可以區(qū)分常規(guī)錯誤和故障。有故障的發(fā)送節(jié)點(diǎn)將切換到離線狀態(tài)離線意味著在邏輯上與總線斷開,既不能發(fā)送也不能接收。Error-active(主動錯誤Anerror-activenodeshallnormallytakepartinbuscommunicationandsendanactiveerrorflagwhenanerrorhasbeendetected.Theactiveerrorflagshallconsistofsix(6)consecutivedominantbitsandshallviolatetheruleofbitstuffingandallfixedformatsappearinginaregularframe.Error-passive(錯誤Anerror-passivenodeshallnodanactiveerrorflag.Ittakespartinbuscommunication,butwhenanerrorhasbeendetectedapassiveerrorflagshallbesent.Thepassiveerrorflagshallconsistofsix(6)consecutiverecessivebits.Aftertransmission,anerror-passivenodeshallwaitsomeadditionaltimebeforeinitiatingafurthertransmission。到錯誤時發(fā)送的是錯誤標(biāo)志錯誤標(biāo)志由6個連續(xù)的隱性位組成。當(dāng)發(fā)錯誤狀態(tài)的節(jié)點(diǎn)在下一次再次發(fā)送時之前需要等待一些額外。Bus-off(離線Anodeshallbeinthebus-offstatewhenitisswitchedofffromthebusduetoarequestofFCE.Inthebus-offstate,anodeshallneithersendnorreceiveanyframes.Anodeshallstarttherecoveryfrombus-offstateonlyuponauserrequest.ISO11898中錯誤界定的規(guī)描主動錯誤狀態(tài)(Error-錯誤狀態(tài)(Error-離線狀態(tài)(Bus-錯誤計1.外,即當(dāng)檢測到發(fā)送一主動錯誤標(biāo)志或者重載標(biāo)志時出現(xiàn)一位錯誤時除外。8,這時有兩種情況除外:1:當(dāng)這個發(fā)送節(jié)點(diǎn)處于主動錯誤狀態(tài)下,且檢測到由于ACK位而造成的ACK錯誤,但是在發(fā)送時未檢測到錯誤標(biāo)志;2:當(dāng)發(fā)送8.8.,任何節(jié)點(diǎn)在發(fā)送主動錯誤標(biāo)志錯誤標(biāo)志,或重載標(biāo)志時都應(yīng)都忍受714個顯示位,或者錯誤標(biāo)志后緊跟,888,1,1127,則1;00;127,119~127主動錯誤狀態(tài)和錯誤狀態(tài)之間的轉(zhuǎn)當(dāng)發(fā)送錯誤計數(shù)器或者接收錯誤計數(shù)器的值大于127時該節(jié)點(diǎn)變成錯誤狀當(dāng)節(jié)點(diǎn)從主動錯誤狀態(tài)變?yōu)殄e誤狀態(tài)時,節(jié)點(diǎn)將發(fā)送一主動錯誤標(biāo)志當(dāng)錯誤節(jié)點(diǎn)的發(fā)送錯誤計數(shù)器和接收錯誤計數(shù)器的值都小于且等于127時,離線管25512811STM3212811STM32bxCAN實(shí)bxCAN錯誤狀態(tài)出錯管CAN(CAN_ESRTEC(CAN_ESRRECCANCAN_ESRCAN_IERERRIE離線恢TEC255,bxCANCAN_ESRBOFF置’1’。在離線狀態(tài)下,bxCANCAN_MCRABOM,bxCANbxCAN標(biāo)準(zhǔn)所描述的恢復(fù)過程(CANRX12811ABOM’1’,bxCAN,bxCANCANRX復(fù)過程。為了完成恢復(fù)過程,bxCANCAN誤狀態(tài)寄地址偏移量:復(fù)位值:0x0000位REC[7:0]:CANCAN18;1,120-當(dāng)該計數(shù)127時。當(dāng)該計數(shù)器的值超過127時,CAN進(jìn)入錯誤狀態(tài)。位TEC[7:0]:CAN位0LEC[2:0]:7,軟件可以設(shè)置該值,從而可以檢測代碼的更新。000:沒有錯誤;001:010:格式(Form)011:確認(rèn)(ACK)100:101:110:CRC111:0BOFF:離線(BusOff)EPVF:錯誤(ErrorPassive)標(biāo)當(dāng)出錯次數(shù)達(dá)到錯誤的閾值時,硬件對該位置1。EWGF:1。第四篇STM32CAN---TTCAN淺分類:ARMSTM322012-11-0918:331731閱讀評論(0)收藏前CAN采用事件觸發(fā)消息傳輸機(jī)制,CSMA/CD+AMP(Carrier-SenseMultipleAccesswithCollisionDetectionandArbitrationonMessagePriorities,載波偵聽、多路、檢測、優(yōu)先級仲裁)介質(zhì)控制機(jī)制,即多個消息同時發(fā)送時,按照消息標(biāo)識符的優(yōu)先級順序,低優(yōu)先級消息自動退出,高優(yōu)先級消息繼續(xù)發(fā)送這種介質(zhì)方式提高了CAN中,低優(yōu)先級消息經(jīng)常由于總線而被迫退出發(fā)送,導(dǎo)致低優(yōu)先級消息傳輸時延長,且傳輸時延不可預(yù)測,因此,CAN不適合實(shí)時性和可靠性要求特別高或有安全性要求的場合,如鐘的X-by-wire(線控技術(shù))。為此國外有自2000年起CANTTCAN。2004TTCANISO11898-4什么是TTCAN是CAN的協(xié)議,其數(shù)據(jù)鏈路層需要幀起始時刻信息。TTCANCAN節(jié)點(diǎn)的分時同步通信網(wǎng)各節(jié)點(diǎn)取得同步后,消息只能根據(jù)調(diào)度表在規(guī)定的時間隙傳輸,避免了消息傳輸?shù)?、仲?消息傳輸時延短,且可預(yù)知。ISO11898-4。STM32中的TTCAN實(shí)開啟TTCAN模的。CAN_MCR地址偏移量:復(fù)位值:0x0001位0RESET:bxCAN0:1:bxCANbxCAN(FMPCAN_MCR0。位0TTCM:0:時間觸發(fā)通信模式1:ABOM:自動離線(Bus-Off)CAN0:CAN_MCRINRQ10111:12811AWUM:CAN0:CAN_MCRSLEEP1:CANCAN_MSRSLAK0。NART:報文自動重0:CAN,CAN1:CAN1RFLM:FIFO1:FIFOFIFOTXFP:FIFO0:1:SLEEP:1CANCAN0CANAWUMCANRxSOF0。1-CANINRQ:0CANCAN位后,CANCAN_MSR0。1CANCANCAN_MSRINAK1CAN_MCRTTCM1TTCANCANTTCANSTM32F20xTTCAN EnablesordisablestheCTriggerOperationcommunicationmode. DLCmustbeprogrammedas8inorderTimeStamp(2bytes)sentovertheCAN CANx:wherexcanbe1or2totoselecttheCAN NewState:Modenewstate.Thisparametercanbe:ENABLEWhenenabled,Timestamp(TIME[15:0])valueis sentinthelasttwodatabytesofthe8-bytemessage:TIME[7:0]indatabyte6andTIME[15:8]indatabyte@retval ModeCmd(CAN_TypeDef*CANx,FunctionalState或者在初始化CAN_Init時,將CAN_InitTypeDef的成員CAN_TTCM使能在TTCAN模式下,CAN硬件的定時器被激活,并且被用于產(chǎn)生發(fā)送與接收郵箱的)時間戳,分別在CAN_RDTxR/CAN_TDTxR寄存器中。定時器在每個CAN位時間累加。定時器在接收和發(fā)送的幀起始位的采樣點(diǎn)位置被采樣,并TTCAN,TIME[15:0]SOFTGT1TIME[15:0]將保存了在發(fā)送該報文16CAN_TDHxR[31:16]的數(shù)據(jù)(DATA6[7:0]DATA7[7:0])。為了把2DLC8。CAN_TypeDefsTxMailBox[3]RDTRSOF第五篇STM32CAN---配置波特分類:ARMSTM322012-11-1022:402868閱讀評論(0)收藏1時間特STM32CAN串行的CAN總線,并且通過跟幀起始位的邊沿進(jìn)行同步,及通過跟后面的邊沿進(jìn)3時間單元(1xtCAN)。1(BS1):CANPROP_SEGPHASE_SEG11161814bxCAN11(BS1)而不是在同步段(SYNC_SEG)BS1SJW2(BS2)SYNC_SEGBS2SJWbxCANCANISO11898CAN波特率=APB總線頻率/BRP分頻器2CAN特率有關(guān)的寄存CAN地址偏移量:復(fù)位值:0x0123注:當(dāng)CAN處于初始化模式時,該寄存器只能由軟 SILM:0:正常狀態(tài);1:LBKM:0:環(huán)回模式;1:0SJW[1:0]:CANtRJW=tCANx(SJW[1:0]+10TS2[2:0]:2tBS2=tCANx(TS2[2:0]+1TS1[3:0]:1tBS1=tCANx(TS1[3:0]+0BRP[9:0]:該位域定義了時間單元(tq)tq=(BRP[9:0]+1)x3何在代碼中配置波CAN//CAN1registerinit//CANcellinitCAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=ENABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1CAN_BS1_6tq;//tBS1=6tCANCAN_InitStructure.CAN_BS2CAN_BS2_8tq;//tBS2=8tCANCAN_InitStructure.CAN_Prescaler=4;//ABP4//CANbps=CANbps=30000000/4/(8+6+1))=500k//總體配置方向:Tseg1>=Tseg2 Tseg2>=tq;Tseg2>=2TSJWif(CAN_Init(CAN1,&CAN_InitStructure)==CANINITFAILED){return}CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);/FMP0總體配置保持tBS1>=tBS2tBS2>=1個CAN時鐘周 第六篇STM32CAN---中斷管理前bxCAN占用4個的中斷向量。通過設(shè)置CAN中斷允許寄存器(CAN_IER),每從圖1可以看出最右邊共四個中斷中斷是可以通過CAN_IER來或允許的CAN斷允許寄地址偏移量:復(fù)位值:0x0000SLKIE:0:SLAKI11:SLAKI1WKUIE:0:WKUI11:WKUI1ERRIE:0:當(dāng)CAN_ESR寄存器有錯 時,沒有中斷產(chǎn)生1:當(dāng)CAN_ESR寄存器有錯 時,產(chǎn)生中斷0LECIE:0:LEC[2:0]0ERRI1:LEC[2:0]0ERRI1BOFIE:0:BOFF1ERRI1:BOFF1ERRI1EPVIE:ErrorPassiveInterrupt0:EPVF1ERRI1:EPVF1ERRI1EWGIE:0:EWGF1ERRI1:EWGF1ERRI1FOVIE1:FIFO10:FIFO1FOVR11:FIFO1FOVR1FFIE1:FIFO10:FIFO1FULL11:FIFO1FULL1FMPIE1:FIFO1消息中斷允0:FIFO1FMP[1:0]01:FIFO1FMP[1:0]0FOVIE0:FIFO00:FIFO0FOVR11:FIFO0FOVR1FFIE0:FIFO00:FIFO0FULL11:FIFO0FULL1FMPIE0:FIFO0消息中斷允0:FIFO0FMP[1:0]01:FIFO0FMP[1:0]0TMEIE:0:RQCPx11:RQCPx121.5bxCAN通過上述寄存器,就可以配置允許或哪些中斷固件庫中如何用代碼配置中startup_stm32f2xx.s以上為四個中斷例程,對應(yīng)著圖1右邊的四個中斷輸出。如何配置中斷?使用CAN_ITConfig函數(shù)開啟或中斷,如下:CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);/FMP0CAN1CAN_GetITStatus第七篇STM32之CAN---工作/測試模式淺分類:ARMSTM322012-11-1100:102533閱讀評論(0)收藏bxCAN工作模bxCAN有3個主要的工作模式:初始化模式、正常模式和睡眠模式在硬件復(fù)位后,bxCANCANTXCAN_MCRINRQSLEEP可以請求bxCAN進(jìn)入初始化或睡眠模式。一旦進(jìn)入了初始化或睡眠模式,bxCAN就對CAN_MSR寄存器的INAK或SLAK位置’1’來進(jìn)行確認(rèn),同時上拉電阻當(dāng)INAK和SLAK位都為’0’時,bxCAN就處于正常模式。在進(jìn)入正常模式前,bxCAN必須跟CAN總線取得同步;為取得同步,bxCAN要等待CAN總線達(dá)CANRX11軟件初始化應(yīng)該在硬件處于初始化模式時進(jìn)行。設(shè)置CAN_MCR寄存器的INRQ位為’1’,請求bxCAN進(jìn)入初始化模式,然后等待硬件對CAN_MSR寄存器INAK’1’來進(jìn)行確認(rèn)。清除CAN_MCR寄存器的INRQ位為’0’,請求bxCAN退出初始化模式,CAN_MSRINAK’0’就確認(rèn)了初始化模式的退出。當(dāng)bxCAN處于初始化模式時,報文的接收和發(fā)送,并且CANTX引腳bxCAN(CAN_BTR)和控制(CAN_MCR)在對bxCAN的過濾器組(模式、位寬、FIFO關(guān)聯(lián)、激活和過濾器值)進(jìn)行初始化前,軟件要對CAN_FMR寄存器的FINIT位設(shè)置’1’。對過濾器的初始化可以在注:當(dāng)FINIT=1文的接收被??梢韵葘^濾器激活位清’0’(在CAN_FA1R),該讓它處于非激活狀態(tài)(FACT’0’狀態(tài))。正常模0CAN_MSRINAK’1’CANCANRX11后,bxCANFACT0)。而過濾器的位寬和模式的設(shè)置,則必須在初始化模式睡眠模式bxCANCAN_MCRSLEEP置’1’,來請求進(jìn)入這一模式。在該模式下,bxCANbxCANCAN_MCRINRQ’1’并且同時SLEEP’0’,才能進(jìn)入初始化模式。CANSLEEP’0’bxCANCAN_MCRAWUM’0’,SLEEP’0’才能退出睡眠狀態(tài)。(CAN_IERWKUIE’1’),那么一旦檢測CANbxCAN。位清’0’測試通過對CAN_BTR寄存器的SILM和/或LBKM置’1’,來選擇一種測試模式。只能在初始化模式下修改這2在選擇了一種測試模式后軟件需要對CAN_MCRINRQ’0’,來真正進(jìn)入測試模式。靜默模CAN_BTRSILM’1’,在靜默模式下bxCAN可以正常地接收數(shù)據(jù)幀和幀但只能發(fā)出隱性位bxCAN那么這樣的顯性位在被接回來從而可以被CAN內(nèi)核檢測到同時CANCAN總線上。環(huán)回模通過對CAN_BTR寄存器的LBKM位置’1’擇環(huán)回模式在環(huán)回模式下bxCAN環(huán)回模式可用于自測試。為了避免外部的影響,在環(huán)回模式下CAN內(nèi)核忽略確認(rèn)bxCAN在把Tx輸出回饋到Rx輸入上,而完全忽略CANRX引腳的實(shí)際狀態(tài)。發(fā)送的CANTX環(huán)回靜默模bxCAN,但卻不會影響CANTXCANRXCANCANRXCANCANTX圖3如何設(shè)置工作 SelectstheCANOperation CAN_OperatingMode:CANOperatingThisparametercanbeoneof@refCAN_OperatingMode_TypeDef@retvalstatusoftherequestedmodewhichcan-CAN_ModeStatus_Failed: CANfailedenteringthespecific-CAN_ModeStatus_Success:CANSucceedenteringthespecificuint8_tCAN_OperatingModeReqAN_TypeDef*CANx,uint8_tCAN_operating_mode@defgroup#define ((uint8_t)0x00)Initializationmode#defineCAN_OperatingMode_Normal ((uint8_t)0x01)/*!<Normalmode*/#defineCAN_OperatingMode_Sleep ((uint8_t)0x02)/*!<sleepmode*/如何設(shè)置測試/**@defgroup*#define /*!<normal#defineCAN_Mode_LoopBack /*!<loopbackmode*/#define /*!<silent#defineCAN_Mode_Silent_LoopBack /*!<loopbackcombinedwithsilentmode*/CANCAN_InitCAN_TypeDefCANCAN_InitStructure.CAN_ModeCAN_Mode_Normal;//正常模式,或者設(shè)置為測試if(CAN_Init(CAN1,&CAN_InitStructure)=={}控制和狀態(tài)寄CAN存器地址偏移量:復(fù)位值:0x0001位0RESET:bxCAN0:1:bxCANbxCAN(FMPCAN_MCR0。位0TTCM:0:時間觸發(fā)通信模式1:注:要想了解關(guān)于時間觸發(fā)通信模式的信息,請參考21.4.2:時間觸發(fā)通信模式ABOM:自動離線(Bus-Off)CAN0:CAN_MCRINRQ10111:12811AWUM:CAN0:CAN_MCRSLEEP1:CANCAN_MSRSLAK0。NART:報文自動重0:CAN,CAN1:CAN1RFLM:FIFO0:FIFOFIFO1:FIFOFIFOTXFP:FIFO0:1:SLEEP:1CANCAN0CANAWUMCANRxSOF0。1-CANINRQ:0CANCAN01CANCANCANCAN_MSRINAK1CAN存器地址偏移量:復(fù)位值:0x0000位RX:CANCAN(CAN_RX)SAMP:CANRXM:該位為1表示CAN當(dāng)前為TXM:1CAN0SLAKI:SLKIE=1,CAN1,緊接著相應(yīng)的中斷被觸發(fā)。軟件SLAK00。SLKIE=0,SLAKWKUI:喚醒中斷CAN(SOF)1;CAN_IWKUIE1,則相應(yīng)的中斷被觸發(fā)。0ERRI:CAN_ESR1,CAN_IER1;CAN_IERERRIE10SLAK:CAN1CAN_MCRSLEEP1)CAN0(需CANCANRX11CAN_MCRSLEEP0CAN_MCRAWUMINAK:CAN_MCRINRQ1)。CANRX11第八篇STM32CAN---CANID器分ARMSTM322012-11-0516:016427(35收藏前發(fā)送者以廣播的形式把報文發(fā)送給所有的接收者。節(jié)點(diǎn)在接收報文時,根據(jù)標(biāo)識符(CANID)的值決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟為滿足這一需求,bxCAN14個位寬可變的、可配置的過濾器組(13~0)CPU開銷,否則就必須由軟件過濾從而占用一定的CPUx232位寄存器,CAN_FxR0CAN_FxR1組成。STM32的bxCAN幾個重要的概過濾器STM3214CAN接收過濾問題,每個過濾器組包含兩個32位寄存器CAN_FxR0和CAN_FxR1組成,在設(shè)置為位模式下,其中一個作為標(biāo)識符寄存器,另一個作為碼寄存器。過濾器組中的每個過濾器,(叫做過濾器號)從0置,當(dāng)全部配置為位寬為16,且為標(biāo)識符列表模式時,最大為14*4-1=55)。過濾器的過濾模位模識符加一個位的方式,而是使用2個標(biāo)識符寄存器。接收報文標(biāo)識符的每一位都必須過濾器的位過濾器組的過濾模式和CAN_FMR寄存器(CAN過濾器主控寄存器)配置。但是不是什么時候都可以直接配置,在配置一個過濾器組前,必須通過清除CAN_FAR(CAN過濾器激活寄存器)FACT位,把它設(shè)置為禁用狀態(tài)。然后才能設(shè)置或設(shè)置過濾通過設(shè)置CAN_FS1R(CAN過濾器位寬寄存器)FSCx位,可以配置一個通過CAN_FM1R(CAN過濾器模式寄存器)的FBMx位,可以配置對應(yīng)的標(biāo)識符寄存器的標(biāo)識符列表模式或位模式。(見后續(xù)3.2節(jié)一旦收到的報文被存入FIFO,就可被應(yīng)用程序。通常情況下,報文中的數(shù)辨別不同的數(shù)據(jù)。bxCAN提供了過濾器匹配序號,以簡化這一辨別過程。收到的報有與它相關(guān)聯(lián)的過濾器匹配序號。對于標(biāo)識符列表模式下的過濾器(非方式的過濾器),軟件不需要直接跟標(biāo)識符對于位模式下的過濾器,軟件只須對需要的那些位(必須匹配的位)進(jìn)行比在給過濾器時,并不考慮過濾器組是否為激活狀態(tài)。另外,每個FIFO各自對其關(guān)聯(lián)的過濾器優(yōu)先級規(guī)相比較;如果匹配上,報文就被存放到相關(guān)聯(lián)的FIFO中,并且所匹配的過濾器的序號(這4)被存入過濾器匹配序號中。如同例子中所顯示,報文標(biāo)識符跟#4標(biāo)識符匹配,因FMI4FIFO。與過濾器相關(guān)的寄存CAN地址偏移量復(fù)位值0x2A1CFINIT:0:1:CAN地址偏移量復(fù)位值0x0000FBMx:x0:過濾器組x的2個32位寄存器工作在標(biāo)識符位模式1:x232CAN地址偏移量復(fù)位值0x0000FSCx:x(13~0)的位寬。0216132CAN過濾器FIFO關(guān)聯(lián)寄地址偏移量復(fù)位值0x0000FFAx:CAN地址偏移量復(fù)位值0x0000位FACTx:1FACTx0CAN_FMRFINIT位設(shè)x(CAN_FxR[0:1])。CANx(CAN_FiRx14組過濾器:i=0..13232位的寄存器,CAN_FiR[2:1]組成。CAN_FaxR(CAN過濾器激活寄存器FACTx位清’0’CAN_FMR寄存器(CAN過濾器主控寄存器)的FINIT位為’1’時,才能修改相應(yīng)的過濾器寄存器。FB[31:0]:FB[31:0]:0:1:0:于過濾器的,功能描述和寄存器的關(guān)聯(lián),請參見2節(jié)標(biāo)識符過濾。代碼實(shí)CANID值的結(jié)構(gòu)分IDIDCANIDID與擴(kuò)展IDID0x1800f001IDID?(在基CANID格式下不存在這個問題)BaseCANID0x1800f001用二進(jìn)制表示為:0b0001100000000000111100000001,用括號分別區(qū)別為:0b000[11000000000][001111000000000001]位寬為32位的模32位的。最下邊顯示的是與CANID各位定位的關(guān)系。由4.1的知識很快可以發(fā)現(xiàn),因此,我們初步得出這樣的推論:對于一個擴(kuò)展CANID,不能單純地將它看到的一個數(shù),CANID所表表示接收到的CANID對應(yīng)的位必須對寄存器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年企業(yè)機(jī)器質(zhì)押借款合同
- 2025年勞動解除合同標(biāo)準(zhǔn)條款
- 2025年抗瘧藥項(xiàng)目申請報告模范
- 2025年貨車租賃與運(yùn)輸服務(wù)合同樣本
- 2025年國際貨物買賣合同與慣例
- 2025年專業(yè)清潔人員派遣協(xié)議
- 2025年二手車購買合同范本
- 2025年三板市場股權(quán)買賣協(xié)議
- 2025年伙伴開設(shè)教育機(jī)構(gòu)合作協(xié)議書模板
- 2025年繼電器研發(fā)策劃技術(shù)協(xié)議書范本
- JCT796-2013 回彈儀評定燒結(jié)普通磚強(qiáng)度等級的方法
- 懸挑腳手架搭設(shè)要求
- 幼兒園衛(wèi)生保健十三種表格
- 勞動用工備案表
- 業(yè)務(wù)提成獎勵方案
- 四年級語文上冊第一單元單元整體教學(xué)設(shè)計
- 玩具安全標(biāo)準(zhǔn)測試培訓(xùn)-(SGS)課件
- 員工工資條模板
- 病例報告表格模板CRF
- 火力發(fā)電廠節(jié)能管理制度實(shí)施細(xì)則
- 《極致挑逗:雙人共撫全圖解120招》讀書筆記模板
評論
0/150
提交評論