有人采用STM32H743ZI芯片的SPI外設(shè)跟ADC器件通信,發(fā)現(xiàn)一旦SPI的SCK時(shí)鐘超過25MHz時(shí),比如50Mhz,就會(huì)發(fā)生讀取數(shù)據(jù)失敗,并提示Busy忙信息或ERR錯(cuò)誤信息。反正只要串行時(shí)鐘不超過25Mhz,收發(fā)都很正常。
但是STM32H743芯片手冊(cè)上明白地說了SPI時(shí)鐘最高可達(dá)150MHz,這會(huì)是什么原因呢?
根據(jù)他所提到的異常現(xiàn)象初步判斷,不論他的硬件方面還是軟件配置方面都應(yīng)該沒有很大的問題,不然根本沒法通信。像這種情況有可能是下面幾種原因之一或組合原因【當(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輸出速率檔位的配置沒有跟上來。以本案例來說,當(dāng)我們將SPI的時(shí)鐘上到50MHz甚至更高時(shí),若相應(yīng)的GPIO的輸出速率配置還維持在相對(duì)低速水平,與實(shí)際輸出需求不相匹配時(shí)往往就會(huì)出現(xiàn)異常。

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

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


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


至于本案例異常的真正原因是什么呢?后來經(jīng)確認(rèn)屬于上面提到的第二種情況,GPIO輸出速率擋位選擇與實(shí)際輸出需求不匹配,稍加調(diào)整配置就好。
-
STM32
+關(guān)注
關(guān)注
2309文章
11162瀏覽量
373471 -
SPI
+關(guān)注
關(guān)注
17文章
1885瀏覽量
101261 -
GPIO
+關(guān)注
關(guān)注
16文章
1328瀏覽量
56231
原文標(biāo)題:提高SPI時(shí)鐘時(shí)通信異常的案例分享
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
SPI的最高時(shí)鐘頻率是多少?
通信協(xié)議IIC與SPI最全對(duì)比分析
SPI的多機(jī)通信
AEK-COM-ISOSPI1技術(shù)解析:SPI隔離通信在汽車電子中的應(yīng)用
電能質(zhì)量在線監(jiān)測(cè)裝置時(shí)鐘模塊自動(dòng)同步異常的常見類型有哪些?
蜂鳥SOC的SPI外設(shè):如何修改SPI的時(shí)鐘相位和時(shí)鐘極性
SPI通信筆記:基礎(chǔ)+動(dòng)圖+時(shí)序圖+總結(jié),一文吃透!
當(dāng)波特率設(shè)置為高時(shí),SPI 時(shí)鐘延長(zhǎng),數(shù)據(jù)丟失問題怎么解決?
使用BLE(CYW20829)作為SPI slave和MCU(TC387)作為SPI master,調(diào)試SPI通信時(shí)遇到的問題求解
TI的ADS129x器件SPI 時(shí)鐘極性CPOL和時(shí)鐘相位 CPHA的正確設(shè)置模式
第十七章 SPI
串行通信接口SPI與QSPI的區(qū)別
提高SPI時(shí)鐘時(shí)通信異常的案例分享
評(píng)論