stm32CAN濾波器設置見附件。
1 前言
在CAN協議里,報文的標識符不代表節點的地址,而是跟報文的內容相關的。因此,發送者以廣播的形式把報文發送給所有的接收者。節點在接收報文時,根據標識符(CAN ID)的值決定軟件是否需要該報文;如果需要,就拷貝到SRAM里;如果不需要,報文就被丟棄且無需軟件的干預。
為滿足這一需求,bxCAN為應用程序提供了14個位寬可變的、可配置的過濾器組(13~0),以便只接收那些軟件需要的報文。硬件過濾的做法節省了CPU開銷,否則就必須由軟件過濾從而占用一定的CPU開銷。每個過濾器組x由2個32位寄存器,CAN_FxR0和CAN_FxR1組成。
為了讓大家了解STM32的bxCAN的接收過濾機制,首先大家需要了解幾個概念。
2 幾個重要的概念
2.1 過濾器組
STM32總共提供14個過濾器組來處理CAN接收過濾問題,每個過濾器組包含兩個32位寄存器CAN_FxR0和CAN_FxR1組成,在設置為屏蔽位模式下,其中一個作為標識符寄存器,另一個作為屏蔽碼寄存器。過濾器組中的每個過濾器,編號(叫做過濾器號)從0開始,到某個最大數值(這時最大值并非13,而是取決于14個過濾器組的模式和位寬的設置,當全部配置為位寬為16,且為標識符列表模式時,最大編號為14*4-1=55)。
2.2 過濾器的過濾模式
STM32提供兩種過濾模式供用戶設置:屏蔽位模式和標識符列表模式。
2.2.1 屏蔽位模式
為了過濾出一組標識符,應該設置過濾器組工作在屏蔽位模式。
在屏蔽位模式下,標識符寄存器和屏蔽寄存器一起,指定報文標識符的任何一位,應該按照“必須匹配”或“不用關心”處理。
2.2.2 標識符列表模式
為了過濾出一個標識符,應該設置過濾器組工作在標識符列表模式。
在標識符列表模式下,屏蔽寄存器也被當作標識符寄存器用。因此,不是采用一個標識符加一個屏蔽位的方式,而是使用2個標識符寄存器。接收報文標識符的每一位都必須跟過濾器標識符相同。
2.3 過濾器的位寬
每個過濾器組的位寬都可以獨立配置,以滿足應用程序的不同需求。根據位寬的不同,每個過濾器組可提供:
●1個32位過濾器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
●2個16位過濾器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
2.3 過濾器組的過濾模式和位寬設置
過濾器組可以通過相應的CAN_FMR寄存器(CAN過濾器主控寄存器)配置。但是不是什么時候都可以直接配置,在配置一個過濾器組前,必須通過清除CAN_FAR寄存器(CAN過濾器激活寄存器)的FACT位,把它設置為禁用狀態。然后才能設置或設置過濾器組的配置。
• 通過設置CAN_FS1R(CAN過濾器位寬寄存器)的相應FSCx位,可以配置一個過濾器組的位寬。
• 通過CAN_FM1R(CAN過濾器模式寄存器)的FBMx位,可以配置對應的屏蔽/標識符寄存器的標識符列表模式或屏蔽位模式。(見后續3.2節)
應用程序不用的過濾器組,應該保持在禁用狀態。
關于過濾器配置,可參見下圖:
0.png (168.2 KB, 下載次數: 67)
下載附件
2018-7-19 02:16 上傳
完整的Word格式文檔51黑下載地址:
STM32之CAN---CAN ID過濾器分析.docx
(629.71 KB, 下載次數: 80)
2018-7-18 19:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|