簡體   English   中英

STM32F4每個數據幀之間的SPI空閑時間為何為何太長?

[英]STM32F4 SPI idle time between each data frame, why is it too long?

我試圖在不到32 ms的時間內從SPI讀取256位,數據幀為16位。 我的問題是SPI驅動程序在每個16位之間有很長的空閑時間。 看到這張圖片 ,您可以看到我正在讀取64位(紅色矩形突出顯示),並且每幀之間都有很長的停頓。 我在SPI規范中找不到關於它的任何內容。

我正在Keil的STM32F407板上進行測試,並且SPI由Keil CMSIS默認驅動程序初始化。

有什么辦法可以減少這種空閑時間?

您可以向其他人顯示代碼片段,以幫助他們,但無論如何,我仍然記得遇到相同的問題。

發送和標志檢查都使用直接寄存器訪問而不是函數。

如果那也行不通,則可以使用簡單的for循環進行一定量的延遲,以保持時鍾信號足夠低但不太多,而不用進行標志檢查,請從示波器檢查以找到准確的迭代次數。

另外,請確保在發送消息時沒有服務中斷,在傳輸結束和將CLK信號拉高的代碼之間可能存在ISR中斷。 如果您的ISR異步出現且大小很大,則可能是這種情況。

SPI1->DR = (uint16_t)Data; while(!(SPI1->SR & SPI_SR_TXE));

PS:我是在Cortex-M3上完成此操作的,沒有RTOS,STD外設庫。

編輯:也僅嘗試使用繁忙的標志,從而僅while(SPI1->SR & SPI_SR_BSY);檢查EOC while(SPI1->SR & SPI_SR_BSY);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM