色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于STM32編寫一個SPI接口例程

冬至子 ? 來源:物聯網知識 ? 作者:跋扈洋 ? 2023-10-31 15:53 ? 次閱讀

引言

SPI是串行外設接口的縮寫,是一種高速的,全雙工,同步的通信總線。由于SPI高速和同步的特性,使其成為嵌入式系統和小型設備中使用最廣泛的幾種通信接口之一。本文將詳細講解一下SPI,并且最后基于STM32編寫一個例程。

介紹

SPI簡介

SPI(Serial Peripheral Interface)是一種串行外設接口,用于在微控制器MCU)或數字信號處理器DSP)等主設備與外部設備之間進行通信。SPI的設計旨在實現高速數據傳輸和簡單的硬件實現。

SPI接口通常由一個主設備(Master)和一個或多個從設備(Slave)組成。主設備控制通信的時序和數據傳輸,而從設備根據主設備的指令進行響應。SPI通信基于全雙工傳輸方式,主設備和從設備可以同時發送和接收數據。

物理層

SPI通信中的數據傳輸通過四根線實現:

  • SCLK(Serial Clock):時鐘線,由主設備產生,并控制數據的傳輸速度。不同的設備支持的最
    高時鐘頻率不同,兩個設備之間通訊時,通訊速率受限于低速設備。
  • MOSI(Master Output Slave Input):主設備輸出線,負責將數據從主設備發送到從設備。主機的數據從這條信號線輸出,從機由這條信號線讀入主機發送的數據,即這條線上數據的方向為主機到從機。
  • MISO(Master Input Slave Output):主設備輸入線,負責將數據從從設備發送到主設備。
  • SS(Slave Select):從設備選擇線,用于選擇特定的從設備與主設備進行通信。當有多個從設備時,上面的三條線是共同使用的,而 NSS 則是用來區分多個不同的設備,當主機需要選擇某個從設備時,使用 NSS 信號線來尋址,把該從設備的 NSS 信號線設置為低電平,則該從設備被選擇,片選有效,然后主機與被選擇的從設備開始通訊。

圖片

SPI通信中的數據傳輸是基于幀(Frame)的概念,每個幀由一個傳輸字節(Byte)組成。主設備通過時鐘線控制數據傳輸的時序,并通過主輸出線(MOSI)發送數據,從設備則通過主輸入線(MISO)將數據發送回主設備。

協議層

通訊的起始和停止信號

當 NSS 信號線由高變低,是 SPI 通訊的起始信號。NSS 是每個從機各自獨占的信號線,當從機從自己的 NSS 線檢測到起始信號后,就知道自己被主機選中了 ,準備與主機通訊。NSS 由低變高,是 SPI 通訊的停止信號,表示本次通訊結束,從機的選中狀態被取消。

圖片

SPI 模式

SPI通信中存在四種常見的模式,用于描述主設備和從設備之間數據傳輸的時序和極性。他們的主要區別是總線空閑時 SCK 的時鐘狀態以及數據采樣時刻。這是通過 SPI_CR 寄存器的 CPOL 和 CPHA 位來控制。這些模式由兩個參數定義:時鐘極性(CPOL)和時鐘相位(CPHA)。
時鐘極性 CPOL 是指 SPI 通訊設備處于空閑狀態時,SCK 信號線的電平信號(即 SPI 通訊開始前、NSS 線為高電平時 SCK 的狀態)。CPOL=0 時,SCK 在空閑狀態時為低電平,CPOL=1 時,則相反。
時鐘相位 CPHA 是指數據的采樣的時刻,當 CPHA=0 時,MOSI 或 MISO 數據線上的信號將會在 SCK 時鐘線的“奇數邊沿(串行同步時鐘的第一個跳變沿)”被采樣。當 CPHA=1 時,數據線在 SCK 的“偶數邊沿(串行時鐘的第二個跳變沿)”。

圖片
圖片

  • 模式0(CPOL = 0,CPHA = 0):
    時鐘極性(CPOL)為低電平。
    時鐘相位(CPHA)為下降沿采樣。
    數據在時鐘的下降沿進行采樣,數據的變化在時鐘的上升沿進行傳輸。
    數據在時鐘的空閑狀態為低電平。
  • 模式1(CPOL = 0,CPHA = 1):
    時鐘極性(CPOL)為低電平。
    時鐘相位(CPHA)為上升沿采樣。
    數據在時鐘的上升沿進行采樣,數據的變化在時鐘的下降沿進行傳輸。
    數據在時鐘的空閑狀態為低電平。
  • 模式2(CPOL = 1,CPHA = 0):
    時鐘極性(CPOL)為高電平。
    時鐘相位(CPHA)為下降沿采樣。
    數據在時鐘的下降沿進行采樣,數據的變化在時鐘的上升沿進行傳輸。
    數據在時鐘的空閑狀態為高電平。
  • 模式3(CPOL = 1,CPHA = 1):
    時鐘極性(CPOL)為高電平。
    時鐘相位(CPHA)為上升沿采樣。
    數據在時鐘的上升沿進行采樣,數據的變化在時鐘的下降沿進行傳輸。
    數據在時鐘的空閑狀態為高電平。

這四種模式的選擇取決于主設備和從設備之間的時鐘和數據采樣方式。具體選擇哪種模式取決于所使用的設備和應用的要求,以確保正確的數據傳輸和通信。

優缺點

優點

SPI接口具有以下幾個優點:

  • 高速數據傳輸:SPI接口通常能夠提供較高的數據傳輸速率,特別適用于對速度要求較高的應用。由于SPI使用全雙工通信方式,數據可以同時在主設備和從設備之間傳輸,實現更快的數據交換速度。
  • 簡單硬件實現:SPI接口的硬件實現相對簡單,通常只需要少量的引腳和簡單的電路即可。SPI接口沒有復雜的協議和通信控制器,因此在嵌入式系統和小型設備中使用SPI接口可以減少成本和復雜性。
  • 靈活性:SPI接口支持點對點和多點通信。主設備可以連接多個從設備,每個從設備都有一個獨立的片選信號(Slave Select),可以根據需要選擇與主設備進行通信的從設備。這種靈活性使得SPI接口適用于連接多個外部設備或模塊的應用場景。
  • 可靠性:SPI接口通常在短距離內進行通信,信號傳輸的距離相對較短,因此具有較低的傳輸誤差和干擾風險。此外,SPI接口通常使用全雙工通信,主設備和從設備可以同時發送和接收數據,從而提高了通信的可靠性。
  • 應用廣泛:SPI接口在各種領域都得到廣泛應用。它常用于連接各種外部設備,如傳感器、存儲器(如閃存和EEPROM)、顯示器、數字轉換器ADCDAC)等。由于其高速性和靈活性,SPI接口在通信和數據傳輸方面提供了一種有效的解決方案。

缺點

盡管SPI接口具有許多優點,但也存在一些缺點需要考慮:

  • 引腳占用:SPI通信通常需要使用多個引腳,包括時鐘線、數據輸入線、數據輸出線和片選信號線。這可能對系統設計帶來一定的復雜性,并且在引腳資源有限的情況下可能會造成問題。
  • 距離限制:由于SPI通信通常是基于并行電平傳輸,其傳輸距離受到電信號衰減和干擾的限制。通信距離相對較短,一般在幾米以內。對于需要較長距離傳輸的應用,SPI可能不是最佳選擇。
  • 缺乏標準化:SPI接口本身沒有嚴格的標準化規范,導致不同設備和廠商可能會有不同的實現方式和特定的通信協議。這可能會導致兼容性問題,需要針對不同設備進行適配和定制。
  • 無差錯校驗:SPI協議本身沒有提供內置的差錯檢測和校驗機制。這意味著在數據傳輸過程中,如果發生傳輸錯誤,接收方無法直接檢測到或糾正錯誤。對于對數據完整性要求較高的應用,需要額外的機制來確保數據的可靠性。
  • 僅適用于點對點或簡單拓撲:SPI接口通常適用于點對點或簡單的拓撲結構,其中一個主設備控制一個或多個從設備。對于復雜的網絡結構或大規模系統,SPI的連接和管理可能變得復雜,并且不容易擴展和維護。

使用例程

基于STM32的SPI通信

硬件連接

圖片

軟件實現

  1. 首先是使能引腳,選擇 SPI1 的雙全工模式。選擇 PD3 作為片選腳,也就是 NSS 信號線,產生起始和停止信號。
    圖片
    圖片
  2. 將 PD3 初始化為推挽輸出??梢钥吹?3 個 SPI 引腳都是使用 GPIO 的復用模式。
  3. SPI參數配置
    圖片
  4. 生成的程序里,主要的配置信息如下。
void MX_SPI1_Init(void)
{
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;//主機模式
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;//全雙工
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;//數據位為八位
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;//CPOL=0
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;//CPHA為數據線的奇變化沿
  hspi1.Init.NSS = SPI_NSS_SOFT;//軟件控制NSS
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;//4分頻,84MHz/4=21MHz
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;//最高位先發送
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;//TIMODE模式關閉
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;//CRC關閉
  hspi1.Init.CRCPolynomial = 10;//默認值,無效
  if (HAL_SPI_Init(&hspi1) != HAL_OK)////初始化
  {
    Error_Handler();
  }
}

總結

在現如今數據量劇增的時代,SPI這種通信速度快的通信接口以后一定會使用更加頻繁,所以還是要加以學習。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355739
  • EEPROM
    +關注

    關注

    9

    文章

    1019

    瀏覽量

    81560
  • 時鐘相位
    +關注

    關注

    0

    文章

    2

    瀏覽量

    5942
  • SPI接口
    +關注

    關注

    0

    文章

    258

    瀏覽量

    34373
  • 數字信號處理器

    關注

    5

    文章

    462

    瀏覽量

    27339
收藏 人收藏

    評論

    相關推薦

    STM32 SPI基礎內容

    、存儲芯片、溫度傳感器等眾多器件都有使用SPI接口通信。 這些器件通常作為從設備,單片機作為主設備來控制它們,今天就結合STM32來分析SPI
    的頭像 發表于 08-19 09:14 ?3319次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>SPI</b>基礎內容

    請問有SPI接口的wifi模塊例程嗎?

    STM32spi接口的wifi開發例程嗎?
    發表于 02-26 01:19

    SPI協議接口例程改寫任務要求

    文章目錄任務要求SPI協議接口例程改寫任務要求練習通過SPI總線實現OLED屏幕顯示。顯示自己的學號和姓名。本人所用開發板:野火STM32F
    發表于 08-16 06:36

    STM32 SPI協議(7針)接口下的OLED屏顯示 精選資料推薦

    ;代碼編寫燒錄:KEIL5所用協議:SPI;所用例程來源:http://www.lcdwiki.com/zh/0.96inch_SPI_OLED_ModuleSPI協議
    發表于 08-24 06:57

    0.96_OLED顯示屏_STM32系列_SPI_例程

    0.96OLED顯示屏_STM32系列_SPI_例程.rar
    發表于 07-12 10:36 ?186次下載

    分享LCD-12832的STM32驅動例程

    分享LCD-12832的STM32驅動例程
    發表于 04-01 16:11 ?80次下載

    SPI FLASH LittleFS文件系統例程資料免費下載

    SPI FLASH LittleFS文件系統例程,基于STM32F103+STM32Cube開發的詳細資料免費下載。
    發表于 02-18 08:00 ?36次下載
    <b class='flag-5'>SPI</b> FLASH LittleFS文件系統<b class='flag-5'>例程</b>資料免費下載

    STM32SPI接口、cubeMX軟件配置SPI接口和分析SPI相關代碼

    本文主要介紹STM32SPI接口、cubeMX軟件配置SPI接口和分析SPI相關代碼。
    的頭像 發表于 09-24 14:09 ?1.6w次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>、cubeMX軟件配置<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>和分析<b class='flag-5'>SPI</b>相關代碼

    STM32F4 SPI-FLASH實驗例程

    STM32F4 SPI-FLASH實驗例程(java的哪個版本用于嵌入式開發)-STM32F4 SPI-FLASH實驗
    發表于 07-30 16:01 ?23次下載
    <b class='flag-5'>STM32</b>F4 <b class='flag-5'>SPI</b>-FLASH實驗<b class='flag-5'>例程</b>

    Proteus編寫STM32F1 LED例程

    Proteus編寫STM32F1 LED例程前提新建工程建立代碼工程仿真最后前提1.已下載并破解安裝好proteus2.Proteus里
    發表于 12-22 18:55 ?1次下載
    Proteus<b class='flag-5'>編寫</b><b class='flag-5'>STM32</b>F1 LED<b class='flag-5'>例程</b>

    用HAL庫函數實現STM32的兩SPI接口相互通信

    最近要測試兩設備間的SPI通信,可手上只有塊開發板,雖然將開發板上SPI1接口的MISO與MOSI短接之后可以實現自發自收,但是我還想多
    發表于 12-22 19:17 ?9次下載
    用HAL庫函數實現<b class='flag-5'>一</b>片<b class='flag-5'>STM32</b>的兩<b class='flag-5'>個</b><b class='flag-5'>SPI</b><b class='flag-5'>接口</b>相互通信

    STM32CubeMX-HAL庫的SPI接口使用

    本文主要介紹STM32SPI接口、cubeMX軟件配置SPI接口和分析SPI相關代碼。
    發表于 02-08 15:27 ?10次下載
    <b class='flag-5'>STM32</b>CubeMX-HAL庫的<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>使用

    STM32微控制器上的Octo-SPI接口

    STM32微控制器上的Octo-SPI接口
    發表于 11-21 08:11 ?4次下載
    <b class='flag-5'>STM32</b>微控制器上的Octo-<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>

    基于STM32SPI通信

    SPI是串行外設接口的縮寫,是種高速的,全雙工,同步的通信總線。由于SPI高速和同步的特性,使其成為嵌入式系統和小型設備中使用最廣泛的幾種通信接口
    的頭像 發表于 06-21 15:08 ?2838次閱讀
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>SPI</b>通信

    STM32SPI控制器實現SPI

    SPI種高速的,全雙工,同步的通信總線,原理和使用簡單,占用引腳資源少,是種常用的通信方式。STM32通常有2~3
    發表于 07-22 11:47 ?3791次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SPI</b>控制器實現<b class='flag-5'>SPI</b>
    主站蜘蛛池模板: 亲胸摸下面激烈免费网站| 国产精品久久毛片A片软件爽爽 | 免费人成网站永久| 两个客户一起吃我的奶| 蜜桃99影院| 男人日女人的b| 蜜桃麻豆WWW久久囤产精品免费| 久久涩视频| 久久香蕉国产线看观看首页| 久久久久久91香蕉国产| 老师我好爽再深一点老师好涨| 女教师公车痴汉在线播放 | 拉菲娱乐主管高工资q39709| 免费果冻传媒在线完整观看| 青青草原影视| 亚洲 自拍 清纯 综合图区 | 婷婷射精AV这里只有精品| 亚洲黄网站wwwwww| 91久久99久91天天拍拍| zoovideo人与驴mp4| 国产亚洲精品看片在线观看| 污污又黄又爽免费的网站 | 亚洲欧美视频在线| 2022久久精品国产色蜜蜜麻豆| 草久热的视频在线观看| 韩国女人高潮嗷嗷叫视频| 男人插女人逼逼| 无羞耻肉动漫在线观看| 中文无码第3页不卡av| 芳草地社区在线视频| 久久99国产精品二区不卡| 青柠在线视频| 亚洲精品视频在线播放| 99成人在线| 国产香蕉视频在线观看| 男人被绑着强行摸j| 亚洲成人综合在线| 99久久无码一区人妻A片竹菊| 国产无遮挡色视频免费观看性色 | 日韩美一区二区| 伊人草久久|