<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          STM32的CAN應(yīng)用嘗試

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          最近向系統(tǒng)的學(xué)習(xí)一下CAN總線的應(yīng)用,苦于找不到合適的板子來(lái)做實(shí)驗(yàn)。剛好看到STM32單片機(jī)自帶有CAN控制器,就想通過(guò)STM32作為載體來(lái)學(xué)習(xí)一下CAN總線。
          CAN控制器之外加上CAN收發(fā)器就可以用于CAN通訊了,于是隨便找了一個(gè)小板子,焊接上CAN收發(fā)器TJA1050,就可以用于CAN通訊了。
          在這篇博文中,先把通常的思路給自己理清一下。至于CAN協(xié)議的具體內(nèi)容還是要參考CAN-BUS的規(guī)范了。在這里就是講使用STM32單片機(jī)的CAN的簡(jiǎn)單思路。

          STM32 CAN總線初始化步驟:

          本文引用地址:http://www.ex-cimer.com/article/201611/322580.htm

          1、配置相關(guān)引腳的復(fù)用功能,使能CAN時(shí)鐘。

          使能CAN時(shí)鐘,通過(guò)APB1ENR的第25位來(lái)設(shè)置。其次要設(shè)置CAN的相關(guān)引腳為復(fù)用輸出,設(shè)置為上拉輸入(CAN_RX),設(shè)置為復(fù)用輸出(CAN_TX),并使能PA口的時(shí)鐘。

          2、設(shè)置CAN工作模式及波特率等。

          先設(shè)置CAN_MCR寄存器的INRQ位,讓CAN進(jìn)入初始化模式,然后設(shè)置CAN_MCR的其他相關(guān)控制位,再通過(guò)CAN_BTR設(shè)置波特率和工作模式(正常模式/環(huán)回模式)等信息。最后設(shè)置INRQ為0,退出初始化模式。

          3、設(shè)置濾波器。

          設(shè)置CAN_FMR的FINIT位,讓過(guò)濾器組工作在初始化模式下,然后設(shè)置濾波器組0的工作模式以及標(biāo)識(shí)符ID和屏蔽為。最后激活濾波器。并退出濾波器初始化模式。如果用到中斷,還要配置中斷模式。

          配置系統(tǒng)時(shí)鐘和引腳不用做過(guò)多的說(shuō)明了,每一個(gè)例程基本上都有所包含。

          重要的一點(diǎn)事如何設(shè)計(jì)CAN的工作模式和波特率。

          當(dāng)CAN進(jìn)入初始化之后,先設(shè)置CAN_MCR的控制位。見(jiàn)下面的圖


          用來(lái)控制這些設(shè)置。

          接下來(lái)是設(shè)置寄存器CAN_BTR,通過(guò)這個(gè)寄存器來(lái)設(shè)置CAN的工作模式和波特率。

          寄存器描述


          程序代碼


          mode用來(lái)設(shè)置模式,普通模式或者回環(huán)模式。

          而下面的四個(gè)用來(lái)設(shè)置波特率,tsjw tbs2 tbs1 brp

          這四個(gè)參數(shù)是怎么來(lái)決定CAN的波特率的呢?


          然后使CAN退出初始化模式

          然后再初始化過(guò)濾器


          然后就可以開(kāi)始進(jìn)行通訊了。

          待續(xù)




          關(guān)鍵詞: STM32CAN應(yīng)用嘗

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();