我們都知道STM32中的SPI一共有四根線,分別是MISO,MOSI,NSS,SCK MISO跟MOSI是雙向數(shù)據(jù)線,,SCK是時(shí)鐘線,。 我們下面來介紹一下關(guān)于NSS是什么作用。 在標(biāo)準(zhǔn)的SPI通信協(xié)議中除了上面的三根線,,還有一根是CS線即片選線,,所以在這里,NSS也是片選,,只不過此片選線相對(duì)復(fù)雜了點(diǎn),。 對(duì)于STM32來說,NSS線既可以作輸入,,又可以作輸出,。所謂輸入就是外部NSS輸入給自己。輸出就是將NSS的信號(hào)送出去,。輸入與輸出的配置,,可以通過SPI_CR2寄存器的SSOE位,當(dāng)此位為1時(shí),,且SPI為主機(jī)時(shí),,NSS就輸出低電平,也就是拉低,,因此當(dāng)其他SPI設(shè)備的NSS引腳與它相連,,必然接收到低電平,則片選成功,,都成為從設(shè)備了,。 NSS輸入時(shí),分為兩種情況,,一種是軟件模式,,一種是硬件模式。 軟件模式 1 對(duì)于SPI主機(jī)來說 需要設(shè)置SPI_CR1寄存器的SSM為1和SSI位為1,,SSM為1是為了使能軟件管理,。NSS有內(nèi)部和外部引腳。這時(shí)候,,外部引腳留作他用(可以用來作為GPIO驅(qū)動(dòng)從設(shè)備的片選信號(hào)),。內(nèi)部NSS引腳電平則通過SPI_CRL寄存器的SSI位來驅(qū)動(dòng)。SSI位為1是為了使NSS內(nèi)電平為高電平,。 STM32手冊(cè)上說,,要保持MSTR和SPE位為1,也就是說要保持主機(jī)模式,只有NSS接到高電平信號(hào)時(shí),這兩位才能保持置1.也就是說對(duì)于STM32的SPI,,要保持為主機(jī)狀態(tài),,內(nèi)部輸入的NSS電平必須為高。當(dāng)然這里在硬件模式下也是如此,。 2 對(duì)于SPI 從機(jī)來說 主機(jī)自己的內(nèi)部NSS高電平解決了,,那么SPI從機(jī)的NSS片選低電平也得解決啊。 如果從機(jī)選擇STM32的一個(gè)SPI,,譬如主機(jī)選為SPI1,,從機(jī)選為SPI2,則要按照以下操作手冊(cè)說,,NSS引腳在完成字節(jié)傳輸之前必須連接到一個(gè)低電平信號(hào),。在軟件模式下,則需要設(shè)置SPI_CR1寄存器的SSM為1(軟件管理使能)和SSI位為0.果然如此,。SSI必須要為0,,也就是SPI2的片選為低,則片選成功,。 對(duì)于主機(jī),,我們的NSS可以直接接到高電平,對(duì)于從機(jī),,NSS接低就可以,。 當(dāng)然我們上面提過當(dāng)一個(gè)主機(jī)的SSOE為1時(shí),主機(jī)工作在輸出模式,,而且NSS拉低了,,我們要讓從機(jī)片選,只要將CS接到主機(jī)的NSS上,,CS自動(dòng)拉低,。 SPI_InitStructure.SPI_Direction =SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode =SPI_Mode_Master; //這里設(shè)置SPI1為主模式,設(shè)置SSI為1 SPI_InitStructure.SPI_DataSize =SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL =SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA =SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //這里設(shè)置SSM為1,,軟件管理 SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_4; SPI_InitStructure.SPI_FirstBit =SPI_FirstBit_LSB; SPI_InitStructure.SPI_CRCPolynomial =7; SPI_Init(SPI1,&SPI_InitStructure); SPI_InitStructure.SPI_Mode =SPI_Mode_Slave;//這里設(shè)置SPI2為從模式SSI為0 //因?yàn)镾PI2和SPI1用的是同一個(gè)SPI_InitStructure,,所以SSM位已經(jīng)為1 SPI_Init(SPI2,&SPI_InitStructure); 對(duì)于SPI2的配置,和SPI1用的是同一個(gè)結(jié)構(gòu)體,,只需要把模式和SSI一改就行,,其他的譬如軟件使能,還有時(shí)序什么的都不用改,。這樣SPI1和SPI2就配置好了,。以后就可以傳輸數(shù)據(jù)了。 |
|