0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HK32MCU應(yīng)用筆記(九)| HK32F103x8xB系列CAN的應(yīng)用解決方案

jf_pJlTbmA9 ? 來(lái)源:航順芯片 ? 作者:航順芯片 ? 2023-09-18 10:59 ? 次閱讀

航順HK32F系列

航順HK32F系列MCU都采用的是ARM? Cortex內(nèi)核架構(gòu),其中HK32F103家族使用的是Cortex-M3內(nèi)核,支持96M的系統(tǒng)時(shí)鐘,內(nèi)部資源以及外設(shè)豐富,其內(nèi)部自帶的CAN模塊應(yīng)用非常廣泛。工業(yè)類(lèi),汽車(chē)電子產(chǎn)品大部分需要用到CAN通訊協(xié)議,并且采用正向設(shè)計(jì)軟硬件全兼容國(guó)外進(jìn)口產(chǎn)品,本節(jié)就針對(duì)航順HK32F103x8xB系列MCU 的CAN應(yīng)用差異部分做個(gè)說(shuō)明。

CAN是控制器局域網(wǎng)絡(luò)(Controller Area Network, CAN)的簡(jiǎn)稱,是由以研發(fā)和生產(chǎn)汽車(chē)電子產(chǎn)品著稱的德國(guó)BOSCH公司開(kāi)發(fā)的,并最終成為國(guó)際標(biāo)準(zhǔn)(ISO 11898),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。在北美和西歐,CAN總線協(xié)議已經(jīng)成為汽車(chē)計(jì)算機(jī)控制系統(tǒng)嵌入式工業(yè)控制局域網(wǎng)的標(biāo)準(zhǔn)總線,并且擁有以CAN為底層協(xié)議專為大型貨車(chē)和重工機(jī)械車(chē)輛設(shè)計(jì)的J1939協(xié)議。

CAN總線的特點(diǎn)

(1)它是一種多主總線,即每個(gè)節(jié)點(diǎn)機(jī)均可成為主機(jī),且節(jié)點(diǎn)機(jī)之間也可進(jìn)行通信

(2)通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維,通信速率可達(dá)1mb/s。

(3)CAN總線通信接口中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)通信數(shù)據(jù)的成幀處理,包括位填充、數(shù)據(jù)塊編碼、循環(huán)冗余校驗(yàn)、優(yōu)先級(jí)判別等項(xiàng)工作。

(4)CAN協(xié)議的一個(gè)最大特點(diǎn)是廢除了傳統(tǒng)的站地址編碼,代之以對(duì)通信數(shù)據(jù)塊進(jìn)行編碼。采用這種方法的優(yōu)點(diǎn)是可使網(wǎng)絡(luò)內(nèi)的節(jié)點(diǎn)個(gè)數(shù)在理論上不受限制,數(shù)據(jù)塊的標(biāo)識(shí)碼可由11位或29位二進(jìn)制數(shù)組成,因此可以定義211或229個(gè)不同的數(shù)據(jù)塊,這種數(shù)據(jù)塊編碼方式,還可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù),這一點(diǎn)在分步式控制中非常重要。

(5)數(shù)據(jù)段長(zhǎng)度最多為8個(gè)字節(jié),可滿足通常工業(yè)領(lǐng)域中控制命令、工作狀態(tài)及測(cè)試數(shù)據(jù)的一般要求。同時(shí),8個(gè)字節(jié)不會(huì)占用總線時(shí)間過(guò)長(zhǎng),從而佐證了通信的實(shí)時(shí)性。

(6)CAN協(xié)議采用crc檢驗(yàn)并可提供相應(yīng)的錯(cuò)誤處理功能,保證了數(shù)據(jù)通信的可靠性。CAN總線所具有的卓越性能、極高的可靠性和獨(dú)特設(shè)計(jì),特別適合工業(yè)設(shè)備測(cè)控單元互連。因此備受工業(yè)界的重視,并已公認(rèn)為最有前途的現(xiàn)場(chǎng)總線之一。

以下為用戶使用HK芯片替代S*M 系列的CAN應(yīng)用常見(jiàn)的問(wèn)題

CAN 環(huán)回測(cè)試失敗

MXCube 比較老的版本(比如 4.17.0),產(chǎn)生的 CAN 初始化代碼不正確。

錯(cuò)誤如下:

while(HAL_IS_BIT_CLR(hcan->Instance->MSR, CAN_MSR_INAK))

……

while(HAL_IS_BIT_SET(hcan->Instance->MSR, CAN_MSR_INAK))

解決方案:

1.確認(rèn)庫(kù)版本,經(jīng)過(guò)我們測(cè)試發(fā)現(xiàn),這2個(gè)判斷順序反了,MXCube4.22.0產(chǎn)生的CAN初始化代碼已經(jīng)交換過(guò)來(lái)了。

CAN 初始化不能完成

CAN總線在沒(méi)有數(shù)據(jù)發(fā)送時(shí),默認(rèn)為隱性。對(duì)于我們芯片CANRX就應(yīng)該是高電平,如果CAN網(wǎng)絡(luò)出現(xiàn)異常,將總線拉成顯性,或者,測(cè)試中CANRX接口沒(méi)有接PHY芯片,也沒(méi)有接上拉電阻,我們芯片都會(huì)出現(xiàn)CAN初始化不能完成,S*T*M32F103相同條件下可以初始化完成。

根本原因:

我們芯片在初始化過(guò)程中會(huì)判斷總線的隱性狀態(tài),如果不是隱性,不能完成初始化。

解決方案:

1. CANRX 必須接上拉電阻或內(nèi)部上拉。

CAN MSR寄存器INAK 置位慢

客戶使用CAN接口標(biāo)準(zhǔn)庫(kù),初始化CAN控制器,HK32F103在INRQ置位后,INAK并沒(méi)有立即置1,導(dǎo)致客戶代碼進(jìn)入Fail,后續(xù)初始化程序沒(méi)有運(yùn)行到。

客戶原始代碼如下:

/* Request initialisation */

CAN->MCR = CAN_MCR_INRQ;

/* ...and check acknowledged */

if ((CAN->MSR   CAN_MSR_INAK) == 0)

{

InitStatus = CANINITFAILED;

}

else

{初始化CAN控制器的寄存器}

推薦方案:在設(shè)置INRQ后,延時(shí)等待檢查INAK=1后,再進(jìn)行初始化。

/* Request initialisation */

CAN->MCR = CAN_MCR_INRQ;

while((CAN->MSR   CAN_MSR_INAK) ==0)

{

i++;

if(i>100)return CANINITFAILED;

}

/* ...and check acknowledged */

if ((CAN->MSR   CAN_MSR_INAK) == 0)

{

InitStatus = CANINITFAILED;

}

else

{初始化CAN控制器的寄存器

}

根本原因:

HK32F103在INRQ置位后,INAK需要98個(gè)PCLK才會(huì)被置1。

航順F1系列專用函數(shù)庫(kù)以及S*M最新的標(biāo)準(zhǔn)庫(kù)都是加了延時(shí)了。

來(lái)源:航順芯片

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CAN總線
    +關(guān)注

    關(guān)注

    145

    文章

    1898

    瀏覽量

    130333
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2663

    瀏覽量

    462432
  • 航順芯片
    +關(guān)注

    關(guān)注

    1

    文章

    96

    瀏覽量

    22740
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HK32MCU應(yīng)用筆記(二十)| HK32F103xC/D/E USB枚舉情況分析(二)

    HK32MCU應(yīng)用筆記(二十)| HK32F103xC/D/E USB枚舉情況分析(二)
    的頭像 發(fā)表于 09-18 10:58 ?460次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(二十)| <b class='flag-5'>HK32F103</b>xC/D/E USB枚舉情況分析(二)

    HK32MCU應(yīng)用筆記(十九)| HK32F103xC/D/E USB枚舉情況分析

    HK32MCU應(yīng)用筆記(十九)| HK32F103xC/D/E USB枚舉情況分析
    的頭像 發(fā)表于 09-18 10:58 ?678次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十九)| <b class='flag-5'>HK32F103</b>xC/D/E USB枚舉情況分析

    HK32MCU應(yīng)用筆記(十八)| HK32F103xC/D/E-DAC的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十八)| HK32F103xC/D/E-DAC的應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?920次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十八)| <b class='flag-5'>HK32F103</b>xC/D/E-DAC的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十七)| HK32F103xC/D/E-flash擦寫(xiě)應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十七)| HK32F103xC/D/E-flash擦寫(xiě)應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?941次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十七)| <b class='flag-5'>HK32F103</b>xC/D/E-flash擦寫(xiě)應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十六)| HK32F103xC/D/E-Timer的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十六)| HK32F103xC/D/E-Timer的應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?661次閱讀

    HK32MCU應(yīng)用筆記(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作狀態(tài)不能單獨(dú)配置

    HK32MCU應(yīng)用筆記(十五)| HK32F103xC/D/E-同步注入模式下,ADC2工作狀態(tài)不能單獨(dú)配置
    的頭像 發(fā)表于 09-18 10:58 ?588次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十五)| <b class='flag-5'>HK32F103</b>xC/D/E-同步注入模式下,ADC2工作狀態(tài)不能單獨(dú)配置

    HK32MCU應(yīng)用筆記(十四)| HK32F103x/C/D/E-TIM1的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十四)| HK32F103x/C/D/E-TIM1的應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?652次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十四)| <b class='flag-5'>HK32F103x</b>/C/D/E-TIM1的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十三)| HK32F103xC/D/E-ADC的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十三)| HK32F103xC/D/E-ADC的應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?937次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十三)| <b class='flag-5'>HK32F103</b>xC/D/E-ADC的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十二)| HK32F103xC/D/E的GPIO的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十二)| HK32F103xC/D/E的GPIO的應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?805次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十二)| <b class='flag-5'>HK32F103</b>xC/D/E的GPIO的應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十一)| HK32F103xC/D/E的flash讀保護(hù)應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(十一)| HK32F103xC/D/E的flash讀保護(hù)應(yīng)用及注意事項(xiàng)
    的頭像 發(fā)表于 09-18 10:58 ?818次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(十一)| <b class='flag-5'>HK32F103</b>xC/D/E的flash讀保護(hù)應(yīng)用及注意事項(xiàng)

    HK32MCU應(yīng)用筆記(八)| 航順HK32F03X內(nèi)部8M時(shí)鐘倍頻成72M解決方案

    HK32MCU應(yīng)用筆記(八)| 航順HK32F03X內(nèi)部8M時(shí)鐘倍頻成72M解決方案
    的頭像 發(fā)表于 09-18 10:59 ?1149次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(八)| 航順<b class='flag-5'>HK32F03X</b>內(nèi)部<b class='flag-5'>8</b>M時(shí)鐘倍頻成72M<b class='flag-5'>解決方案</b>

    HK32MCU應(yīng)用筆記(六)| HK32MCU芯片調(diào)試心得

    HK32MCU應(yīng)用筆記(六)| HK32MCU芯片調(diào)試心得
    的頭像 發(fā)表于 09-18 10:59 ?654次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(六)| <b class='flag-5'>HK32MCU</b>芯片調(diào)試心得

    HK32MCU應(yīng)用筆記(五)| 關(guān)于應(yīng)用HK32F030延時(shí)效率問(wèn)題

    HK32MCU應(yīng)用筆記(五)| 關(guān)于應(yīng)用HK32F030延時(shí)效率問(wèn)題
    的頭像 發(fā)表于 09-18 11:00 ?558次閱讀

    HK32MCU應(yīng)用筆記(四)| 關(guān)于老版本HK32F103串口USART偶爾出現(xiàn)數(shù)據(jù)錯(cuò)誤

    HK32MCU應(yīng)用筆記(四)| 關(guān)于老版本HK32F103串口USART偶爾出現(xiàn)數(shù)據(jù)錯(cuò)誤
    的頭像 發(fā)表于 09-18 11:00 ?987次閱讀

    HK32MCU應(yīng)用筆記(一)| HK32F030X系列在PH測(cè)量筆的應(yīng)用

    HK32MCU應(yīng)用筆記(一)| HK32F030X系列在PH測(cè)量筆的應(yīng)用
    的頭像 發(fā)表于 09-18 11:00 ?876次閱讀
    <b class='flag-5'>HK32MCU</b>應(yīng)<b class='flag-5'>用筆記</b>(一)| <b class='flag-5'>HK32F030X</b><b class='flag-5'>系列</b>在PH測(cè)量筆的應(yīng)用