嵌入式系統(tǒng)原理-學生參考技術stm32之_第1頁
嵌入式系統(tǒng)原理-學生參考技術stm32之_第2頁
嵌入式系統(tǒng)原理-學生參考技術stm32之_第3頁
嵌入式系統(tǒng)原理-學生參考技術stm32之_第4頁
嵌入式系統(tǒng)原理-學生參考技術stm32之_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第一篇STM32CAN---接收管理分類:ARMSTM322012-11-0710:492889閱讀評論(0)收藏前bxCANFIFOFIFO什么是FIFO輸出郵箱設消息從隊首存入,從隊尾取出)?FIFO有效報文的定CANEOFFIFO的狀號2狀態(tài), 3狀態(tài),溢出狀態(tài)。如下圖所示:用以標志FIFO是否溢出。這兩個標志處于FIFO寄存器(CAN_RFxR FIFO的狀態(tài)變化分由圖1可知,在初始化狀態(tài)時,F(xiàn)IFO是處于空狀態(tài)的,當接收到一個報文時,這個報文到FIFO的郵箱中,此時,F(xiàn)IFO的狀態(tài)變成1狀態(tài),如果應用程序取走這個消息,則FIFO恢復空現(xiàn)在假設FIFO處于1狀態(tài)即已接個報文,那么FIFO將變成2狀態(tài),以此類推,由于FIFO共有3個郵箱,只FIFOSTM32FIFOFIFOFIFOFIFO(CAN_MCR)RFLM0,F(xiàn)IFO1,F(xiàn)IFOCAN接收相關的STM32CANbxCANFIFO滿中斷:當FIFO滿時,即了3個報文時產(chǎn)生的中斷FIFOFIFO(CAN_IER)如何配置,關于中斷相關內(nèi)容,關注后續(xù)中斷介紹博文FIFO的構STM32FIFOFIFO(CAN_RIxRx=0..1),接收郵箱數(shù)據(jù)長度和時間戳寄存器(CAN_RDTxRx=0..1),接收FIFO郵箱低字節(jié)寄存器(CAN_RDLxRx=0..1),FIFO(CAN_RDHxRx=0..1)。標識符寄存器CANID11標準id+18位擴展id+IDE(擴展標識)+RTR(幀標志)組成。STID[10:0]:擴展標識的高字節(jié)EXID[17:0]:擴展標識的低字節(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,序號保存到關聯(lián)的接收FIFO中,具體來說,應該是保留到關聯(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的溢出模式并非在此寄存器設置,而是CAN主控制器(CAN_MCRRFLM位)設置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*獲取當前接收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),預定發(fā)送狀(scheduled),CAN_TIxRTXRQ’1’,來請求發(fā)送。TXRQ不再有寫的權限。TXRQ位置1后,郵箱馬上進入狀態(tài),并等待成為最高優(yōu)CAN_TSRRQCPTXOK1,來表明一次成功發(fā)送。TERR’1’。發(fā)送優(yōu)先先級的問題。此時,非空發(fā)送郵箱進入發(fā)送仲裁,發(fā)送仲裁有兩種策略:IDFIFOID模式:當有超過1個發(fā)送郵箱在時,發(fā)送順序由郵箱中報文的標CANCAN_MCRTXFP0FIFO式CAN_MCR(CANTXFP’1’,F(xiàn)IFO。在該模式下,發(fā)送的優(yōu)先級由發(fā)送請取消ABRQ’1’,當發(fā)送郵箱處于或預定狀態(tài)時:發(fā)送請求馬上就被中止了當發(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ā)送郵箱標識CAN_TIxR)地址偏移量:復位值:0xXXXXXXXX,X=0注:120FIFOSTID[10:0]:擴展標識的高字節(jié)EXID[17:0]:擴展標識的低字節(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)寄地址偏移量:復位值:0x1C00CAN(CAN_TSR)即負責此工作的。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ā)送有關的固件發(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; //設置標準CANIDTxMessage.IDE= //設置IDE為標準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é)點可以區(qū)分常規(guī)錯誤和故障。有故障的發(fā)送節(jié)點將切換到離線狀態(tài)離線意味著在邏輯上與總線斷開,既不能發(fā)送也不能接收。Error-active(主動錯誤Anerror-activenodeshallnormallytakepartinbuscommunicationandsendanactiveerrorflagwhenanerrorhasbeendetected.Theactiveerrorflagshallconsistofsix(6)consecutivedominantbitsandshallviolatetheruleofbitstuffingandallfixedformatsappearinginaregularframe.Error-passive(錯誤Anerror-passivenodeshallnodanactiveerrorflag.Ittakespartinbuscommunication,butwhenanerrorhasbeendetectedapassiveerrorflagshallbesent.Thepassiveerrorflagshallconsistofsix(6)consecutiverecessivebits.Aftertransmission,anerror-passivenodeshallwaitsomeadditionaltimebeforeinitiatingafurthertransmission。到錯誤時發(fā)送的是錯誤標志錯誤標志由6個連續(xù)的隱性位組成。當發(fā)錯誤狀態(tài)的節(jié)點在下一次再次發(fā)送時之前需要等待一些額外。Bus-off(離線Anodeshallbeinthebus-offstatewhenitisswitchedofffromthebusduetoarequestofFCE.Inthebus-offstate,anodeshallneithersendnorreceiveanyframes.Anodeshallstarttherecoveryfrombus-offstateonlyuponauserrequest.ISO11898中錯誤界定的規(guī)描主動錯誤狀態(tài)(Error-錯誤狀態(tài)(Error-離線狀態(tài)(Bus-錯誤計1.外,即當檢測到發(fā)送一主動錯誤標志或者重載標志時出現(xiàn)一位錯誤時除外。8,這時有兩種情況除外:1:當這個發(fā)送節(jié)點處于主動錯誤狀態(tài)下,且檢測到由于ACK位而造成的ACK錯誤,但是在發(fā)送時未檢測到錯誤標志;2:當發(fā)送8.8.,任何節(jié)點在發(fā)送主動錯誤標志錯誤標志,或重載標志時都應都忍受714個顯示位,或者錯誤標志后緊跟,888,1,1127,則1;00;127,119~127主動錯誤狀態(tài)和錯誤狀態(tài)之間的轉當發(fā)送錯誤計數(shù)器或者接收錯誤計數(shù)器的值大于127時該節(jié)點變成錯誤狀當節(jié)點從主動錯誤狀態(tài)變?yōu)殄e誤狀態(tài)時,節(jié)點將發(fā)送一主動錯誤標志當錯誤節(jié)點的發(fā)送錯誤計數(shù)器和接收錯誤計數(shù)器的值都小于且等于127時,離線管25512811STM3212811STM32bxCAN實bxCAN錯誤狀態(tài)出錯管CAN(CAN_ESRTEC(CAN_ESRRECCANCAN_ESRCAN_IERERRIE離線恢TEC255,bxCANCAN_ESRBOFF置’1’。在離線狀態(tài)下,bxCANCAN_MCRABOM,bxCANbxCAN標準所描述的恢復過程(CANRX12811ABOM’1’,bxCAN,bxCANCANRX復過程。為了完成恢復過程,bxCANCAN誤狀態(tài)寄地址偏移量:復位值:0x0000位REC[7:0]:CANCAN18;1,120-當該計數(shù)127時。當該計數(shù)器的值超過127時,CAN進入錯誤狀態(tài)。位TEC[7:0]:CAN位0LEC[2:0]:7,軟件可以設置該值,從而可以檢測代碼的更新。000:沒有錯誤;001:010:格式(Form)011:確認(ACK)100:101:110:CRC111:0BOFF:離線(BusOff)EPVF:錯誤(ErrorPassive)標當出錯次數(shù)達到錯誤的閾值時,硬件對該位置1。EWGF:1。第四篇STM32CAN---TTCAN淺分類:ARMSTM322012-11-0918:331731閱讀評論(0)收藏前CAN采用事件觸發(fā)消息傳輸機制,CSMA/CD+AMP(Carrier-SenseMultipleAccesswithCollisionDetectionandArbitrationonMessagePriorities,載波偵聽、多路、檢測、優(yōu)先級仲裁)介質(zhì)控制機制,即多個消息同時發(fā)送時,按照消息標識符的優(yōu)先級順序,低優(yōu)先級消息自動退出,高優(yōu)先級消息繼續(xù)發(fā)送這種介質(zhì)方式提高了CAN中,低優(yōu)先級消息經(jīng)常由于總線而被迫退出發(fā)送,導致低優(yōu)先級消息傳輸時延長,且傳輸時延不可預測,因此,CAN不適合實時性和可靠性要求特別高或有安全性要求的場合,如鐘的X-by-wire(線控技術)。為此國外有自2000年起CANTTCAN。2004TTCANISO11898-4什么是TTCAN是CAN的協(xié)議,其數(shù)據(jù)鏈路層需要幀起始時刻信息。TTCANCAN節(jié)點的分時同步通信網(wǎng)各節(jié)點取得同步后,消息只能根據(jù)調(diào)度表在規(guī)定的時間隙傳輸,避免了消息傳輸?shù)摹⒅俨?消息傳輸時延短,且可預知。ISO11898-4。STM32中的TTCAN實開啟TTCAN模的。CAN_MCR地址偏移量:復位值: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ā)送的幀起始位的采樣點位置被采樣,并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總線,并且通過跟幀起始位的邊沿進行同步,及通過跟后面的邊沿進3時間單元(1xtCAN)。1(BS1):CANPROP_SEGPHASE_SEG11161814bxCAN11(BS1)而不是在同步段(SYNC_SEG)BS1SJW2(BS2)SYNC_SEGBS2SJWbxCANCANISO11898CAN波特率=APB總線頻率/BRP分頻器2CAN特率有關的寄存CAN地址偏移量:復位值:0x0123注:當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個的中斷向量。通過設置CAN中斷允許寄存器(CAN_IER),每從圖1可以看出最右邊共四個中斷中斷是可以通過CAN_IER來或允許的CAN斷允許寄地址偏移量:復位值:0x0000SLKIE:0:SLAKI11:SLAKI1WKUIE:0:WKUI11:WKUI1ERRIE:0:當CAN_ESR寄存器有錯 時,沒有中斷產(chǎn)生1:當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以上為四個中斷例程,對應著圖1右邊的四個中斷輸出。如何配置中斷?使用CAN_ITConfig函數(shù)開啟或中斷,如下:CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);/FMP0CAN1CAN_GetITStatus第七篇STM32之CAN---工作/測試模式淺分類:ARMSTM322012-11-1100:102533閱讀評論(0)收藏bxCAN工作模bxCAN有3個主要的工作模式:初始化模式、正常模式和睡眠模式在硬件復位后,bxCANCANTXCAN_MCRINRQSLEEP可以請求bxCAN進入初始化或睡眠模式。一旦進入了初始化或睡眠模式,bxCAN就對CAN_MSR寄存器的INAK或SLAK位置’1’來進行確認,同時上拉電阻當INAK和SLAK位都為’0’時,bxCAN就處于正常模式。在進入正常模式前,bxCAN必須跟CAN總線取得同步;為取得同步,bxCAN要等待CAN總線達CANRX11軟件初始化應該在硬件處于初始化模式時進行。設置CAN_MCR寄存器的INRQ位為’1’,請求bxCAN進入初始化模式,然后等待硬件對CAN_MSR寄存器INAK’1’來進行確認。清除CAN_MCR寄存器的INRQ位為’0’,請求bxCAN退出初始化模式,CAN_MSRINAK’0’就確認了初始化模式的退出。當bxCAN處于初始化模式時,報文的接收和發(fā)送,并且CANTX引腳bxCAN(CAN_BTR)和控制(CAN_MCR)在對bxCAN的過濾器組(模式、位寬、FIFO關聯(lián)、激活和過濾器值)進行初始化前,軟件要對CAN_FMR寄存器的FINIT位設置’1’。對過濾器的初始化可以在注:當FINIT=1文的接收被??梢韵葘^濾器激活位清’0’(在CAN_FA1R),該讓它處于非激活狀態(tài)(FACT’0’狀態(tài))。正常模0CAN_MSRINAK’1’CANCANRX11后,bxCANFACT0)。而過濾器的位寬和模式的設置,則必須在初始化模式睡眠模式bxCANCAN_MCRSLEEP置’1’,來請求進入這一模式。在該模式下,bxCANbxCANCAN_MCRINRQ’1’并且同時SLEEP’0’,才能進入初始化模式。CANSLEEP’0’bxCANCAN_MCRAWUM’0’,SLEEP’0’才能退出睡眠狀態(tài)。(CAN_IERWKUIE’1’),那么一旦檢測CANbxCAN。位清’0’測試通過對CAN_BTR寄存器的SILM和/或LBKM置’1’,來選擇一種測試模式。只能在初始化模式下修改這2在選擇了一種測試模式后軟件需要對CAN_MCRINRQ’0’,來真正進入測試模式。靜默模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)核忽略確認bxCAN在把Tx輸出回饋到Rx輸入上,而完全忽略CANRX引腳的實際狀態(tài)。發(fā)送的CANTX環(huán)回靜默模bxCAN,但卻不會影響CANTXCANRXCANCANRXCANCANTX圖3如何設置工作 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*/如何設置測試/**@defgroup*#define /*!<normal#defineCAN_Mode_LoopBack /*!<loopbackmode*/#define /*!<silent#defineCAN_Mode_Silent_LoopBack /*!<loopbackcombinedwithsilentmode*/CANCAN_InitCAN_TypeDefCANCAN_InitStructure.CAN_ModeCAN_Mode_Normal;//正常模式,或者設置為測試if(CAN_Init(CAN1,&CAN_InitStructure)=={}控制和狀態(tài)寄CAN存器地址偏移量:復位值:0x0001位0RESET:bxCAN0:1:bxCANbxCAN(FMPCAN_MCR0。位0TTCM:0:時間觸發(fā)通信模式1:注:要想了解關于時間觸發(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存器地址偏移量:復位值:0x0000位RX:CANCAN(CAN_RX)SAMP:CANRXM:該位為1表示CAN當前為TXM:1CAN0SLAKI:SLKIE=1,CAN1,緊接著相應的中斷被觸發(fā)。軟件SLAK00。SLKIE=0,SLAKWKUI:喚醒中斷CAN(SOF)1;CAN_IWKUIE1,則相應的中斷被觸發(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é)點在接收報文時,根據(jù)標識符(CANID)的值決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟為滿足這一需求,bxCAN14個位寬可變的、可配置的過濾器組(13~0)CPU開銷,否則就必須由軟件過濾從而占用一定的CPUx232位寄存器,CAN_FxR0CAN_FxR1組成。STM32的bxCAN幾個重要的概過濾器STM3214CAN接收過濾問題,每個過濾器組包含兩個32位寄存器CAN_FxR0和CAN_FxR1組成,在設置為位模式下,其中一個作為標識符寄存器,另一個作為碼寄存器。過濾器組中的每個過濾器,(叫做過濾器號)從0置,當全部配置為位寬為16,且為標識符列表模式時,最大為14*4-1=55)。過濾器的過濾模位模識符加一個位的方式,而是使用2個標識符寄存器。接收報文標識符的每一位都必須過濾器的位過濾器組的過濾模式和CAN_FMR寄存器(CAN過濾器主控寄存器)配置。但是不是什么時候都可以直接配置,在配置一個過濾器組前,必須通過清除CAN_FAR(CAN過濾器激活寄存器)FACT位,把它設置為禁用狀態(tài)。然后才能設置或設置過濾通過設置CAN_FS1R(CAN過濾器位寬寄存器)FSCx位,可以配置一個通過CAN_FM1R(CAN過濾器模式寄存器)的FBMx位,可以配置對應的標識符寄存器的標識符列表模式或位模式。(見后續(xù)3.2節(jié)一旦收到的報文被存入FIFO,就可被應用程序。通常情況下,報文中的數(shù)辨別不同的數(shù)據(jù)。bxCAN提供了過濾器匹配序號,以簡化這一辨別過程。收到的報有與它相關聯(lián)的過濾器匹配序號。對于標識符列表模式下的過濾器(非方式的過濾器),軟件不需要直接跟標識符對于位模式下的過濾器,軟件只須對需要的那些位(必須匹配的位)進行比在給過濾器時,并不考慮過濾器組是否為激活狀態(tài)。另外,每個FIFO各自對其關聯(lián)的過濾器優(yōu)先級規(guī)相比較;如果匹配上,報文就被存放到相關聯(lián)的FIFO中,并且所匹配的過濾器的序號(這4)被存入過濾器匹配序號中。如同例子中所顯示,報文標識符跟#4標識符匹配,因FMI4FIFO。與過濾器相關的寄存CAN地址偏移量復位值0x2A1CFINIT:0:1:CAN地址偏移量復位值0x0000FBMx:x0:過濾器組x的2個32位寄存器工作在標識符位模式1:x232CAN地址偏移量復位值0x0000FSCx:x(13~0)的位寬。0216132CAN過濾器FIFO關聯(lián)寄地址偏移量復位值0x0000FFAx:CAN地址偏移量復位值0x0000位FACTx:1FACTx0CAN_FMRFINIT位設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’時,才能修改相應的過濾器寄存器。FB[31:0]:FB[31:0]:0:1:0:于過濾器的,功能描述和寄存器的關聯(lián),請參見2節(jié)標識符過濾。代碼實CANID值的結構分IDIDCANIDID與擴展IDID0x1800f001IDID?(在基CANID格式下不存在這個問題)BaseCANID0x1800f001用二進制表示為:0b0001100000000000111100000001,用括號分別區(qū)別為:0b000[11000000000][001111000000000001]位寬為32位的模32位的。最下邊顯示的是與CANID各位定位的關系。由4.1的知識很快可以發(fā)現(xiàn),因此,我們初步得出這樣的推論:對于一個擴展CANID,不能單純地將它看到的一個數(shù),CANID所表表示接收到的CANID對應的位必須對寄存器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論