• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于STM32F407的雙CAN總線設(shè)計(jì)與實(shí)現(xiàn)

      2016-06-13 10:03:08劉鵬
      科技視界 2016年13期

      劉鵬

      【摘 要】本文是基于意法半導(dǎo)體(ST)新推出的一款高性能CortexTM-M4內(nèi)核的ARM 芯片STM32F407ZGT6,進(jìn)行的雙CAN總線設(shè)計(jì)。在開發(fā)過程中采用了ST提供的可視化圖形界面開發(fā)工具STM32Cube進(jìn)行底層驅(qū)動(dòng)的配置,簡化了設(shè)計(jì)工作。但由于該工具鏈接的固件庫函數(shù)存在傳遞參數(shù)錯(cuò)誤,使得CAN總線無法接收數(shù)據(jù),本文對該庫函數(shù)進(jìn)行了更正。

      【關(guān)鍵詞】STM32F407;CAN;STM32Cube

      Design and Realization of Double CAN Buses on STM32F407

      LIU Peng

      (Chinese Electron Scientific and Technological Company 20th Institute, Xian Shaanxi 710068, China)

      【Abstract】Based on a high-performance ARM with CortexTM-M4 core which launched by STMicroelectronics (ST)--STM32F407ZGT6, the double CAN bus is designed in this paper. A visual graphical interface-STM32cube which is provided by ST, is used to configure the underlying driver in this development process. It simplifies the design work. However, one of its library functions makes the CAN bus does not work, because of its error in transferring parameter. This paper makes some changes to this function.

      【Key words】STM32F407; CAN; STM32Cube

      0 前言

      CAN 是一種多主機(jī)局域網(wǎng),它是由博世公司為現(xiàn)代汽車應(yīng)用率先推出的,憑借著良好的可靠性以及卓越的靈活性,已被廣泛應(yīng)用于工業(yè)自動(dòng)化領(lǐng)域、建筑、環(huán)境控制等眾多領(lǐng)域[1]。近年來,在航空機(jī)載設(shè)備上使用CAN總線傳輸各模塊的BIT、日志等信息,可以更有效地管理模塊狀態(tài);使用成熟的CAN總線協(xié)議,保證了信息傳輸?shù)陌踩煽俊?/p>

      為了提高系統(tǒng)處理信息的性能,本文使用了基于高性能ARM Cortex-M4系列的32位RISC內(nèi)核設(shè)計(jì)的STM32F407ZGT6芯片,最高工作頻率可達(dá)168MHz。

      1 CAN總線原理

      CAN總線結(jié)構(gòu)屬于多主競爭方式,具有多主站運(yùn)行和分散仲裁的串行總線以及廣播通信的特點(diǎn),不同節(jié)點(diǎn)之間可自由通信,CAN總線以報(bào)文為單位進(jìn)行數(shù)據(jù)傳送,報(bào)文的優(yōu)先級由標(biāo)識符決定,最低二進(jìn)制數(shù)的標(biāo)識符有最高的優(yōu)先級。

      2 CAN總線通信設(shè)計(jì)

      2.1 硬件設(shè)計(jì)

      本文采用了意法半導(dǎo)體高性能處理器STM32F407ZGT6,提高了處理速度,其內(nèi)置的CAN控制器簡化了硬件電路的設(shè)計(jì),外置的CAN電平轉(zhuǎn)換芯片采用的是SN65HVD230。系統(tǒng)中有若干個(gè)CAN模塊進(jìn)行通信,為了統(tǒng)一匹配CAN總線的阻抗,要求每個(gè)模塊上無需添加匹配電阻,由系統(tǒng)統(tǒng)一在最遠(yuǎn)的兩端節(jié)點(diǎn)處添加120歐匹配電阻。

      2.2 基于可視化圖形界面的底層驅(qū)動(dòng)配置

      STM32CubeMX是ST的主動(dòng)原創(chuàng),可以減少開發(fā)工作的時(shí)間和費(fèi)用。STM32Cube覆蓋了STM32系列所有芯片,STM32Cube中的STM32CubeMX是一款圖形化軟件設(shè)置工具,允許使用圖形化向?qū)砩蒀語言代碼。

      首先,根據(jù)模塊的功能對STM32的IO口進(jìn)行初始化,需實(shí)現(xiàn)的外設(shè)有兩路CAN、一路UART、一路I2C,還有若干GPIO(實(shí)現(xiàn)對模塊狀態(tài)的監(jiān)控)。接下來,需對系統(tǒng)時(shí)鐘進(jìn)行配置,STM32cube極大的簡化了開發(fā)人員的工作,使用更形象的圖形界面表示時(shí)鐘的配置關(guān)系,如圖1。本文中由于外部空間的限制,無法使用外部晶振,故本文中采用的是內(nèi)部時(shí)鐘HSI(16MHz),通過相應(yīng)配置使得處理器主時(shí)鐘達(dá)到最大值168MHz,相應(yīng)的外設(shè)時(shí)鐘也達(dá)到最大的42MHz。最后,對CAN控制器進(jìn)行配置,將CAN的波特率設(shè)置為1Mb/s,CAN控制器工作在正常模式,采用雙路CAN總線互為備份,在該ARM芯片中內(nèi)置的兩個(gè)CAN控制器是主從關(guān)系,對于用戶使用而言,只有過濾器的設(shè)計(jì)需注意,其他方面無任何差別。

      2.3 軟件設(shè)計(jì)

      在STM32cube完成初始化之后,需開發(fā)人員編寫相應(yīng)的應(yīng)用程序,實(shí)現(xiàn)系統(tǒng)對該模塊CAN協(xié)議的要求,軟件流程圖如圖2所示,CAN的接收和發(fā)送均采用中斷方式。

      使用STM32cube的好處顯而易見,但也存在弊端。例如由于可視化界面使得開發(fā)人員幾乎無需了解底層寄存器的調(diào)用情況,而一旦出現(xiàn)問題需要查看寄存器定位故障時(shí)將很難查找到原因。

      在本設(shè)計(jì)中遇到CAN無法接收數(shù)據(jù)的故障,為查找故障原因,作者在熟悉各寄存器功能后,通過單步調(diào)試發(fā)現(xiàn)CAN的接收數(shù)據(jù)函數(shù)CAN_Receive_IT()無法讀取硬件FIFO中的數(shù)據(jù),最后通過添加一個(gè)結(jié)構(gòu)體變量User_recieve_IT,先將FIFO的值賦給該結(jié)構(gòu)體變量,再將該結(jié)構(gòu)體直接賦給hcan->pRxMsg,使得CAN接收數(shù)據(jù)成功。

      3 結(jié)果與分析

      使用CANALYST-Ⅱ分析儀對模塊進(jìn)行了測試,連續(xù)多次發(fā)送CAN命令100條、間隔時(shí)間1ms,全部得到正確回復(fù)。同時(shí),PC機(jī)串口接收的模塊返回?cái)?shù)據(jù)與CAN測試結(jié)果同步。人為使得CAN_H對地短路導(dǎo)致總線關(guān)閉,再取消短路后,總線自動(dòng)恢復(fù),證明CAN總線的可靠性很高。

      本文中使用圖形化軟件設(shè)置工具STM32cube對ARM芯片進(jìn)行底層驅(qū)動(dòng)的配置,大大提高了開發(fā)人員的工作效率,降低錯(cuò)誤出現(xiàn)的概率。同時(shí),作者也解決了CAN接收函數(shù)中傳遞參數(shù)出現(xiàn)的錯(cuò)誤。

      圖3 CAN調(diào)試結(jié)果和UART輸出數(shù)據(jù)

      【參考文獻(xiàn)】

      [1]佟國香.基于CAN總線的STM32應(yīng)用編程及實(shí)現(xiàn)[J].上海:信息技術(shù),2015,10:49.

      [責(zé)任編輯:湯靜]

      石狮市| 古浪县| 东乡县| 云梦县| 长沙市| 安吉县| 陈巴尔虎旗| 扎鲁特旗| 栾城县| 宁国市| 贵定县| 仁化县| 岚皋县| 万荣县| 迁安市| 甘孜| 克东县| 延津县| 阿合奇县| 林口县| 昭苏县| 修水县| 偏关县| 金华市| 伊宁县| 巴马| 武隆县| 荔波县| 海安县| 乌兰浩特市| 常宁市| 德江县| 聂拉木县| 长乐市| 同江市| 华容县| 南安市| 鸡西市| 绥江县| 南丹县| 元江|