mcp2515是can控制器,簡單的來講,就是只要配置好寄存器,芯片就能夠自動的解析can數據幀,同時保存到接收緩存中,提醒單片機可以讀取can的數據字節。
讀取的方式是快速spi,可以達到10Mbits/s。當然,調試的時候,可以放低速度。前一篇文章已經分析了spi的調試步驟,這里不再分析。
can控制器有設置過濾器的功能,通俗的講:不是can控制器想要的東西,我就過濾不接收,不放到接收緩存上,這樣可以屏蔽了很多can總線上的無用的數據。
mcp251的接收緩存器控制寄存器中,有兩位RXM設置,可以設置屏蔽的工作模式。
bit 6-5 RXM :接收緩沖器工作模式位
11 = 關閉屏蔽/濾波功能;接收所有報文
10 = 只接收符合濾波器條件的帶有擴展標識符的有效報文
01 = 只接收符合濾波器條件的帶有標准標識符的有效報文
00 = 接收符合濾波器條件的所有帶擴展標識符或標准標識符的有效報文
一般易用00和11,英文文檔中,10 ,01是保留的,因此中文文檔也有不對的地方。
1、在調試的時候,建議不過濾,上位機發什么數據,就接收什么數據,以驗證硬件和軟件的基本功能是否正確。
2、如果上一步已經調試成功,說明mcp2515的驅動基本上是ok了。
3、然后可以開啟“接收符合濾波器條件的所有帶擴展標識符或標准標識符的有效報文”的功能,具體的方法可以參考下圖:
我的屏蔽寄存器設置如下:說明是開啟所有位屏蔽功能。所有id數據必須和我設置一樣才能接收數據。
MCP2515_WriteByte(TXB0SIDH, 0xFF); //發送緩沖器0標准標識符高位
MCP2515_WriteByte(TXB0SIDL, 0xEB); //發送緩沖器0標准標識符低位
MCP2515_WriteByte(TXB0EID8, 0xFF); //發送緩沖器0標准標識符高位
MCP2515_WriteByte(TXB0EID0, 0xFF); //發送緩沖器0標准標識符低位
如果過濾位n如果是0,那么報文中的id的第n位也要0,
如果過濾位n如果是1,那么報文中的id的第n位也要1,
滿足以上的兩個條件,才是可以接受的數據id,否則將過濾掉,不接受。
如果要是屏蔽第n位設置為0,說名報文第n位數據mcp2515就不過濾,統統接收。
另外,調試過程中一定要記住電源要接好。
stm32管腳的輸出電壓最多是3.3V而有些芯片比如1050芯片的工作電壓是大於4.75.從而導致芯片不能正常工作,外接個5Vdc解決問題。