www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]【軟件中如何設(shè)置SPI的極性和相位】SPI分主設(shè)備和從設(shè)備,兩者通過(guò)SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備的SPI是何種模式,然后再將主設(shè)備的SPI的模式,設(shè)置和從

【軟件中如何設(shè)置SPI的極性和相位】SPI分主設(shè)備和從設(shè)備,兩者通過(guò)SPI協(xié)議通訊。而設(shè)置SPI的模式,是從設(shè)備的模式,決定了主設(shè)備的模式。所以要先去搞懂從設(shè)備的SPI是何種模式,然后再將主設(shè)備的SPI的模式,設(shè)置和從設(shè)備相同的模式,即可正常通訊。對(duì)于從設(shè)備的SPI是什么模式,有兩種:(1)固定的,有SPI從設(shè)備硬件決定的SPI從設(shè)備,具體是什么模式,相關(guān)的datasheet中會(huì)有描述,需要自己去datasheet中找到相關(guān)的描述,即:關(guān)于SPI從設(shè)備,在空閑的時(shí)候,是高電平還是低電平,即決定了CPOL是0還是1;然后再找到關(guān)于設(shè)備是在上升沿還是下降沿去采樣數(shù)據(jù),這樣就是,在定了CPOL的值的前提下,對(duì)應(yīng)著可以推算出CPHA是0還是1了。舉例1:CC2500-Low-CostLow-Power2.4GHzRFTransceiver的datasheet中SPI的時(shí)序圖是:
從圖中可以看到,最開(kāi)始的SCLK和結(jié)束時(shí)候的SCLK,即空閑時(shí)刻的SCLK,是低電平,推導(dǎo)出CPOL=0,然后可以看到數(shù)據(jù)采樣的時(shí)候,即數(shù)據(jù)最中間的那一點(diǎn),對(duì)應(yīng)的是SCLK的第一個(gè)邊沿,所以CPHA=0(此時(shí)對(duì)應(yīng)的是上升沿)。舉例2:SSD1289-240RGBx320TFTLCDControllerDriver的datasheet中提到:“SDIisshiftedinto8-bitshiftregisteroneveryrisingedgeofSCKintheorderofdatabit7,databit6……databit0.”意思是,數(shù)據(jù)是在上升沿采樣,所以可以斷定是CPOL=0,CPHA=0,或者CPOL=1,CPHA=1的模式,但是至于是哪種模式。按理來(lái)說(shuō),接下來(lái)應(yīng)該再去確定SCLK空閑時(shí)候是高電平還是低電平,用以確定CPOL是0還是1,但是datasheet中沒(méi)有提到這點(diǎn)。所以,此處,目前不太確定,是兩種模式都支持,還是需要額外找證據(jù)卻確定CPOL是0還是1.(2)可配置的,由軟件自己設(shè)定從設(shè)備也是一個(gè)SPI控制器,4種模式都支持,此時(shí)只要自己設(shè)置為某種模式即可。然后知道了從設(shè)備的模式后,再去將SPI主設(shè)備的模式,設(shè)置為和從設(shè)備模式一樣,即可。 對(duì)于如何配置SPI的CPOL和CPHA的話,不多細(xì)說(shuō),多數(shù)都是直接去寫(xiě)對(duì)應(yīng)的SPI控制器中對(duì)應(yīng)寄存器中的CPOL和CPHA那兩位,寫(xiě)0或?qū)?即可。舉例:C8051F347中的SPI就是一個(gè)SPI的controller控制器,即支持軟件配置CPOL和CPHA的值,四種模式都支持,此處C8051F347作為SPI從設(shè)備,設(shè)置了CPOL=1,CPHA=0的模式,因此,此處對(duì)應(yīng)主芯片中的SPI控制器,作為Master主設(shè)備,其SPI的模式也要設(shè)置為CPOL=1,CPHA=0,即可。






【SPI的讀寫(xiě)程序設(shè)計(jì)】文中標(biāo)紅的是特別注意看的地方主要是熟悉flash芯片的指令集,以及存儲(chǔ)芯片扇區(qū)和塊的理解,最重要的是擦除都是以扇區(qū)擦除的方式。


本節(jié)將利用SPI來(lái)實(shí)現(xiàn)對(duì)外部FLASH(W25X16)的讀寫(xiě),并將結(jié)果顯示在TFTLCD模塊上。本節(jié)分為如下幾個(gè)部分:

3.17.1 SPI簡(jiǎn)介

3.17.2硬件設(shè)計(jì)

3.17.3軟件設(shè)計(jì)

3.17.4下載與測(cè)試


1 SPI簡(jiǎn)介

SPI是英語(yǔ)Serial Peripheralinterface的縮寫(xiě),顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議,STM32也有SPI接口。

SPI接口一般使用4條線:

MISO主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。

MOSI主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。

SCLK時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。

CS從設(shè)備片選信號(hào),由主設(shè)備控制。

SPI主要特點(diǎn)有:可以同時(shí)發(fā)出和接收串行數(shù)據(jù);可以當(dāng)作主機(jī)或從機(jī)工作;提供頻率可編程時(shí)鐘;發(fā)送結(jié)束中斷標(biāo)志;寫(xiě)沖突保護(hù);總線競(jìng)爭(zhēng)保護(hù)等。

SPI總線四種工作方式SPI模塊為了和外設(shè)進(jìn)行數(shù)據(jù)交換,根據(jù)外設(shè)工作要求,其輸出串行同步時(shí)鐘極性和相位可以進(jìn)行配置,時(shí)鐘極性(CPOL)對(duì)傳輸協(xié)議沒(méi)有重大的影響。如果CPOL=0,串行同步時(shí)鐘的空閑狀態(tài)為低電平;如果CPOL=1,串行同步時(shí)鐘的空閑狀態(tài)為高電平。時(shí)鐘相位(CPHA)能夠配置用于選擇兩種不同的傳輸協(xié)議之一進(jìn)行數(shù)據(jù)傳輸。如果CPHA=0,在串行同步時(shí)鐘的第一個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣;如果CPHA=1,在串行同步時(shí)鐘的第二個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣。SPI主模塊和與之通信的外設(shè)備時(shí)鐘相位和極性應(yīng)該一致。


不同時(shí)鐘相位下的總線數(shù)據(jù)傳輸時(shí)序見(jiàn)下圖:



圖3.17.1.1不同時(shí)鐘相位下的總線傳輸時(shí)序(CPHA=0/1)


STM32的SPI功能很強(qiáng)大,SPI時(shí)鐘最多可以到18Mhz,支持DMA,可以配置為SPI協(xié)議或者I2S協(xié)議。


本節(jié),我們將利用STM32的SPI來(lái)讀取外部SPIFLASH芯片(W25X16),實(shí)現(xiàn)類(lèi)似上節(jié)的功能。這里對(duì)SPI我們只簡(jiǎn)單介紹一下SPI的使用,STM32的SPI詳細(xì)介紹請(qǐng)參考《STM32參考手冊(cè)》第422頁(yè),22節(jié)。然后我們?cè)俳榻B下SPIFLASH芯片。

這節(jié),我們使用STM32的SPI1的主模式,下面就來(lái)看看SPI1部分的設(shè)置步驟吧,STM32的主模式配置步驟如下:

1)配置相關(guān)引腳的復(fù)用功能,使能SPI1時(shí)鐘。

我們要用SPI1,第一步就要是能SPI1的時(shí)鐘,SPI1的時(shí)鐘通過(guò)APB2ENR的第12位來(lái)設(shè)置。其次要設(shè)置SPI1的相關(guān)引腳為復(fù)用輸出,這樣才會(huì)連接到SPI1上否則這些IO口還是默認(rèn)的狀態(tài),也就是標(biāo)準(zhǔn)輸入輸出口。這里我們使用的是PA5、6、7這3個(gè)(SCK.、MISO、MOSI,CS使用軟件管理方式),所以設(shè)置這三個(gè)為復(fù)用IO。

2)設(shè)置SPI1工作模式。

這一步全部是通過(guò)SPI1_CR1來(lái)設(shè)置,我們?cè)O(shè)置SPI1為主機(jī)模式,設(shè)置數(shù)據(jù)格式為8位,然后通過(guò)CPOL和CPHA位來(lái)設(shè)置SCK時(shí)鐘極性及采樣方式。并設(shè)置SPI1的時(shí)鐘頻率(最大18Mhz),以及數(shù)據(jù)的格式(MSB在前還是LSB在前)。

3)使能SPI1。

這一步通過(guò)SPI1_CR1的bit6來(lái)設(shè)置,以啟動(dòng)SPI1,在啟動(dòng)之后,我們就可以開(kāi)始SPI通訊了。

SPI1的使用就介紹到這里,接下來(lái)介紹一下W25X16。W25X16是華邦公司推出的繼W25X10/20/40/80(從1Mb~8Mb)后容量更大的FLASH產(chǎn)品,W25X16的容量為16Mb,還有容量更大的W25X32/64,ALIENTEK所選擇的W25X16容量為16Mb,也就是2M字節(jié),同AT45DB161是一樣大小的。

W25X16將2M的容量分為32個(gè)塊(Block),每個(gè)塊大小為64K字節(jié),每個(gè)塊又分為16個(gè)扇區(qū)(Sector),每個(gè)扇區(qū)4K個(gè)字節(jié)。W25X16的最少擦除單位為一個(gè)扇區(qū),也就是每次必須擦除4K個(gè)字節(jié)。這樣我們需要給W25X16開(kāi)辟一個(gè)至少4K的緩存區(qū),這樣對(duì)SRAM要求比較高(相對(duì)于AT45DB161來(lái)說(shuō)),但是它有價(jià)格及供貨上的優(yōu)勢(shì)。

W25X16的差些周期為10000次,具有20年的數(shù)據(jù)保存期限,支持電壓為2.7~3.6V,W25X16支持標(biāo)準(zhǔn)的SPI,還支持雙輸出的SPI,最大SPI時(shí)鐘可以到75Mhz(雙輸出時(shí)相當(dāng)于150Mhz),更多的W25X16的介紹,請(qǐng)參考W25X16的DATASHEET。


2硬件設(shè)計(jì)

本節(jié)實(shí)驗(yàn)功能簡(jiǎn)介:開(kāi)機(jī)的時(shí)候先檢測(cè)W25X16是否存在,然后在主循環(huán)里面用1個(gè)按鍵用來(lái)執(zhí)行寫(xiě)入W25X16的操作,另外一個(gè)按鍵用來(lái)執(zhí)行讀出操作,在TFTLCD模塊上顯示相關(guān)信息。同時(shí)用DS0提示程序正在運(yùn)行。

所要用到的硬件資源如下:

1)STM32F103RBT6。

2)DS0(外部LED0)。

3)KEY0和KEY2。

4)TFTLCD液晶模塊。

5)W25X16。

前面4部分的資源,我們前面已經(jīng)介紹了,請(qǐng)大家參考相關(guān)章節(jié)。這里只介紹W25X16與STM32的連接,板上的W25X16是直接連在STM32F103RBT6上的,連接關(guān)系如下圖:



圖3.17.2.1STM32F103RBT6與W25X16連接電路圖


3軟件設(shè)計(jì)

打開(kāi)上一節(jié)的工程,首先在HARDWARE文件夾下新建一個(gè)FLASH的文件夾和SPI的文件夾。然后新建一個(gè)flash.c和flash.h的文件保存在FLASH文件夾下,新建spi.c和spi.h的文件,保存在SPI文件夾下,并將這兩個(gè)文件夾加入頭文件包含路徑。

打開(kāi)spi.c文件,輸入如下代碼:

#include"spi.h"

//SPI口初始化

//這里針是對(duì)SPI1的初始化

voidSPIx_Init(void)

{

RCC->APB2ENR"=1<<2; //PORTA時(shí)鐘使能

RCC->APB2ENR|=1<<12; //SPI1時(shí)鐘使能

//這里只針對(duì)SPI口初始化

GPIOA->CRL&=0X000FFFFF;

GPIOA->CRL|=0XBBB00000;//PA5.6.7復(fù)用

GPIOA->ODR|=0X7<<5; //PA5.6.7上拉

SPI1->CR1|=0<<10;//全雙工模式

SPI1->CR1|=1<<9; //軟件nss管理

SPI1->CR1|=1<<8;

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在嵌入式開(kāi)發(fā)中,STM32的時(shí)鐘系統(tǒng)因其靈活性和復(fù)雜性成為開(kāi)發(fā)者關(guān)注的焦點(diǎn)。然而,看似簡(jiǎn)單的時(shí)鐘配置背后,隱藏著諸多易被忽視的陷阱,輕則導(dǎo)致系統(tǒng)不穩(wěn)定,重則引發(fā)硬件損壞。本文從時(shí)鐘源選擇、PLL配置、總線時(shí)鐘分配等關(guān)鍵環(huán)...

關(guān)鍵字: STM32 時(shí)鐘系統(tǒng)

在嵌入式系統(tǒng)開(kāi)發(fā)中,STM32系列微控制器的內(nèi)部溫度傳感器因其低成本、高集成度特性,廣泛應(yīng)用于設(shè)備自檢、環(huán)境監(jiān)測(cè)等場(chǎng)景。然而,受芯片工藝差異和電源噪聲影響,其原始數(shù)據(jù)存在±1.5℃的固有誤差。本文從硬件配置、校準(zhǔn)算法、軟...

關(guān)鍵字: STM32 溫度傳感器

在能源效率與智能化需求雙重驅(qū)動(dòng)下,AC-DC轉(zhuǎn)換器的數(shù)字控制技術(shù)正經(jīng)歷從傳統(tǒng)模擬方案向全數(shù)字架構(gòu)的深刻變革?;赟TM32微控制器的PFM(脈沖頻率調(diào)制)+PWM(脈沖寬度調(diào)制)混合調(diào)制策略,結(jié)合動(dòng)態(tài)電壓調(diào)整(Dynam...

關(guān)鍵字: AC-DC STM32

當(dāng)前智能家居產(chǎn)品需求不斷增長(zhǎng) ,在這一背景下 ,對(duì)現(xiàn)有澆花裝置缺陷進(jìn)行了改進(jìn) ,設(shè)計(jì)出基于STM32單片機(jī)的全 自動(dòng)家用澆花機(jī)器人。該設(shè)計(jì)主要由機(jī)械結(jié)構(gòu)和控制系統(tǒng)構(gòu)成 ,機(jī)械結(jié)構(gòu)通過(guò)麥克納姆輪底盤(pán)與噴灑裝置的結(jié)合實(shí)現(xiàn)機(jī)器...

關(guān)鍵字: STM32 麥克納姆輪 安全可靠 通過(guò)性強(qiáng)

用c++編程似乎是讓你的Arduino項(xiàng)目起步的障礙嗎?您想要一種更直觀的微控制器編程方式嗎?那你需要了解一下Visuino!這個(gè)圖形化編程平臺(tái)將復(fù)雜電子項(xiàng)目的創(chuàng)建變成了拖動(dòng)和連接塊的簡(jiǎn)單任務(wù)。在本文中,我們將帶您完成使...

關(guān)鍵字: Visuino Arduino ESP32 STM32

基于STM32與LoRa技術(shù)的無(wú)線傳感網(wǎng)絡(luò)憑借其低功耗、廣覆蓋、抗干擾等特性,成為環(huán)境監(jiān)測(cè)、工業(yè)自動(dòng)化等場(chǎng)景的核心解決方案。然而,如何在復(fù)雜電磁環(huán)境中實(shí)現(xiàn)高效休眠調(diào)度與動(dòng)態(tài)信道優(yōu)化,成為提升網(wǎng)絡(luò)能效與可靠性的關(guān)鍵挑戰(zhàn)。本...

關(guān)鍵字: STM32 LoRa

在實(shí)時(shí)控制系統(tǒng)、高速通信協(xié)議處理及高精度數(shù)據(jù)采集等對(duì)時(shí)間敏感的應(yīng)用場(chǎng)景中,中斷響應(yīng)延遲的優(yōu)化直接決定了系統(tǒng)的可靠性與性能上限。STM32系列微控制器憑借其靈活的嵌套向量中斷控制器(NVIC)、多通道直接內(nèi)存訪問(wèn)(DMA)...

關(guān)鍵字: STM32 DMA

數(shù)字電源技術(shù)向高功率密度、高效率與高動(dòng)態(tài)響應(yīng)方向加速演進(jìn),STM32微控制器憑借其基于DSP庫(kù)的算法加速能力與對(duì)LLC諧振變換器的精準(zhǔn)控制架構(gòu),成為優(yōu)化電源動(dòng)態(tài)性能的核心平臺(tái)。相較于傳統(tǒng)模擬控制或通用型數(shù)字控制器,STM...

關(guān)鍵字: STM32 數(shù)字電源

STM32微控制器憑借其針對(duì)電機(jī)控制場(chǎng)景的深度優(yōu)化,成為高精度、高可靠性驅(qū)動(dòng)系統(tǒng)的核心選擇。相較于通用型MCU,STM32在電機(jī)控制領(lǐng)域的核心優(yōu)勢(shì)集中體現(xiàn)在FOC(磁場(chǎng)定向控制)算法的硬件加速引擎與PWM死區(qū)時(shí)間的動(dòng)態(tài)補(bǔ)...

關(guān)鍵字: STM32 電機(jī)控制

無(wú)線充電技術(shù)加速滲透消費(fèi)電子與汽車(chē)電子領(lǐng)域,基于Qi協(xié)議的無(wú)線充電發(fā)射端開(kāi)發(fā)成為智能設(shè)備能量補(bǔ)給的核心課題。傳統(tǒng)模擬控制方案存在響應(yīng)滯后、參數(shù)調(diào)整困難等問(wèn)題,而基于STM32的數(shù)字PID控制結(jié)合FOD(Foreign O...

關(guān)鍵字: STM32 無(wú)線充電
關(guān)閉