STM32F4 CAN接收
發送器將消息廣播給所有接收器。接收器節點根據標識符的值來確定軟件是否需要該消息。如果不需要,必須在無軟件干預的情況下丟棄該消息。
標准標識符:11位
擴展標識符:18位
有2個CAN:CAN1、CAN2。
CAN1和CAN2共享512字節SRAM存儲器。
有2個FIFO:FIFO0、FIFO1。
每個FIFO提供3個郵箱。
有28個可配置的篩選器組,有的器件提供14個篩選器組。
CAN1和CAN2共享28個或14個篩選器組,可以配置CAN2的起始篩選器編號。
每個篩選器組包含2個32位寄存器(共64位)。
32位寄存器可配置不同的尺度:雙16位、32位。
每個篩選器可配置不同的模式:標識符屏蔽模式(掩碼模式)、標識符列表模式。
根據每個篩選器組的尺度和模式配置,1個篩選器組中可能包含1、2、4個篩選器,篩選器按從小到大的順序編號。
如上圖,當篩選器32位寄存器尺度配置為雙16位,模式配置為標識符列表模式時,1個篩選器組的2個32位寄存器將作為4個16位篩選器使用。篩選器編號分別為n,n+1,n+2,n+3。
每個篩選器組可分配到FIFO0或FIFO1。
篩選器的配置很靈活,上圖是其中一個例子。
上圖中,篩選器組共有14個。
篩選器編號:FIFO0和FIFO1分開排序。
每個篩選器組可以選擇不同的FIFO,可以配置不同的尺度和模式。
篩選器組0:分配到FIFO0,標識符列表模式,32位尺度。FIFO0篩選器編號0為一個32位的標識符,FIFO0篩選器編號1為另一個32位標識符。
篩選器組1:分配到FIFO0,標識符掩碼模式,32位尺度。FIFO0篩選器編號2包括1個32位的標識符和1個32位的掩碼。
篩選器組2:分配到FIFO1,標識符掩碼模式,16位尺度。FIFO1篩選器編號0包括1個16位標識符和1個16位掩碼。FIFO1篩選器編號1包括1個16位標識符和1個16位掩碼。
以此類推。
CAN接收寄存器配置時需要注意1個容易出錯的地方,如果配置錯了,CAN將無法接收數據。
篩選器組i寄存器x:CAN_FiRx
假設是
16位篩選器
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
STDID[10:0] |
RTR |
IDE |
EXTID[17:15] |
標准標識符是從第5位開始,所以如果標准標識符為0x12,則需要設置的是0x12<<5。