• 資料介紹
    • 前言
    • 問題描述
    • SPI 相關(guān)知識
    • 問題分析與測試
    • 小結(jié)
  • 資料預(yù)覽
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

LAT1376 啟用“實時觀察窗口”導(dǎo)致通訊出錯的案例分享

03/19 11:28
169
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

LAT1376 啟用“實時觀察窗口”導(dǎo)致通訊出錯的案例分享

1.12 MB

前言

通常我們使用的 IDE 在調(diào)試時都支持在程序運行過程中實時觀察窗口內(nèi)容的功能,當(dāng)啟用這個功能后,實時觀察窗口中包含的寄存器或變量的值會被周期性或重復(fù)性的進(jìn)行采樣,進(jìn)而實現(xiàn)窗口內(nèi)容的實時更新。但是這個功能使用不當(dāng)?shù)脑捒赡軙?dǎo)致一些問題,下面我們介紹這樣一個外設(shè)通訊出錯的案例。

問題描述

客戶在使用 STM32H723 的 SPI 外設(shè)進(jìn)行通訊時,通過邏輯分析儀抓取到的總線數(shù)據(jù)是正確的,但是實際接收到的數(shù)據(jù)卻為 0。這種情況每隔一段時間會出現(xiàn)一次,這個間隔時間不是固定的??蛻舻臏y試是使用 Keil MDK 在調(diào)試狀態(tài)下進(jìn)行的。

SPI 相關(guān)知識

SPI_SR_RXP 寄存器位由硬件進(jìn)行管理。當(dāng)RxFIFO 包含至少一個完整的數(shù)據(jù)幀時,SPI_SR_RXP 位為 1,否則為 0。

問題分析與測試

客戶抓取 SPI 總線上的數(shù)據(jù)是正確的,但是讀取到的數(shù)據(jù)為 0 的情況,這很可能是由于在 SPI_SR_RXP 為 0 的時候讀取了 SPI_RXDR 寄存器。下面就這個推測對 SPI_SR_RXP進(jìn)行測試。

小結(jié)

這個案例提醒我們,如果使用了可以通過讀操作進(jìn)行更新的寄存器時,最好在調(diào)試時慎用“實時觀察窗口”來觀察其值,因為這可能會影響程序的正常執(zhí)行。這個“PeriodicWindow Update”的調(diào)試功能不是 Keil 獨有的,在 IAR 中的"Live Watch"窗口以及CubeIDE 中的"Live Expressions"窗口都是“實時觀察窗口”的功能,所以在使用時也要注意下。

資料預(yù)覽

相關(guān)推薦