[英]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.