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

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 基于STM32F1O5的CAN總線中繼器的設(shè)計(jì)與實(shí)現(xiàn)

          基于STM32F1O5的CAN總線中繼器的設(shè)計(jì)與實(shí)現(xiàn)

          作者: 時(shí)間:2011-04-14 來源:網(wǎng)絡(luò) 收藏

          1.5 波特率設(shè)置及ID設(shè)置電路
          波特率設(shè)置電路由兩個(gè)4位撥碼開關(guān)構(gòu)成,STM32F105通過讀取每個(gè)波特率撥碼開關(guān)的編碼值確定每一路接口的波特率,每一路接口可以選擇16種不同的波特率。由于兩個(gè)接口是通過內(nèi)部進(jìn)行通信,因此它們的ID可設(shè)置為相同的值,ID設(shè)置電路由4位編碼的旋轉(zhuǎn)編碼開關(guān)構(gòu)成,ID的值為編碼開關(guān)的編碼值加上0x190。

          2 CAN中繼器軟件的
          CAN中繼器的主要作用是對接收到的CAN報(bào)文進(jìn)行過濾轉(zhuǎn)發(fā)。中繼器的工作流程為:中繼器上電時(shí)通過讀取波特率設(shè)置電路和ID設(shè)置電路的狀態(tài),設(shè)置好波特率和ID值。初始化完成后,STM32F105通過監(jiān)聽兩個(gè)CAN接口的中斷完成數(shù)據(jù)的存儲(chǔ)轉(zhuǎn)發(fā)。當(dāng)CAN接口A收到上的數(shù)據(jù)包時(shí)產(chǎn)生中斷,中斷處理程序根據(jù)標(biāo)準(zhǔn)標(biāo)識(shí)符(StdId)和擴(kuò)展標(biāo)識(shí)符(ExtId)判斷該數(shù)據(jù)包是標(biāo)準(zhǔn)幀還是擴(kuò)展幀,同時(shí)將該ID值和ID過濾表中的值進(jìn)行對比,若符合過濾條件則不轉(zhuǎn)發(fā),否則將數(shù)據(jù)包通過CAN接口B轉(zhuǎn)發(fā)出去。
          系統(tǒng)的主程序流程如圖4所示。系統(tǒng)上電時(shí)先初始化時(shí)鐘和端口,根據(jù)配置波特率設(shè)置電路和ID設(shè)置電路的狀態(tài)配置好CAN接口的參數(shù),打開CAN1和CAN2接口的接收中斷。系統(tǒng)在主程序中不斷掃描波特率設(shè)置電路和ID設(shè)置電路的狀態(tài)是否有變化,若當(dāng)前的讀取值和上次的讀取值不一樣,則重新配置波特率和ID。CAN數(shù)據(jù)包的存儲(chǔ)轉(zhuǎn)發(fā)在中斷服務(wù)程序中完成。為了避免系統(tǒng)若受到干擾死機(jī)后不能重啟,因此需打開STM32F105的內(nèi)置看門狗,看門狗的復(fù)位由芯片內(nèi)部的滴答時(shí)鐘每50ms喂狗一次。

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

          d.JPG



          3 結(jié)束語
          本文采用了采用雙CAN接口的高性能的ARM處理器STMF105作為CAN中繼器的主控CPU,可以很好地解決兩個(gè)CAN接口的主從狀態(tài)轉(zhuǎn)換,具有結(jié)構(gòu)簡單、性能穩(wěn)定、實(shí)時(shí)性高等特點(diǎn),有一定的社會(huì)效益和廣泛的推廣價(jià)值。


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(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); })();