學習6__STM32--SPI外設之中斷收發
> 目標
STM32雙機 SPI中斷收發通信
> 描述
#1 STM32雙機配置為一主一從模式
#2 采用主機中斷發送,從機中斷接收
#3 收發機制采用不間斷收發(發送為空就發送,接收非空就接收,中間無其他操作打斷)
#4 就是單字節發送與接收
> 問題
從機接收端會出現,接收到的數據可能是原始發送數據也會是錯誤數據,出現這種現象的條件是發送主機復位、發送主機重新上電、隨時間變化(物理碰觸等)都會產生錯誤數據,而復位接收從機、重新上電接收從機會糾正數據
> 分析
#1 STM32雙機未共地導致 共地後問題依舊
#2 STM32未使用NSS引腳導致 使用後問題依舊
#3 工作模式改變嘗試(發送與接收工作模式配置為不匹配) 問題依舊
#4 主機發送太過頻繁導致,導致接收來不及接收導致 拉大發送數據周期問題依舊
#5 從數據結果上分析,應該是發送主機與接收從機未同步導致,接收總線的數據先由移位寄存器接收,再copy至數據寄存器,所以分析數據移位現象是出現在移位寄存器中,比如正在傳輸中由復位操作或斷電操作等,致使移位寄存器只接收了3bit數據,而SPI數據的接收機制是,移位寄存器收滿8bit數據後copy至數據寄存器,這一切都是硬件完成,註意數據的搬移是copy,所以移位寄存器中的數據還在,就像剛剛的這種行為導致移位寄存器只接收了3bit數據,未滿8bit數據故不會copy至數據寄存器,所以等待恢復工作後,再接收5bit數據,這樣滿8bit數據後copy至spi->DR,但是這1byte數據中的前3bit與後5bit數據本不是一個有效byte數據,就導致讀到1byte無效數據,產生了接收錯誤數據的現象
> 解決
#1 拉大發送數據周期&在進入接收中斷後先關閉SPI外設,然後再讀取數據,出中斷前開始SPI外設
#n 。。。
>總結
#1 這種方法只是暫時解決了該條件下接收錯誤數據的問題,並未完美解決和分析透這一現象
#2 不拉大發送數據周期,只是在進入接收中斷後先關閉SPI外設,然後再讀取數據,出中斷前開始SPI外設,接收數據錯誤問題依舊
學習6__STM32--SPI外設之中斷收發