0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32_ SPI主從通信

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 2020-04-08 10:54 ? 次閱讀

今天講解“STM32F103SPI主從通信”,原本計劃將這部分內(nèi)容定在后面(第二階段)來講解,滿足一位網(wǎng)友的問題“關(guān)于兩塊MCU的SPI通訊”,所以今天特地提前講解了。

由于昨天講解的是“SPI讀寫Flash”,MCU是作為SPI通信中的主機(jī),今天主要講解SPI通信的從機(jī),我將我測試的主機(jī)和從機(jī)的代碼分別打包供大家下載測試。

每天提供下載的“軟件工程”都是在硬件板子上進(jìn)行多次測試、并保證沒問題才上傳至360云盤。

今天的軟件工程下載地址(360云盤):

主機(jī):https://yunpan.cn/cPIJguDkjntYI訪問密碼 7bb6

從機(jī):https://yunpan.cn/cPIJfZxr7D5Sk訪問密碼 fd5a

STM32F10x的資料可以在我360云盤下載:

https://yunpan.cn/crBUdUGdYKam2訪問密碼 ca90

測試原理及現(xiàn)象:主機(jī)間隔500ms發(fā)送10個字符(0-9),從機(jī)開啟SPI中斷接收數(shù)據(jù),接收滿10字節(jié)數(shù)據(jù),置標(biāo)志位gSPI_FlagOver有效,并變化LED,通過串口打印接收到的數(shù)據(jù)。

關(guān)于“STM32F103SPI通信從機(jī)部分”我把重要的幾點(diǎn)在下面分別講述,若不明白,請關(guān)注微信公眾號“EmbeddDeveloper”查閱或留言。

一、RCC時鐘配置

該函數(shù)位于在bsp.c文件下面;

使能RCC時鐘:RCC_APB2Periph_SPI1

二、引腳配置

該函數(shù)位于在spi.c文件下面;

這里是對SPI所使用引腳進(jìn)行配置。

注意:

SPI作為從機(jī),MOSI作為從機(jī)接收而不是MISO,“今天的重點(diǎn)”我還會強(qiáng)調(diào)這點(diǎn)。

三、SPI配置

該函數(shù)位于在spi.c文件下面;

對SPI進(jìn)行配置。

配置的每一條語句都有注釋,請看源代碼.

強(qiáng)調(diào)一點(diǎn):SPI_CPOL_Low時鐘空閑為低,這個引腳容易受干擾導(dǎo)致通信故障。

四、SPI中斷控制器配置

該函數(shù)位于在bsp.c文件下面;

因?yàn)殚_啟了中斷接收數(shù)據(jù),這里必須配置中斷控制器。

五、SPI中斷處理

該函數(shù)位于在stm32f10x_it.c文件下面;

文章開始就說明了:接收滿10字節(jié)數(shù)據(jù),置標(biāo)志位gSPI_FlagOver有效。該函數(shù)就是這個意思。

六、主函數(shù)應(yīng)用

該函數(shù)位于在main.c文件下面;

這就是文章開頭“測試原理及現(xiàn)象”的描述,就不多說了。

六、今天的重點(diǎn)提示

A.主從連接方式:

這里對于開始學(xué)習(xí)的朋友來說,有點(diǎn)不理解(因?yàn)榛旧隙贾来诘耐ㄐ?,主機(jī)Tx對應(yīng)從機(jī)Rx),還以為“主機(jī)的MOSI”連接的是“從機(jī)的MISO”,其實(shí)這里是和串口的區(qū)別之一(當(dāng)然還有其他,這里不講解)。具體請看參考手冊。

B.常見問題

之前有寫過關(guān)于SPI主從通信的實(shí)例。但是,我今天專門找了兩套板子來測試,剛開始,通信始終有問題(從機(jī)不停地在接收0x00數(shù)據(jù)),結(jié)果發(fā)現(xiàn)兩板子之間沒有共地,找了根線接上,數(shù)據(jù)沒有不停地接收了。

但新的問題又來了,開始接收的數(shù)據(jù)正確,一旦出錯了一位,后面接收到的數(shù)據(jù)都不對了。我是不停的查看代碼,開始始終懷疑代碼有問題,但把代碼該了無數(shù)次(不知道好多次)之后,手冊看了幾遍,上網(wǎng)也查了很久,還是一樣的現(xiàn)象,結(jié)果,我用示波器測試了一下通信的時鐘(SCK),頻率有幾M, 波形間隔大概只有100ns,我就懷疑問題出在通信的線上,線太長了(估計有四五十厘米),果不然,使用短點(diǎn)的通信線,問題就好了。

說實(shí)話,一個不起眼的問題,可能會耗掉你無數(shù)的時間,這里我將我走過的彎路告訴大家,希望不要走這條彎路,今后的分享中我也會將一些容易出錯的地方拿到這里講解。

下載方式:長按網(wǎng)站 ->選擇復(fù)制 ->打開

或者復(fù)制網(wǎng)站在電腦上下載也可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2264

    文章

    10854

    瀏覽量

    354298
  • SPI
    SPI
    +關(guān)注

    關(guān)注

    17

    文章

    1688

    瀏覽量

    91212
  • 主從通信
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    3529
收藏 人收藏

    評論

    相關(guān)推薦

    DS1302芯片與FPGA之間SPI通信原理

    本文通過以DS1302芯片為基礎(chǔ),介紹該芯片與FPGA之間SPI通信原理,詳細(xì)描述硬件設(shè)計原理及FPGA SPI接口驅(qū)動設(shè)計。
    的頭像 發(fā)表于 10-24 14:16 ?203次閱讀
    DS1302芯片與FPGA之間<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>原理

    單片機(jī)SPI通信實(shí)現(xiàn)

    在深入探討單片機(jī)(如基于STM32、AVR、PIC等)如何通過SPI(Serial Peripheral Interface)進(jìn)行通信之前,我們先概述SPI
    的頭像 發(fā)表于 09-09 17:00 ?350次閱讀

    探索SPI單線傳輸模式中時鐘線與數(shù)據(jù)傳輸?shù)暮喕?/a>

    通信的簡化需求也日益增加。在這種背景下,SPI的單線傳輸模式成為了一個備受關(guān)注的解決方案。 SPI協(xié)議概述 SPI協(xié)議是一種常用的同步串行通信
    的頭像 發(fā)表于 05-28 18:26 ?1055次閱讀

    請問STM32F103 I2C通信SPI通信哪種方式更穩(wěn)定?

    STM32F103這顆料I2C通信SPI通信哪種方式更穩(wěn)定?
    發(fā)表于 03-22 06:24

    stm32的qspi有主從機(jī)之分嗎?

    請教一下,stm32的qspi有主從機(jī)之分嗎,我看的是stm32wb55系列的手冊,clk只有輸出,是只能配置成主機(jī)模式嗎?還是說qspi是不分主從機(jī)機(jī)的?
    發(fā)表于 03-21 08:20

    SPI雙機(jī)通信有極低概率丟幀要如何處理?

    SPI主從機(jī)通信主從站用的是相同的板子,主站采用定時器觸發(fā)中斷發(fā)收,從站也采用中斷觸發(fā)發(fā)收,未使用DMA,可以正常通信收發(fā)數(shù)據(jù),
    發(fā)表于 03-18 06:07

    請問STM32F405RGT6的SPI通信最高時鐘頻率是多少?

    STM32F405RGT6的SPI通信最高時鐘頻率是多少?
    發(fā)表于 03-15 08:23

    PSoC6 SPI主從通信異常的原因?

    兩塊PSoC6 BLE Pioneer Kit CY8CKIT-062-BLE 開發(fā)板,都燒錄CE22112001 - Low_Level_DMA_SPI_Master工程,每個板子各自短接主從
    發(fā)表于 02-18 08:58

    STM32F103RCT6使用SPI與ADS1271通信的代碼

    STM32F103RCT6使用SPI與ADS1271通信的代碼,實(shí)在搞不懂時鐘信號
    發(fā)表于 01-17 20:54

    使用STM32F4芯片驗(yàn)證SPI功能的問題分析

    有人使用STM32F4芯片驗(yàn)證SPI功能。當(dāng)使用片內(nèi)兩個SPI模塊基于中斷方式進(jìn)行收發(fā)時,發(fā)現(xiàn)總是出現(xiàn)接收數(shù)據(jù)丟失的情況,貌似總丟失末尾2個數(shù)據(jù)。代碼使用HAL庫提供的API函數(shù)。這是怎么回事呢?
    的頭像 發(fā)表于 12-11 09:20 ?2054次閱讀
    使用<b class='flag-5'>STM32</b>F4芯片驗(yàn)證<b class='flag-5'>SPI</b>功能的問題分析

    利用stm32與AD7768通信讀取電壓,用SPI好還是引腳控制模式好??

    利用stm32與AD7768通信讀取電壓,用SPI還是引腳控制模式好點(diǎn)!有這樣用過的嗎
    發(fā)表于 12-11 07:57

    SPI接口的相關(guān)介紹

    軸加速度傳感器,下面就由小編帶各位小伙伴詳細(xì)了解一下SPI接口。六軸加速度傳感器使用SPI總線進(jìn)行設(shè)置與數(shù)據(jù)傳輸。SPI通信原理很簡單,它以主從
    的頭像 發(fā)表于 12-06 15:49 ?1218次閱讀
    <b class='flag-5'>SPI</b>接口的相關(guān)介紹

    AD9945與STM32之間通過SPI通信,通信時序怎么寫?

    我最近做一個CCD的項(xiàng)目,需要用到AD9945,因?yàn)樗念l率高,但是AD9945怎么與STM32F103外部引腳連接,他輸出的12位并行數(shù)據(jù)接到哪里?還有AD9945與STM32之間通過SPI
    發(fā)表于 12-05 08:28

    SPI通信協(xié)議原理是什么

    UART串口通信中的數(shù)據(jù)只能一位一位的傳輸,如果數(shù)據(jù)量比較大的時候,傳輸速率會受到很大影響,此時我們就可以考慮使用同步串行通信了,比如SPI。 SPI
    的頭像 發(fā)表于 11-24 17:37 ?980次閱讀
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>協(xié)議原理是什么

    基于單片機(jī)的主從紅外通信的系統(tǒng)設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于單片機(jī)的主從紅外通信的系統(tǒng)設(shè)計.pdf》資料免費(fèi)下載
    發(fā)表于 11-16 15:56 ?4次下載
    基于單片機(jī)的<b class='flag-5'>主從</b>紅外<b class='flag-5'>通信</b>的系統(tǒng)設(shè)計