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

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

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

提高SPI時(shí)鐘時(shí)通信異常的案例分享

茶話MCU ? 來(lái)源:ST MCU 信息交流 ? 2020-07-13 11:41 ? 次閱讀

有人采用STM32H743ZI芯片的SPI外設(shè)跟ADC器件通信,發(fā)現(xiàn)一旦SPI的SCK時(shí)鐘超過(guò)25MHz時(shí),比如50Mhz,就會(huì)發(fā)生讀取數(shù)據(jù)失敗,并提示Busy忙信息或ERR錯(cuò)誤信息。反正只要串行時(shí)鐘不超過(guò)25Mhz,收發(fā)都很正常。

但是STM32H743芯片手冊(cè)上明白地說(shuō)了SPI時(shí)鐘最高可達(dá)150MHz,這會(huì)是什么原因呢?

根據(jù)他所提到的異?,F(xiàn)象初步判斷,不論他的硬件方面還是軟件配置方面都應(yīng)該沒(méi)有很大的問(wèn)題,不然根本沒(méi)法通信。像這種情況有可能是下面幾種原因之一或組合原因【當(dāng)然不僅限于這些】:

第一種情況就是通信速率明顯提高時(shí),由于通信速率加快,而接收處理的相關(guān)代碼本身所用時(shí)間相對(duì)固定,這樣可能導(dǎo)致不能及時(shí)讀走數(shù)據(jù)而發(fā)生溢出,尤其是基于查詢方式或中斷方式接收處理時(shí)。這時(shí)我們可以考慮對(duì)接收代碼做進(jìn)一步的精簡(jiǎn)優(yōu)化,壓縮接收處理時(shí)間,或者改用DMA方式進(jìn)行數(shù)據(jù)的收發(fā)。

第二種情況就是當(dāng)通信速率明顯提高時(shí),跟外設(shè)復(fù)用的GPIO輸出速率檔位的配置沒(méi)有跟上來(lái)。以本案例來(lái)說(shuō),當(dāng)我們將SPI的時(shí)鐘上到50MHz甚至更高時(shí),若相應(yīng)的GPIO的輸出速率配置還維持在相對(duì)低速水平,與實(shí)際輸出需求不相匹配時(shí)往往就會(huì)出現(xiàn)異常。

關(guān)于這個(gè)配置,如果使用STM32CubeMx配置的話就非常簡(jiǎn)單,通過(guò)菜單選擇即可完成。如下圖所示:

第三種情況就是當(dāng)通信速率明顯提高時(shí),即使相應(yīng)的GPIO輸出能力配置也匹配了,但有些情況下還是有可能出通信異常的問(wèn)題。我們知道,當(dāng)GPIO輸出速率越來(lái)越高的時(shí)候,GPIO模塊帶來(lái)的噪聲也越大,作為通信口時(shí)其信號(hào)質(zhì)量也會(huì)隨著通信速率的提升而變差,當(dāng)然,此時(shí)芯片所需的功耗也隨之增大。對(duì)于很多STM32系列芯片,當(dāng)GPIO輸出速率達(dá)到一定程度時(shí),建議開(kāi)啟片內(nèi)GPIO補(bǔ)償單元。【下面截圖是兩個(gè)STM32系列關(guān)于GPIO補(bǔ)償單元的介紹文字】

該GPIO補(bǔ)償單元的作用就是通過(guò)控制IO口的輸出斜率,降低GPIO的噪聲對(duì)整個(gè)電源的影響并盡力改善信號(hào)質(zhì)量,所以當(dāng)我們基于STM32芯片實(shí)現(xiàn)較高速率的通信時(shí),比方50Mhz甚至上百兆的SPI或USB通信時(shí),如果芯片有GPIO補(bǔ)償單元的話,建議將其開(kāi)啟。順便提醒下,使用GPIO補(bǔ)償單元的話,往往對(duì)電源電壓有相應(yīng)要求,具體依手冊(cè)而定。

下面是分別基于STM32F4和STM32F7系列的HAL庫(kù)相關(guān)開(kāi)啟GPIO補(bǔ)償單元的函數(shù)。

至于本案例異常的真正原因是什么呢?后來(lái)經(jīng)確認(rèn)屬于上面提到的第二種情況,GPIO輸出速率擋位選擇與實(shí)際輸出需求不匹配,稍加調(diào)整配置就好。

聲明:本文內(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)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2265

    文章

    10858

    瀏覽量

    354427
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1691

    瀏覽量

    91243
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1189

    瀏覽量

    51851

原文標(biāo)題:提高SPI時(shí)鐘時(shí)通信異常的案例分享

文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DS1302芯片與FPGA之間SPI通信原理

    本文通過(guò)以DS1302芯片為基礎(chǔ),介紹該芯片與FPGA之間SPI通信原理,詳細(xì)描述硬件設(shè)計(jì)原理及FPGA SPI接口驅(qū)動(dòng)設(shè)計(jì)。
    的頭像 發(fā)表于 10-24 14:16 ?225次閱讀
    DS1302芯片與FPGA之間<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>原理

    SPI通信協(xié)議的基本概念和工作模式

    SPI(Serial Peripheral Interface)通信協(xié)議,即串行外圍設(shè)備接口,是一種高速、全雙工、同步通信總線,由摩托羅拉公司提出并廣泛應(yīng)用。SPI以其高效的數(shù)據(jù)傳輸能
    的頭像 發(fā)表于 09-09 17:04 ?812次閱讀

    單片機(jī)SPI通信實(shí)現(xiàn)

    在深入探討單片機(jī)(如基于STM32、AVR、PIC等)如何通過(guò)SPI(Serial Peripheral Interface)進(jìn)行通信之前,我們先概述SPI通信的基本原理,隨后以STM
    的頭像 發(fā)表于 09-09 17:00 ?366次閱讀

    探索SPI單線傳輸模式中時(shí)鐘線與數(shù)據(jù)傳輸?shù)暮?jiǎn)化

    探索SPI單線傳輸模式:時(shí)鐘線與數(shù)據(jù)傳輸?shù)暮?jiǎn)化之道 在當(dāng)今的嵌入式系統(tǒng)和微控制器通信中,串行外設(shè)接口(SPI)因其高速、全雙工和同步的特點(diǎn)而廣受歡迎。然而,隨著設(shè)備尺寸和復(fù)雜性的不斷減
    的頭像 發(fā)表于 05-28 18:26 ?1070次閱讀

    CYW20829調(diào)試SPI通信時(shí),遇到的兩個(gè)問(wèn)題求解

    使用函數(shù)cyhal_spi_slave_write向master發(fā)送數(shù)據(jù)時(shí),沒(méi)有等待master拉低片選取并生成時(shí)鐘信號(hào),導(dǎo)致接收數(shù)據(jù)異常。 嘗試:使用Cy_GPIO_讀取CS引腳,直到該引腳被拉低
    發(fā)表于 05-28 07:14

    STM8L001J3單片機(jī)SPI叢機(jī)通信數(shù)據(jù)異常怎么解決?

    最近在做一個(gè)項(xiàng)目,選擇STM8L001J3外掛做數(shù)據(jù)處理,由于通信速度和準(zhǔn)確性考慮,沒(méi)有用STM8L001J3的I2C和USART接口,采用SPI做叢機(jī)和主機(jī)進(jìn)行通信,意法的單片機(jī)以前沒(méi)用過(guò)S
    發(fā)表于 04-24 07:55

    關(guān)于SMT32F103 Usart3同步模式與SPI1的通信問(wèn)題求解

    本人使用一顆STM32F103的usart3同步模式與其SPI1進(jìn)行通信,當(dāng)CPOL+CPHA的配置為00、01、10、11時(shí),出現(xiàn)一些異常現(xiàn)象: 00、01、10配置:TX上發(fā)數(shù)據(jù)時(shí),CK無(wú)
    發(fā)表于 04-19 06:48

    請(qǐng)問(wèn)STM32F405RGT6的SPI通信最高時(shí)鐘頻率是多少?

    STM32F405RGT6的SPI通信最高時(shí)鐘頻率是多少?
    發(fā)表于 03-15 08:23

    SPI雙機(jī)通信中,時(shí)鐘信號(hào)由主機(jī)提供,那么從機(jī)向主機(jī)發(fā)送數(shù)據(jù)時(shí)需要時(shí)鐘信號(hào)嗎?

    SPI雙機(jī)通信中,時(shí)鐘信號(hào)由主機(jī)提供,那么從機(jī)向主機(jī)發(fā)送數(shù)據(jù)時(shí)需要時(shí)鐘信號(hào)嗎?從機(jī)是怎樣通知主機(jī)產(chǎn)生時(shí)鐘信號(hào)的?
    發(fā)表于 03-14 06:49

    超詳細(xì)的SPI原理和通信模式

    SPI分為主、從兩種模式,一個(gè)SPI通訊系統(tǒng)需要包含一個(gè)(且只能是一個(gè))主設(shè)備,一個(gè)或多個(gè)從設(shè)備。提供時(shí)鐘的為主設(shè)備(Master),接收時(shí)鐘的設(shè)備為從設(shè)備(Slave),
    發(fā)表于 02-29 12:33 ?3999次閱讀
    超詳細(xì)的<b class='flag-5'>SPI</b>原理和<b class='flag-5'>通信</b>模式

    SPI全雙工模式下數(shù)據(jù)接收異常的一個(gè)原因

    前面給小伙伴講過(guò)串口發(fā)送和接收異常的可能原因,今天我們講下SPI全雙工模式下數(shù)據(jù)接收異常的一個(gè)原因。
    的頭像 發(fā)表于 01-23 09:31 ?1230次閱讀
    <b class='flag-5'>SPI</b>全雙工模式下數(shù)據(jù)接收<b class='flag-5'>異常</b>的一個(gè)原因

    硬件spi和軟件spi的區(qū)別

    硬件SPI(串行外設(shè)接口)和軟件SPI是兩種不同的SPI傳輸方式。SPI是一種同步串行數(shù)據(jù)通信協(xié)議,通常用于連接微控制器和外部設(shè)備,如存儲(chǔ)器
    的頭像 發(fā)表于 12-26 16:55 ?5543次閱讀

    AD5755-1芯片采用FPGA驅(qū)動(dòng),發(fā)現(xiàn)讀寫(xiě)SPI端口異常怎么解決?

    AD5755-1芯片采用FPGA驅(qū)動(dòng),發(fā)現(xiàn)讀寫(xiě)SPI端口異常,具體情況如下: 1.采用25MHz的SCK讀寫(xiě)SPI端口,AD5755-1的SDO無(wú)數(shù)據(jù)輸出;和數(shù)據(jù)手冊(cè)給出的最快時(shí)鐘3
    發(fā)表于 12-13 09:23

    AD7606 SPI通信時(shí)鐘極性和時(shí)鐘相位要求是什么?

    AD7606的關(guān)于SPI通信時(shí)鐘極性和時(shí)鐘相位要求是什么? 我的主控芯片采用SPI有AD7606通信
    發(fā)表于 12-01 06:56

    SPI通信協(xié)議原理是什么

    UART串口通信中的數(shù)據(jù)只能一位一位的傳輸,如果數(shù)據(jù)量比較大的時(shí)候,傳輸速率會(huì)受到很大影響,此時(shí)我們就可以考慮使用同步串行通信了,比如SPI。 SPI
    的頭像 發(fā)表于 11-24 17:37 ?984次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>協(xié)議原理是什么