最近需要用到SPI1和SPI2協(xié)同工作,想弄個2位的SPI通信:
硬件的接線如下:
SPI1.SCK -> DEV.SCK
SPI1.SCK -> SPI2.SCK
SPI1.MOSI -> DEV.MOSI[0]
SPI1.MISO <- DEV.MISO[0] SPI2.MISO -> DEV.MOSI[1]
SPI2.MOSI <- DEV.MISO[1]
將SPI1設(shè)置為Master方式,將SPI2設(shè)置為Slave。
設(shè)置為CPOL=0,CPHA=0(就是不傳輸?shù)臅r候時鐘是低電平,上升沿采樣,下降沿更新數(shù)據(jù))。
具體的配置就不貼了,在stm32fwlib的例子里面有。
注意:官方和網(wǎng)上能用的配置都是SPI1是Slave、SPI2為Master!接下來會說。
介紹遇到的問題:SPI1正確,SPI2得到的數(shù)據(jù)是亂的……
單獨把SPI1設(shè)置為Master和FPGA通信,發(fā)現(xiàn)在最高速18Mhz也是正常的,開始懷疑SPI2是否有Bug……
于是單獨把SPI1和SPI2回環(huán)測試:
SPI1.SCK -> SPI2.SCK
SPI1.MOSI -> SPI2.MOSI
SPI1.MISO <- SPI2.MISO
用隨機數(shù)發(fā)送和接收,發(fā)現(xiàn)SPI1和SPI2收到的數(shù)據(jù)都是不正常的,但有區(qū)別
SPI1的SR發(fā)送完之后是0x02(TX空)
SPI2的SR卻是0x82、0x40(0x80是busy、0x40是overrun)
嚴重懷疑SPI2有問題,busy說明數(shù)據(jù)沒完全發(fā)送完,overrun說明發(fā)送完了之后還有時鐘導(dǎo)致之前的數(shù)據(jù)被沖掉了。
試試用GPIO模擬SPI1來和SPI2通信,問題一樣的,有點懷疑STM32的SPI是否能做Slave…………
看看官方的代碼,突然又發(fā)現(xiàn)官方是SPI1為Slave,最后嘗試把SPI1設(shè)置為Slave、SPI2為Master,正常了!!!
SPI2.SCK -> SPI1.SCK
SPI2.MOSI -> SPI1.MOSI
SPI2.MISO <- SPI1.MISO
之前就聽說STM32的片子可能有Bug,難道SPI1和SPI2不一樣?畢竟大部分的情況下只用一個SPI1,很少會用到SPI2的。
上網(wǎng)查了一下errata,說了SPI2的Slave模式和USART3會有沖突,和I2S也會有問題,于是第一時間很想換lpc的片子,但同樣的功能價格貴一半,算了吧。
修正:今天用邏輯分析儀抓了波形。
這個是SPI2作為Master、SPI1作為Slave。
這個是SPI1作為Master、SPI2作為Slave。
可以看到無論哪個做Master,邊沿都是對的,但是SPI2做從的時候有毛刺……
有的時候時鐘的IDLE電平不是0,本來還是懷疑STM32的問題,但是突然看到手邊還有杜邦線,試著換了一套杜邦線,居然正常了!
測試數(shù)據(jù)正確了。
(0) M_SR=02, S_SR=02, (MTX) 94ef == 94ef (SRX), (MRX) 53df == 53df (STX)
(1) M_SR=02, S_SR=02, (MTX) e746 == e746 (SRX), (MRX) e4ea == e4ea (STX)
(2) M_SR=02, S_SR=02, (MTX) 02f5 == 02f5 (SRX), (MRX) 006d == 006d (STX)
(3) M_SR=02, S_SR=02, (MTX) a3bc == a3bc (SRX), (MRX) 1728 == 1728 (STX)
(4) M_SR=02, S_SR=02, (MTX) 4b5b == 4b5b (SRX), (MRX) e7db == e7db (STX)
(5) M_SR=02, S_SR=02, (MTX) b192 == b192 (SRX), (MRX) 2f46 == 2f46 (STX)
(6) M_SR=02, S_SR=02, (MTX) b421 == b421 (SRX), (MRX) d829 == d829 (STX)
(7) M_SR=02, S_SR=02, (MTX) c6c8 == c6c8 (SRX), (MRX) ab44 == ab44 (STX)
(8) M_SR=02, S_SR=02, (MTX) e347 == e347 (SRX), (MRX) 7f57 == 7f57 (STX)
(9) M_SR=02, S_SR=02, (MTX) f95e == f95e (SRX), (MRX) e922 == e922 (STX)
但還是不能明白為什么SPI1作為Slave卻能通信,我還換過STM32官方的板子和新的杜邦線,當時也是不能用的,到底什么情況……
上一篇:SAE J1850 汽車總線協(xié)議 VPW 物理層驅(qū)動程序在STM32芯片上的實現(xiàn)
下一篇:STM32學(xué)習(xí)筆記(1):GPIO口的使用
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫的一些基本介紹
- ?意法半導(dǎo)體大巴窯工廠落地創(chuàng)新冷卻系統(tǒng),提升可持續(xù)發(fā)展能力
- Nordic Semiconductor聯(lián)同Omnispace和Gatehouse Satcom完成5G NB-IoT衛(wèi)星演示
- 英偉達開啟“攻城略地”模式,擬在歐洲建設(shè)20座AI工廠
- 臺積電:日本JASM第二晶圓廠預(yù)計今年下半年動工
- 工信部:支持車企“60天賬期”承諾,促進產(chǎn)業(yè)健康發(fā)展
- 全球十大芯片代工廠最新排名!中芯國際沖擊世界第二
- 未來數(shù)字化工廠:重塑制造業(yè)格局
- 面對快速演進的 GenAI 模型,Gartner發(fā)布中國企業(yè)需做出的三項基礎(chǔ)設(shè)施關(guān)鍵決策
- 摩爾斯微電子與成都惠利特攜手合作,利用 Wi-Fi HaLow革新物聯(lián)網(wǎng)的連接
- 羅克韋爾自動化推出 PharmaSuite 12.00,加速實現(xiàn)安全、可擴展的部署
- 聯(lián)想非全資附屬公司聯(lián)泓新材將在A股上市
- 格力回應(yīng)舉報奧克斯:已準備好證據(jù)提供監(jiān)管部門調(diào)閱
- 華為獲30國5G合同 耿爽:國家名字不點了免得有些人會扎心
- 格力電器舉報奧克斯空調(diào)有“虛假宣傳”,奧克斯:我報警
- 華為已獲46份5G商用合同,位于全球第一
- 諾基亞 C1 Plus在國內(nèi)開售:售價499元
- 兩款可折疊iPhone已經(jīng)通過內(nèi)部的耐久性測試
- 華為P50 Pro渲染圖解密:居中的單打孔屏幕設(shè)計
- Galaxy S21系列在英國確認不會配充電器
- 15分鐘就充滿電:iQOO 7全系機型標配120W超快閃充