SPI 通信-stm32入門

本節我們將繼續學習下一個通信協議 SPI,SPI 通信和我們剛學完的 I2C 通信差不多。兩個協議的設計目的都一樣,都是實現主控芯片和各種外掛芯片之間的數據交流,有了數據交流的能力,我們主控芯片就可以掛載并操縱各式各樣的外部芯片,來實現一個功能更加強大的控制系統。那本節 SPI 通信的安排和上一節 I2C 的也是一樣,我們先學習 SPI 協議的軟硬件規定,先用軟件模擬的 SPI,實現讀寫 W25Q64 Flash 存儲器;之后,我們再學習 STM32 中的 SPI 外設,再用硬件 SPI 實現同樣的功能。

W25Q64 是一個 Flash 存儲器芯片,它內部可以存儲 8 M 字節的數據,并且是掉電不丟失的。如果你之后的項目中,需要存儲大量的數據,就可以考慮一下外掛這個芯片來實現。

那在這里,我們用 4 根 SPI 通信線把 W25Q64 和 STM32 連接在一起,STM32 操作引腳電平,實現 SPI 通信的時序,進而實現讀寫存儲器芯片的目的。

那在 OLED 上,我們可以看到程序測試的現象:第一行,顯示的是 ID 號,MID 是廠商 ID,讀出來是 0xEF,DID 是設備 ID,讀出來是 0x4017,這些 ID 號都是固定的數值,在手冊里有寫,我們用 SPI 讀寫 ID 號,就可以進行最簡單的測試了,如果讀取 ID 號和手冊里 一樣,說明 SPI 通信基本沒問題。之后,既然是存儲器芯片,我們肯定就是寫幾個數據,再讀出來,看看對不對了,這里第二行,W,寫的內容是 4 個字節:0x01,02,03,04。然后第三行,R,就是讀到的內容了,顯示出來,可以看到也是 0x01,02,03,04,讀出來和寫入的一樣,這說明讀寫存儲器芯片沒問題。當然更進一步的測試,比如讀寫更多的數據、寫入的數據是不是掉電不丟失,這些我們之后寫程序的時候再來驗證。程序現象就看到這里。

1. SPI 通信簡介

1.1 SPI 的基本功能

SPI(Serial Peripheral Interface,串行外設接口)是由Motorola公司開發的一種通用數據總線

和 I2C 一樣,它們都是通用的數據總線。同時,它們也都是用于主控和外掛芯片之間的通信,應用領域非常相似。當然,I2C 和 SPI,兩者是各有優勢和劣勢的。在某些芯片呢,我們用 I2C 更好,在另一些芯片呢,我們用 SPI 更好。
上一節我們學習 I2C 的時候,可以發現 I2C,無論是硬件電路,還是軟件時序,設計的都是相對比較復雜的。硬件上,我們要配置為開漏外加上拉的模式,軟件上,我們有很多功能和要求,比如,一根通信線兼顧數據收發,應答位的收發、尋址機制的設計等等,最終,通過這么多的設計,就使得 I2C 通信的性價比非常高,I2C 可以在消耗最低硬件資源的情況下,實現最多的功能。在硬件上,無論掛載多少個設備,都只需要兩根通信線,在軟件上,數據雙向通信、應答位,都可以實現。如果把通信協議比作是一個人的話,那 I2C 就屬于精打細算、思維靈活這類型的人,既要實現硬件上最少的通信線,又要實現軟件上最多的功能。最終,I2C 通過精心的設計,也確實實現了這么多功能,可以說是非常的優雅。當然,在這些優雅之中,也隱藏了一個缺點,就是我們上節說的,由于 I2C 開漏外加上拉電阻的電路結構,使得通信線高電平的驅動能力比較弱,這就會導致,通信線由低電平變到高電平的時候,這個上升沿耗時比較長,這會限制 I2C 的最大通信速度,所以,I2C 的標準模式,只有 100 KHz 的時鐘頻率,I2C 的快速模式,也只有 400 KHz,雖然 I2C 協議之后又通過改進電路的方式,設計出了高速模式,可以達到 3.4 MHz,但是高速模式目前普及程度不是很高。所以一般情況下,我們認為 I2C 的時鐘速度最多就是 400 KHz,這個速度,相比較 SPI 而言,還是慢了很多,那了解完 I2C 的優勢和缺點,我們就來看一下 SPI。
在學習之前,簡單概括幾點 SPI 相對于 I2C 的優缺點:
首先,SPI 傳輸更快,SPI 協議并沒有嚴格規定最大傳輸速度,這個最大傳輸速度取決于芯片廠商的設計需求,比如說,我們這個 W25Q64 存儲器芯片,手冊里寫的 SPI 時鐘頻率,最大可達 80 MHz,這比 STM32F1 的主頻還要高。
其次,SPI 的設計比較簡單粗暴,實現的功能沒有 I2C 那么多,所以學習起來,SPI 還是比 I2C 簡單很多的。
最后,SPI 的硬件開銷比較大,通信線的個數比較多,并且通信過程中,經常會有資源浪費的現象,如果繼續把通信協議比作一個人的話,那 SPI 就屬于富家子弟、有錢任性這類型的人,SPI 說,我不在乎我花了多少錢,我只在乎我的任務有沒有最簡單、最快速的完成,這就是 SPI 的風格。
好,經過這么多的對比和鋪墊,大家對 SPI 應該就有了一個第一印象了吧。

四根通信線:SCK(Serial Clock,串行時鐘線)、MOSI(Master Output Slave Input,主機輸出從機輸入)、MISO(Master Input Slave Output,主機輸入從機輸出)、SS(Slave Select,從機選擇)

這是 SPI 通信典型的引腳名稱。當然在實際情況下,這些名稱可能會有別的表述方式。比如,SCK,有的地方可能叫作 SCLK、CLK、CK;MOSI 和 MISO,有的地方可能直接叫作 DO(Data Output)和 DI(Data Input);SS,有的地方也可能叫作 NSS(Not Slave Select)、CS(Chip Select),這些不同的名稱都是一個意思,大家了解一下。那這里,就以 SPI 官方文檔的名稱為準,統一都用這幾個名詞來表示。
那這四個引腳的意義和作用是什么呢?我們繼續往后看

SPI 基本特性是:同步,全雙工

首先既然是同步時序,肯定就得有時鐘線了,所以 SCK 引腳,就是用來提供時鐘信號的,數據位的輸出和輸入,都是在 SCK 的上升沿或下降沿進行的,這樣,數據位的收發時刻就可以明確的確定。并且,同步時序,時鐘快點慢點,或者中途暫停一會兒,都是沒問題的,這就是同步時序的好處。那對照 I2C 總線,這個 SCK,就相當于 I2C 的 SCL,兩者作用相同。
之后,SPI 是全雙工的協議。全雙工:就是數據發送和數據接收單獨各占一條線,發送用發送的線路,接收用接收的線路,兩者互不影響。所以這里,MOSI 和 MISO,就是分別用于發送和接收的兩條線路,MOSI 線,是主機輸出從機輸入,如果是主機接在這條線上,那就是 MO,主機輸出;如果是從機接在這條線上,那就是 SI,從機輸入,意思就是一條通信線,如果主機接在上面配置為輸出,那從機肯定得配置為輸入,才能接收主機的數據對吧。主機和從機不能同時配置為輸出或輸入,要不然就沒法通信了。所以這條 MOSI,就是主機向從機發送數據的線路,那同理,下面這條 MISO,就是主機從從機接收數據的線路,這就是全雙工通信的兩根通信線,那這兩根通信線,加在一起,就相當于 I2C 總線的 SDA,當然 I2C 是一根線兼具發送和接收,是半雙工。這里 SPI 是一根發送、一根接收,是全雙工。全雙工的好處就是簡單高效,輸出線就一直輸出,輸入線就一直輸入,數據流的方向不會改變,也不用擔心發送和接收沒協調好沖突了,但是壞處就是多了一根線,會有通信資源的浪費,這就是全雙工。

支持總線掛載多設備(使用的是 一主多從 的模型)

SPI 僅支持一主多從,不支持多主機,這一點,SPI 從功能上,沒有 I2C 強大。那 I2C,實現一主多從的方式是在起始條件之后,主機必須先發送一個字節進行尋址,用來指定我要跟哪個從機進行通信,所以 I2C 這里,要涉及分配地址和尋址的問題。但是 SPI 表示,你這太麻煩了,我直接大手一揮,再開辟一條通信線,專門用來指定我要跟哪個從機進行通信,所以,這條專門用來指定從機的通信線,就是這里的 SS,從機選擇線。并且,這個 SS 可能不止一條,SPI 的主機表示,我有幾個從機,我就開幾條 SS,所有從機,一人一根,都別搶,我需要找你的時候,我就控制接到你那一根的 SS 線,給你低電平,就說明我要找你了;給你高電平,就說明我不跟你玩了,那這樣一來,指定從機不就是動動手指就能完成的事了么,哪還需要什么分配地址,先發一個字節尋址的操作啊。那這就是 SPI 實現一主多從,指定從機的方式,好處就是方便,壞處就是得加錢(線)。

那最后這里,SPI,沒有寫應答機制的介紹,SPI 沒有應答機制的設計。發送數據就發送,接收數據就接收,至于對面是不是存在,SPI 是不管的。

然后看一下下面的圖片,這些都是采用了 SPI 通信的芯片和模塊。
在這里插入圖片描述
第一個圖,就是我們本節使用的芯片,型號是 W25Q64,是一個 Flash 存儲器,這個模塊的引腳,可以看到和剛才說的并不一樣。這里 CLK 就是 SCK,DI 和 DO 就是 MOSI 和 MISO。那 DI 到底是 MOSI 還是 MISO 呢,我們要看一下這個芯片的身份,顯然,這個芯片接在 STM32 上,應該是從機的身份,所以這里的 DI,數據輸入,就是從機的數據輸入 SI,對應需要接在主機的 MO 上,所以這里的 DI 就是 MOSI,那另一個 DO,就是 MISO 了,一般在這種始終作為從機的設備上,可能會用 DI 和 DO 的簡寫。像 STM32 這種可以進行身份轉換的設備,一般都會把 MOSI、MISO 的全程寫完整,當然,即使它簡寫了,只要明確了它的身份,是主機還是從機,之后再辨別這兩個引腳,應該就好判斷了。那最后一個 CS 片選,其實就是 SS 從機選擇了。

然后繼續下一個模塊,這個是利用 SPI 通信的 OLED 屏幕,上面的引腳也不是標準的名稱,所以這個模塊要查一下手冊,在手冊里有寫的。

之后下一個,這個是一個 2.4 G 無線通信模塊,芯片型號是 NRF24L01,這個芯片使用的就是 SPI 通信協議,要想使用這個芯片來進行無線通信,那就需要利用 SPI,來讀寫這個芯片。

然后最后一個圖片,就是常見的 Micro SD 卡了,這個 SD 卡,官方的通信協議是 SDIO,但是它也是支持 SPI 協議的,我們可以利用 SPI,,對這個 SD 卡進行讀寫操作。

那到這里,我們這個 SPI 通信的大體介紹,就完成了。

接下來我們來看一下 SPI 的硬件和軟件規定。

1.2 SPI 硬件規定

  • 所有SPI設備的SCK、MOSI、MISO分別連在一起
  • 主機另外引出多條SS控制線,分別接到各從機的SS引腳
  • 輸出引腳配置為推挽輸出,輸入引腳配置為浮空或上拉輸入

首先是硬件電路
在這里插入圖片描述
這個圖,就是 SPI 一個典型的應用電路。我們看一下

  1. 左邊這里,是 SPI 主機,主導整個 SPI 總線。主機,一般都是控制器來作,比如 STM32,下面這里,SPI 從機 1、2、3,就是掛載在主機上的從設備了,比如存儲器、顯示屏、通信模塊、傳感器等等等等。
  2. 左邊 SPI 主機實際上引出了 6 根通信線,因為有 3 個從機,所以 SS 線需要 3 根,再加 SCK、MOSI、MISO,就是 6 根通信線,當然 SPI 所有通信線都是單端信號,它們的高低電平都是相對 GND 的電壓差。所以,單端信號,所有的設備還需要供電,這里 GND 的線沒畫出來,但是是必須要接的。然后如果從機沒有獨立供電的話,主機還需要再額外引出電源正極 VCC,給從機供電,這兩根電源線 VCC 和 GND,也要注意接好。
  3. 然后我們看一下這幾根通信線,首先,SCK,時鐘線,時鐘線完全由主機掌控,所以對于主機來說,時鐘線為輸出,對于所有從機來說,時鐘線都為輸入,這樣主機的同步時鐘,就能送到各個從機了。然后下一個,MOSI,主機輸出從機輸入,這里左邊是主機,所以就對應 MO,主機輸出,下面三個都是從機,所以就對應 SI,從機輸入,數據傳輸方向是,主機通過 MOSI 輸出,所有從機通過 MOSI 輸入。接著下一個,MISO,主機輸入從機輸出,左邊是主機,對應 MI,下面三個都是從機,對應 SO,數據傳輸方向是,三個從機通過 MISO 輸出,主機通過 MISO 輸出。

那到這里,SCK、MOSI、MISO 的連接方式我們就清楚了。這就是上面寫的第一條,所有SPI設備的SCK、MOSI、MISO分別連在一起,就是上面圖示的這樣,每條線的數據傳輸方向,圖中都用箭頭標出來了,可以看一下,應該都挺明確的。

之后我們繼續看,時鐘和數據傳輸沒問題了。最后要解決的就是從機的選擇問題了,為了確定通信的目標,主機就要另外引出多條 SS 通信線,分別接到各從機的 SS 引腳,上面圖中有 3 個從機,我們需要在主機另外引出 3 根 SS 選擇線,分別接到每個從機的 SS 輸入端。主機的 SS 線都是輸出,從機的 SS 線都是輸入,SS 線是低電平有效的,主機想指定誰,就把對應的 SS 輸出線置低電平就行了。比如,主機初始化之后,所有的 SS 都輸出高電平,這樣就是誰也不指定。當主機需要和,比如從機 1,進行通信了,主機就把 SS1 線輸出低電平,這樣從機 1 就知道,主機在找我,然后主機在數據引腳進行的傳輸,就只有從機 1 會響應,其他從機的 SS 線是高電平,所以它們都會保持沉默。當主機和從機 1 通信完成之后,就會把 SS1 置回高電平,這樣從機 1 就知道,主機結束了和我的通信。之后主機需要和從機 2 和從機 3 通信時,也是同理,需要找誰通信,就置誰的 SS 為低電平。當然同一時間,主機只能置一個 SS 為低電平,只能選中一個從機,否則,如果主機同時選中多個從機,就會導致數據沖突,這就是 SPI 實現選擇從機的方式。不需要像 I2C 一樣進行尋址,是不是挺簡單的。

然后我們繼續看下一條,輸出引腳配置為推挽輸出,輸入引腳配置為浮空或上拉輸入,這就是 SPI 引腳的配置。在上圖里,輸出引腳和輸入引腳都用箭頭標出來了,哪個是輸出哪個是輸入,應該很好判斷。對于輸出,我們配置推挽輸出,推挽輸出,高低電平具有很強的驅動能力,這將使得 SPI 引腳信號的下降沿,非常迅速,上升沿,也非常迅速,不像 I2C 那樣,下降沿非常迅速,但是上升沿,就比較緩慢了。那得益于推挽輸出的驅動能力,SPI 信號變化的快,那自然它就能達到更高的傳輸速度,一般 SPI 信號都能輕松達到 MHz 的速度級別。然后這里 I2C 并不是不想使用更快的推挽輸出,而是 I2C 要實現半雙工,經常要切換輸入輸出,另外 I2C 又要實現多主機的時鐘同步和總線仲裁,這些功能,都不允許 I2C 使用推挽輸出,要不然一不小心,就電源短路了,所以 I2C 選擇了更多的功能,自然就要放棄更強的性能了。對于 SPI 來說,首先 SPI 不支持多主機,然后 SPI 又是全雙工,SPI 的輸出引腳始終是輸出,輸入引腳始終是輸入,基本不會出現沖突,所以 SPI 可以大膽地使用推挽輸出。不過當然,SPI 其實還是有一個沖突點的,就是圖上的 MISO 引腳,在這個引腳上,可以看到主機一個是輸入,但是三個從機全都是輸出,如果三個從機都始終是推挽輸出,勢必會導致沖突。所以在 SPI 協議里,有一條規定,就是當從機的 SS 引腳為高電平,也就是從機未被選中時,它的 MISO 引腳,必須切換為高阻態,高阻態就相當于引腳斷開,不輸出任何電平,這樣就可以防止,一條線有多個輸出,而導致的電平沖突的問題了。在 SS 為低電平時,MISO 才允許變為推挽輸出,這就是 SPI 對這個可能的沖突做出的規定,當然這個切換過程都是在從機里,我們一般都是寫主機的程序,所以我們主機的程序中,并不需要關注這個問題。

好,那有關 SPI 的硬件電路,就介紹到這里。

接下來,我們來看一下移位示意圖
在這里插入圖片描述
這個移位示意圖是 SPI 硬件電路設計的核心。只要你把這個移位示意圖搞懂了,那無論是上面的硬件電路,還是我們等會學習的軟件時序,理解起來都會更加輕松。我們看一下:

  1. SPI 的基本收發電路,就是使用了這樣一個移位的模型

1.3 SPI 軟件規定

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213741.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213741.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213741.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

gpu版本的GNN的demo

1、當涉及到在GPU上運行圖神經網絡(GNN)時,通常使用深度學習框架,如PyTorch或TensorFlow。在這里,我將為您提供一個使用PyTorch Geometric庫實現GNN的簡單示例。 首先,確保您已經安裝了PyTorch和PyTorch G…

第 375 場 LeetCode 周賽題解

A 統計已測試設備 模擬&#xff1a;記錄當前已測試設備數量 class Solution { public:int countTestedDevices(vector<int> &batteryPercentages) {int res 0;int s 0;for (auto x: batteryPercentages) {if (x - s > 0) {res;s;}}return res;} };B 雙模冪運算 …

【無線網絡技術】——無線城域網(學習筆記)

&#x1f4d6; 前言&#xff1a;無線城域網&#xff08;WMAN&#xff09;是指在地域上覆蓋城市及其郊區范圍的分布節點之間傳輸信息的本地分配無線網絡。能實現語音、數據、圖像、多媒體、IP等多業務的接入服務。其覆蓋范圍的典型值為3~5km&#xff0c;點到點鏈路的覆蓋可以高達…

少兒編程考級:激發孩子邏輯思維能力的關鍵

在當今信息化時代&#xff0c;少兒編程已經成為孩子們不可或缺的一項技能。而少兒編程考級&#xff0c;則是檢驗孩子們在這一技能上所取得的成就的重要途徑。少兒編程考級不僅能夠激發孩子們的邏輯思維能力&#xff0c;還能夠提高他們的動手能力和創造力。6547網將詳細介紹少兒…

電源模塊測試系統測試LED電源項目的優勢

LED電源測試是電源在設計、生產過程中的關鍵環節&#xff0c;也是確保LED照明產品可靠性和穩定性的重要步驟。LED電源測試一般包括電壓、電流、效率、穩定性等。電源模塊測試系統測試LED電源&#xff0c;實現自動化測試&#xff0c;保證測試結果的可靠性。 LED電源測試項目及方…

實現加鹽加密方法以及MappedByteBuffer,RandomAccess

目錄 自己實現 Spring Security MappedByteBuffer RandomAccess 加鹽加密的實現 自己實現 傳統MD5可通過彩虹表暴力破解&#xff0c; 加鹽加密算法是一種常用的密碼保護方法&#xff0c;它將一個隨機字符串&#xff08;鹽&#xff09;添加到原始密碼中&#xff0c;然后再進…

力扣17. 電話號碼的字母組合(java 回溯法)

Problem: 17. 電話號碼的字母組合 文章目錄 題目描述思路解題方法復雜度Code 題目描述 思路 題目給定一串數字&#xff0c;要求我們找出所有可能的字母組合&#xff0c;即我們可以窮舉出所有可能的結果&#xff0c;而涉及到窮舉我們自然可以想到利用回溯來解決問題&#xff0c…

xv6 中的一些系統調用(下)

〇、前言 本文將會結合源代碼談論 sleep、wakeup 這兩個系統調用。 一、sleep()系統調用 以下是sleep()函數源碼&#xff1a; // Atomically release lock and sleep on chan. // Reacquires lock when awakened. void sleep(void *chan, struct spinlock *lk) {struct pro…

無線且列窄圖片如何轉excel?

寫此文原因&#xff1a;圖片要轉excel&#xff0c;這放以前&#xff0c;是不能實現的功能&#xff0c;但隨著人工智能的蓬勃發展&#xff0c;人們已克服了這一難題&#xff0c;但是&#xff0c;我們知道&#xff0c;要將圖片識別成excel&#xff0c;識別程序首先要先識別圖片中…

如何在小米路由器4A千兆版刷入OpenWRT并通過內網穿透工具實現公網遠程訪問

文章目錄 前言1. 安裝Python和需要的庫2. 使用 OpenWRTInvasion 破解路由器3. 備份當前分區并刷入新的Breed4. 安裝cpolar內網穿透4.1 注冊賬號4.2 下載cpolar客戶端4.3 登錄cpolar web ui管理界面4.4 創建公網地址 5. 固定公網地址訪問 前言 OpenWRT是一個高度模塊化、高度自…

交易歷史記錄20231206 記錄

昨日回顧&#xff1a; select top 10000 * from dbo.CODEINFO A left join dbo.全部&#xff21;股20231206010101 B ON A.CODE B.代碼 left join dbo.全部&#xff21;股20231206CONF D on A.CODED.代碼left join dbo.全部&#xff21;股20231206 G on A.CODEG.代碼 left…

解決前端跨域問題,后端解決方法

Spring CloudVue前后端分離項目報錯&#xff1a;Network Error&#xff1b;net::ERR_FAILED&#xff08;請求跨越&#xff09;-CSDN博客記錄自用

Kafka-快速實戰

Kafka介紹 ChatGPT對于Apache Kafka的介紹&#xff1a; Apache Kafka是一個分布式流處理平臺&#xff0c;最初由LinkedIn開發并于2011年開源。它主要用于解決大規模數據的實時流式處理和數據管道問題。 Kafka是一個分布式的發布-訂閱消息系統&#xff0c;可以快速地處理高吞吐…

阿里云國際基于CentOS系統鏡像快速部署Apache服務

阿里云輕量應用服務器提供了Windows Server系統鏡像和主流的Linux系統鏡像&#xff0c;您可以通過該類鏡像創建純凈、安全、穩定的運行環境。本文以CentOS 7.6系統鏡像為例&#xff0c;介紹如何快速配置Apache服務。 背景信息 注意&#xff0c;阿里云國際通過corebyt注冊并充…

使用rawpy.imread讀取.RAW格式數據和.dng格式數據(附代碼)

.dng格式是一個更兼容、更高效的RAW格式。如果需要在不同軟件之間交換RAW文件&#xff0c;或者需要在軟件中進行大量編輯&#xff0c;那么.dng格式是一個不錯的選擇。 目錄 一、 .dng格式數據和.RAW格式數據二、 .dng格式數據和.RAW格式數據區別三、安裝rawpy包四、讀取.dng格式…

Flask應用基礎入門總結

【1】使用migrate方式進行數據庫連接 使用migrate方式進行數據庫連接需要在終端分別運行三行代碼&#xff1a; #init&#xff08;運行一次即可&#xff09;&#xff08;此db為自己設置的連接數據庫的對象,可以修改&#xff09; flask db init #&#xff08;將orm模型生成遷移…

從零開始搭建企業管理系統(四):集成 Knife4j

集成 Knife4j 前言Knife4j是什么集成 Knife4j引入 pom 依賴添加基礎配置啟動程序測試完善文檔信息編寫配置類修改 UserController修改 UserEntity修改 BaseEntity 文檔效果圖swagger 界面knife4j 界面 前言 前面一小節我們使用postman來進行接口的調試&#xff0c;如果接口一多…

游戲王的題解

目錄 原題&#xff1a; 時間&#xff1a;1s 空間&#xff1a;256M 題目描述 輸入格式 輸出格式 樣例輸入 樣例輸出 題目大意&#xff1a; 主要思路&#xff1a; dp轉移&#xff1a; dp初始化&#xff1a; 代碼&#xff1a; 原題&#xff1a; 時間&#xff1a;1s …

springboot集成knife4j詳細教程

使用原生的swagger作為接口文檔&#xff0c;功能不夠強大&#xff0c;并且默認的ui比較簡陋&#xff0c;不符合大眾審美。所以實際開發中推薦使用knife4j對swagger進行增強。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常簡單&…

深入學習Redis:從入門到實戰

Redis快速入門 1.初識Redis1.1.認識NoSQL1.1.1.結構化與非結構化1.1.2.關聯和非關聯1.1.3.查詢方式1.1.4.事務1.1.5.總結 1.2.認識Redis1.3.安裝Redis1.3.1.依賴庫1.3.2.上傳安裝包并解壓1.3.3.啟動1.3.4.默認啟動1.3.5.指定配置啟動1.3.6.開機自啟 1.4.Redis桌面客戶端1.4.1.R…