91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

STM32嵌入式開發(fā) ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2020-09-24 14:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文主要介紹STM32的SPI接口、cubeMX軟件配置SPI接口和分析SPI相關代碼。

STM32之SPI簡介:

SPI協(xié)議【Serial Peripheral Interface】

串行外圍設備接口,是一種高速全雙工的通信總線。主要用在MCU與FLASHADCLCD等模塊之間的通信。

SPI信號

SPI 共包含 4 條總線。

SS(Slave Select):片選信號線,當有多個SPI 設備與 MCU 相連時,每個設備的這個片選信號線是與 MCU 單獨的引腳相連的,而其他的 SCK、MOSI、MISO 線則為多個設備并聯(lián)到相同的 SPI 總線上,低電平有效。

SCK (Serial Clock):時鐘信號線,由主通信設備產生,不同的設備支持的時鐘頻率不一樣,如 STM32 的 SPI 時鐘頻率最大為 f PCLK /2。

MOSI (Master Output Slave Input):主設備輸出 / 從設備輸入引腳。主機的數(shù)據從這條信號線輸出,從機由這條信號線讀入數(shù)據,即這條線上數(shù)據的方向為主機到從機。

MISO(Master Input Slave Output):主設備輸入 / 從設備輸出引腳。主機從這條信號線讀入數(shù)據,從機的數(shù)據則由這條信號線輸出,即在這條線上數(shù)據的方向為從機到主機。

其中SCK,MOSI,MISO是接在一起的,NSS分別接到不同的IO管腳控制。主器件要和從器件通信就先拉低對應從器件的NSS管腳使能。默認狀態(tài)IO1,IO2,IO3全為高電平,當主器件和從器件1通信時,拉低IO1管腳使能從器件1。而從器件2,3不使能,不作響應。下圖是主器件與多個從器件通信圖。

SPI特性

單次傳輸可選擇為 8 或 16 位。波特率預分頻系數(shù)(最大為 fPCLK/2) 。時鐘極性(CPOL)和相位(CPHA)可編程設置。數(shù)據順序的傳輸順序可進行編程選擇,MSB 在前或 LSB 在前。

注:MSB(Most Significant Bit)是“最高有效位”,LSB(Least Significant Bit)是“最低有效位”。

可觸發(fā)中斷的專用發(fā)送和接收標志??梢允褂?DMA 進行數(shù)據傳輸操作。下圖是STM32的SPI框架圖。

如上圖,MISO數(shù)據線接收到的信號經移位寄存器處理后把數(shù)據轉移到接收緩沖區(qū),然后這個數(shù)據就可以由我們的軟件從接收緩沖區(qū)讀出了。當要發(fā)送數(shù)據時,我們把數(shù)據寫入發(fā)送緩沖區(qū),硬件將會把它用移位寄存器處理后輸出到 MOSI數(shù)據線。SCK 的時鐘信號則由波特率發(fā)生器產生,我們可以通過波特率控制位(BR)來控制它輸出的波特率。

控制寄存器 CR1掌管著主控制電路,STM32的 SPI模塊的協(xié)議設置(時鐘極性、相位等)就是由它來制定的。而控制寄存器 CR2則用于設置各種中斷使能。

最后為 NSS引腳,這個引腳扮演著 SPI協(xié)議中的SS片選信號線的角色,如果我們把 NSS引腳配置為硬件自動控制,SPI模塊能夠自動判別它能否成為 SPI的主機,或自動進入 SPI從機模式。但實際上我們用得更多的是由軟件控制某些 GPIO引腳單獨作為SS信號,這個 GPIO引腳可以隨便選擇。

SPI時鐘時序

根據時鐘極性(CPOL)及相位(CPHA)不同,SPI有四種工作模式。

時鐘極性(CPOL)定義了時鐘空閑狀態(tài)電平:

CPOL=0為時鐘空閑時為低電平

CPOL=1為時鐘空閑時為高電平

時鐘相位(CPHA)定義數(shù)據的采集時間。

CPHA=0:在時鐘的第一個跳變沿(上升沿或下降沿)進行數(shù)據采樣。

CPHA=1:在時鐘的第二個跳變沿(上升沿或下降沿)進行數(shù)據采樣。

CubeMX軟件配置SPI:

下面繼續(xù)介紹cubeMX軟件配置STM32L152的SPI接口方法。

(1)打開軟件,選擇對應芯片后,配置好時鐘源;

(2)勾選SPI1為全雙工,硬件NSS關閉,如下圖:

(3)勾選好后,PA5、PA6、PA7如下圖,在配置PA4為普通io口,gpio_output

(4)SPI1的參數(shù)配置選擇默認,如下圖所示

(5)生成代碼,保存即可。

HAL庫的SPI函數(shù)分析:

下面具體分析下生成的SPI函數(shù)和函數(shù)調用。

SPI_HandleTypeDef hspi1; //SPI結構體類定義,下面看其結構體內部的聲明。

下面分析SPI的初始化函數(shù):

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi){GPIO_InitTypeDef GPIO_InitStruct;if(hspi->Instance==SPI1){/* USER CODE BEGIN SPI1_MspInit 0 *//* USER CODE END SPI1_MspInit 0 *//* Peripheral clock enable */__HAL_RCC_SPI1_CLK_ENABLE();//使能SPI1時鐘/**SPI1 GPIO ConfigurationPA5 ------> SPI1_SCKPA6 ------> SPI1_MISOPA7 ------> SPI1_MOSI*/GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);//配置SPI的數(shù)據線和時鐘線/* USER CODE BEGIN SPI1_MspInit 1 *//* USER CODE END SPI1_MspInit 1 */} static 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;//數(shù)據位為8位hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;//CPOL=0,lowhspi1.Init.CLKPhase = SPI_PHASE_1EDGE;//CPHA為數(shù)據線的第一個變化沿hspi1.Init.NSS = SPI_NSS_SOFT;//軟件控制NSShspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;//2分頻,32M/2=16MHzhspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;//最高位先發(fā)送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(__FILE__, __LINE__);}}

利用SPI接口發(fā)送和接收數(shù)據主要調用以下兩個函數(shù):

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);//發(fā)送數(shù)據HAL_StatusTypeDefHAL_SPI_Receive(SPI_HandleTypeDef*hspi,uint8_t*pData,uint16_tSize,uint32_tTimeout);//接收數(shù)據

原文標題:STM32CubeMX-HAL庫的SPI接口使用

文章出處:【微信公眾號:STM32嵌入式開發(fā)】歡迎添加關注!文章轉載請注明出處。

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

    關注

    2309

    文章

    11162

    瀏覽量

    373448
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1885

    瀏覽量

    101239

原文標題:STM32CubeMX-HAL庫的SPI接口使用

文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    SPI NOR Flash和SPI NAND Flash存儲芯片的區(qū)別

    SPI NOR Flash與SPI NAND Flash并非相互替代,而是互補關系。SPI NOR勝在讀取速度快、使用簡單、可靠性高,是代碼存儲的理想選擇。
    的頭像 發(fā)表于 01-29 16:58 ?467次閱讀
    <b class='flag-5'>SPI</b> NOR Flash和<b class='flag-5'>SPI</b> NAND Flash存儲芯片的區(qū)別

    瑞芯微(EASY EAI)RV1126B SPI使用

    1.SPI簡介SPI是串行外設接口(SerialPeripheralInterface)的縮寫,是Motorola公司推出的一種同步串行接口技術,是一種高速、全雙工、同步的通信總線在用
    的頭像 發(fā)表于 01-03 14:00 ?1738次閱讀
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>SPI</b>使用

    國產SPI NOR Flash接口閃存介紹

    在當今各類電子設備對存儲性能要求日益提升的背景下,SPI NOR Flash憑借其高速讀取、低功耗及靈活接口等優(yōu)勢,成為嵌入式系統(tǒng)代碼存儲的關鍵元件。GT25Q系列SPI NOR Fl
    的頭像 發(fā)表于 12-26 11:51 ?453次閱讀

    高性能SPI NOR FLASH芯片ZB25VQ系列推薦

    在嵌入式系統(tǒng)、物聯(lián)網設備及各類存儲應用中,SPI NOR FLASH芯片因其接口簡單、功耗低、讀寫速度快等特點,成為代碼存儲與數(shù)據緩存的常見選擇。SPI NOR FLASH是一種基于
    的頭像 發(fā)表于 12-01 14:52 ?626次閱讀

    GPIOB模擬spi的方法及l(fā)cd屏幕的接入

    越高,數(shù)據傳輸速率越快。由于spi接口較為簡單,同時《RISC-V架構與嵌入式開發(fā)快速入門》書中也詳細介紹過,在此原理部分介紹從略。 二、spi接口及l(fā)cd主要
    發(fā)表于 10-30 07:59

    SPI開發(fā)實戰(zhàn):硬件電路設計與CH390H應用全攻略

    、Air780EPM的SPI功能支持 在Air780EPM中,SPI接口通過特定GPIO引腳實現(xiàn),需結合LuatOS的API進行配置。通過合理設計和調試,可高效連接多種外設,擴展物聯(lián)網
    的頭像 發(fā)表于 09-18 14:08 ?862次閱讀
    <b class='flag-5'>SPI</b>開發(fā)實戰(zhàn):硬件電路設計與CH390H應用全攻略

    深入剖析SPI協(xié)議

    SPI,全稱(Serial Peripheral interface)是由摩托羅拉公司首先定義的協(xié)議,中文名為串型外圍設備接口。SPI是一種高速全雙工的總線協(xié)議。
    的頭像 發(fā)表于 08-21 15:04 ?4042次閱讀
    深入剖析<b class='flag-5'>SPI</b>協(xié)議

    LTM2895 100MHz隔離型DAC SPI串行接口技術手冊

    LTM2895 是一款采用 DAC 控制信號的高速隔離型 μModule ^?^ (微型模塊) SPI 接口,該器件專為隔離LTC 的通用型 DAC 系列和隔離通用型 SPI 接口而設
    的頭像 發(fā)表于 06-03 10:04 ?1248次閱讀
    LTM2895 100MHz隔離型DAC <b class='flag-5'>SPI</b>串行<b class='flag-5'>接口</b>技術手冊

    第十七章 SPI

    本篇文章介紹了W55MH32的SPI接口,可工作于SPI或I2S模式,支持半 / 全雙工、主從操作,具可編程時鐘極性/相位等特征。闡述了主從模式配置、DMA 通信等,介紹
    的頭像 發(fā)表于 05-28 17:29 ?1237次閱讀
    第十七章 <b class='flag-5'>SPI</b>

    MAX3420E USB外設控制器,SPI接口技術手冊

    協(xié)議,如錯誤校驗和總線重試。通過工作頻率高達26MHz的SPI?接口訪問寄存器組,可對MAX3420E進行控制。利用簡易的3線或4線SPI接口,可為任何
    的頭像 發(fā)表于 05-23 11:35 ?1048次閱讀
    MAX3420E USB外設控制器,<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>技術手冊

    MAX3421E USB外設/主機控制器,SPI接口技術手冊

    串行接口引擎(SIE)處理底層USB協(xié)議,如錯誤校驗和總線重試。通過頻率高達26MHz的SPI?接口訪問寄存器組,實現(xiàn)MAX3421E的控制。利用簡易的3線或4線SPI
    的頭像 發(fā)表于 05-22 16:39 ?1566次閱讀
    MAX3421E USB外設/主機控制器,<b class='flag-5'>SPI</b><b class='flag-5'>接口</b>技術手冊

    基于RK3576開發(fā)板的SPI使用說明

    SPI是串行外設接口(Serial Peripheral Interface)的縮寫,是 Motorola 公司推出的一種同步串行接口技術,是一種高速、全雙工、同步的通信總線在用戶空間的應用程序中
    的頭像 發(fā)表于 05-07 10:31 ?1612次閱讀
    基于RK3576開發(fā)板的<b class='flag-5'>SPI</b>使用說明

    串行通信接口SPI與QSPI的區(qū)別

    在嵌入式系統(tǒng)的世界里,選擇正確的通信技術可以對項目的性能和可擴展性產生重大影響。讓我們比較兩個流行的串行通信接口SPI(串行外設接口)和QSPI(四路SPI)。
    的頭像 發(fā)表于 04-09 15:24 ?3269次閱讀
    串行通信<b class='flag-5'>接口</b><b class='flag-5'>SPI</b>與QSPI的區(qū)別

    【CW32模塊使用】0.96寸SPI單色屏

    硬件SPI軟件SPI相比,硬件SPI是靠硬件上面的SPI控制器,所有的時鐘邊緣采樣,時鐘發(fā)生,還有時序控制,都是由硬件完成的。它降低了CP
    的頭像 發(fā)表于 03-29 17:29 ?3112次閱讀
    【CW32模塊使用】0.96寸<b class='flag-5'>SPI</b>單色屏

    STM32CUBEMX使用硬件SPI軟件SPI的區(qū)別是什么?

    在使用CUBEMX生成的代碼 使用硬件SPI的速度 比 使用軟件模擬的SPI速度要慢幾倍 (已經在硬件S
    發(fā)表于 03-13 07:21