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

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

中科芯CKS32F107XX系列MCU的串行外設(shè)接口介紹

中科芯MCU ? 來(lái)源:中科芯MCU ? 2026-01-27 06:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MCU微課堂

CKS32F107XX系列串行外設(shè)接口介紹

第六十九期 2026.01.19

SPI簡(jiǎn)介

SPI協(xié)議是由摩托羅拉公司提出的通訊協(xié)議(Serial Peripheral Interface),即串行外圍設(shè)備接口,是一種高速全雙工的通信總線(xiàn)。它在芯片的管腳上只占用四根線(xiàn),節(jié)約了芯片的管腳,同時(shí)為PCB在布局上節(jié)省了空間。正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議,它被廣泛地使用在ADC、LCD、FLASH等設(shè)備與MCU之間。

中科芯CKS32F107xx系列產(chǎn)品擁有3路SPI接口,允許芯片與外部設(shè)備以半/全雙工、同步、串行方式通信。此接口可以被配置成主模式,并為外部從設(shè)備提供通信時(shí)鐘(SCK)。支持以多主配置的方式工作。下面就SPI相關(guān)特性進(jìn)行介紹。

SPI主要特征

SPI特征

● 3線(xiàn)全雙工同步傳輸

● 帶或不帶第三根雙向數(shù)據(jù)線(xiàn)的雙線(xiàn)單工同步傳輸

● 8或16位傳輸幀格式選擇

● 主或從操作

● 支持多主模式

● 8個(gè)主模式波特率預(yù)分頻系數(shù)(最大為fPCLK/2)

● 從模式頻率(最大為fPCLK/2)

● 主模式和從模式的快速通信

● 主模式和從模式下均可以由軟件或硬件進(jìn)行NSS管理:主/從操作模式的動(dòng)態(tài)改

● 可編程時(shí)鐘極性和相位

● 可編程的數(shù)據(jù)順序,MSB在前或LSB在前

● 可觸發(fā)中斷的專(zhuān)用發(fā)送和接收標(biāo)志

● SPI總線(xiàn)忙狀態(tài)標(biāo)志

● 支持可靠通信的硬件CRC

─ 在發(fā)送模式下,CRC值可以被作為最后一個(gè)字節(jié)發(fā)送

─ 在全雙工模式中對(duì)接收到的最后一個(gè)字節(jié)自動(dòng)進(jìn)行CRC校驗(yàn)

● 可觸發(fā)中斷的主模式故障、過(guò)載以及CRC錯(cuò)誤標(biāo)志

● 支持DMA功能的1字節(jié)發(fā)送和接收緩沖器:產(chǎn)生發(fā)送和接受請(qǐng)求

SPI功能描述

SPI概述

SPI的方框圖見(jiàn)下圖。

e24a8fcc-f50c-11f0-92de-92fbcf53809c.png

圖1 SPI方框圖

圖中的①處是SPI的引腳MOSI、MISO、SCK、NSS。CKS32F107xx系列芯片通過(guò)以上四個(gè)引腳將SPI通訊信號(hào)引出到不同GPIO引腳上,使用時(shí)必須配置到這些指定的引腳。關(guān)于GPIO引腳的復(fù)用功能可以查閱芯片數(shù)據(jù)手冊(cè)。各個(gè)引腳的作用介紹如下:

●NSS:從設(shè)備選擇信號(hào)線(xiàn),常稱(chēng)為片選信號(hào)線(xiàn)。當(dāng)有多個(gè)SPI從設(shè)備與SPI主機(jī)相連時(shí),設(shè)備的其它信號(hào)線(xiàn)SCK、MOSI及MISO同時(shí)并聯(lián)到相同的SPI總線(xiàn)上,即無(wú)論有多少個(gè)從設(shè)備,都共同只使用這3條總線(xiàn);而每個(gè)從設(shè)備都有獨(dú)立的一條NSS信號(hào)線(xiàn),當(dāng)主機(jī)要選擇從設(shè)備時(shí),把該從設(shè)備的NSS信號(hào)線(xiàn)設(shè)置為低電平,該從設(shè)備即被選中,即片選有效,接著主機(jī)開(kāi)始與被選中的從設(shè)備進(jìn)行SPI通訊。

●SCK:時(shí)鐘信號(hào)線(xiàn),用于通訊數(shù)據(jù)同步。它由通訊主機(jī)產(chǎn)生,決定了通訊的速率,不同的設(shè)備支持的最高時(shí)鐘頻率不一樣,兩個(gè)設(shè)備之間通訊時(shí),通訊速率受限于低速設(shè)備。

●MOSI:主設(shè)備輸出/從設(shè)備輸入引腳。主機(jī)的數(shù)據(jù)從這條信號(hào)線(xiàn)輸出,從機(jī)由這條信號(hào)線(xiàn)讀入主機(jī)發(fā)送的數(shù)據(jù),即這條線(xiàn)上數(shù)據(jù)的方向?yàn)橹鳈C(jī)到從機(jī)。

●MISO:主設(shè)備輸入/從設(shè)備輸出引腳。主機(jī)從這條信號(hào)線(xiàn)讀入數(shù)據(jù),從機(jī)的數(shù)據(jù)由這條信號(hào)線(xiàn)輸出到主機(jī),即在這條線(xiàn)上數(shù)據(jù)的方向?yàn)閺臋C(jī)到主機(jī)。

圖中的②處是SCK線(xiàn)的時(shí)鐘信號(hào),由波特率發(fā)生器根據(jù)“控制寄存器CR1”中的BR[0:2]位控制,該位是對(duì)fpclk時(shí)鐘的分頻因子,對(duì)fpclk的分頻結(jié)果就是SCK引腳的輸出時(shí)鐘頻率。

圖中的③處是SPI的數(shù)據(jù)控制邏輯。SPI的MOSI及MISO都連接到數(shù)據(jù)移位寄存器上,數(shù)據(jù)移位寄存器的內(nèi)容來(lái)源于接收緩沖區(qū)及發(fā)送緩沖區(qū)以及MISO、MOSI線(xiàn)。當(dāng)向外發(fā)送數(shù)據(jù)的時(shí)候,數(shù)據(jù)移位寄存器以“發(fā)送緩沖區(qū)”為數(shù)據(jù)源,把數(shù)據(jù)一位一位地通過(guò)數(shù)據(jù)線(xiàn)發(fā)送出去;當(dāng)從外部接收數(shù)據(jù)的時(shí)候,數(shù)據(jù)移位寄存器把數(shù)據(jù)線(xiàn)采樣到的數(shù)據(jù)一位一位地存儲(chǔ)到“接收緩沖區(qū)”中。通過(guò)寫(xiě)SPI的“數(shù)據(jù)寄存器DR”把數(shù)據(jù)填充到發(fā)送緩沖區(qū)中,通過(guò)“數(shù)據(jù)寄存器DR”,可以獲取接收緩沖區(qū)中的內(nèi)容。其中數(shù)據(jù)幀的長(zhǎng)度可以通過(guò)“控制寄存器CR1”的“DFF位”配置成8位及16位模式;配置“LSBFIRST位”可選擇MSB先行還是LSB先行。

圖中的④處是SPI的整體控制邏輯。整體控制邏輯負(fù)責(zé)協(xié)調(diào)整個(gè)SPI外設(shè),控制邏輯的工作模式根據(jù)我們配置的“控制寄存器(CR1/CR2)”的參數(shù)而改變,基本的控制參數(shù)包括SPI模式、波特率、LSB先行、主從模式、單雙向模式等等。在外設(shè)工作時(shí),控制邏輯會(huì)根據(jù)外設(shè)的工作狀態(tài)修改“狀態(tài)寄存器(SR)”,我們只要讀取狀態(tài)寄存器相關(guān)的寄存器位,就可以了解SPI的工作狀態(tài)了。除此之外,控制邏輯還根據(jù)要求,負(fù)責(zé)控制產(chǎn)生SPI中斷信號(hào)、DMA請(qǐng)求及控制NSS信號(hào)線(xiàn)。實(shí)際應(yīng)用中,我們一般不使用SPI外設(shè)的標(biāo)準(zhǔn)NSS信號(hào)線(xiàn),而是更簡(jiǎn)單地使用普通的GPIO,軟件控制它的電平輸出。

CKS32F107xx系列產(chǎn)品SPI配置:

接下來(lái)我們講解如何利用CKS32F107xx系列固件庫(kù)來(lái)完成對(duì)SPI的配置使用。跟其它外設(shè)一樣,CKS32標(biāo)準(zhǔn)庫(kù)提供了SPI初始化結(jié)構(gòu)體及初始化函數(shù)來(lái)配置SPI外設(shè)。了解初始化結(jié)構(gòu)體后我們就能對(duì)SPI外設(shè)運(yùn)用自如了,結(jié)構(gòu)體如下圖所示:

e2a61798-f50c-11f0-92de-92fbcf53809c.png

圖2 SPI配置結(jié)構(gòu)體

結(jié)構(gòu)體中各個(gè)函數(shù)變量的介紹及初始化時(shí)可被賦的值如下:

1) SPI_Direction:該函數(shù)設(shè)置SPI的通訊方向,可設(shè)置為雙線(xiàn)全雙工(SPI_Direction_2Lines_FullDuplex),雙線(xiàn)只接收(SPI_Direction_2Lines_RxOnly),單線(xiàn)只接收(SPI_Direction_1Line_Rx)、單線(xiàn)只發(fā)送模式(SPI_Direction_1Line_Tx)。

2) SPI_Mode:該函數(shù)設(shè)置SPI工作在主機(jī)模式(SPI_Mode_Master)或從機(jī)模式(SPI_Mode_Slave),這兩個(gè)模式的最大區(qū)別為SPI的SCK信號(hào)線(xiàn)的時(shí)序,SCK的時(shí)序是由通訊中的主機(jī)產(chǎn)生的。若被配置為從機(jī)模式,CKS32的SPI外設(shè)將接受外來(lái)的SCK信號(hào):

3) SPI_DataSize:該函數(shù)可以選擇SPI通訊的數(shù)據(jù)幀大小是為8位(SPI_DataSize_8b)還是16位(SPI_DataSize_16b)。

4) SPI_CPOL和SPI_CPHA:這兩個(gè)函數(shù)配置SPI的時(shí)鐘極性CPOL和時(shí)鐘相位CPHA,前面講過(guò)這兩個(gè)配置影響到SPI的通訊模式。時(shí)鐘極性CPOL成員可設(shè)置為高電平(SPI_CPOL_High)或低電平(SPI_CPOL_Low)。時(shí)鐘相位CPHA則可以設(shè)置為SPI_CPHA_1Edge(在SCK的奇數(shù)邊沿采集數(shù)據(jù))或SPI_CPHA_2Edge(在SCK的偶數(shù)邊沿采集數(shù)據(jù)),具體組合設(shè)置方式可參考圖2。

e301872c-f50c-11f0-92de-92fbcf53809c.png

圖3 數(shù)據(jù)時(shí)鐘時(shí)序圖

5) SPI_NSS:該函數(shù)配置NSS引腳的使用模式,可以選擇為硬件模式(SPI_NSS_Hard)與軟件模式(SPI_NSS_Soft),在硬件模式中的SPI片選信號(hào)由SPI硬件自動(dòng)產(chǎn)生,而軟件模式則需要我們自己把相應(yīng)的GPIO端口拉高或置低產(chǎn)生非片選和片選信號(hào)。實(shí)際中軟件模式應(yīng)用比較多。

6) SPI_BaudRatePrescaler:該函數(shù)設(shè)置波特率分頻因子,分頻后的時(shí)鐘即為SPI的SCK信號(hào)線(xiàn)的時(shí)鐘頻率。這個(gè)成員參數(shù)可設(shè)置為fpclk的2、4、8、16、32、64、128、256分頻??蛇x的值如下圖所示:

e35f2b84-f50c-11f0-92de-92fbcf53809c.png

圖4 SPI波特率分頻

7) SPI_FirstBit:所有串行的通訊協(xié)議都會(huì)有MSB先行(高位數(shù)據(jù)在前)還是LSB先行(低位數(shù)據(jù)在前)的問(wèn)題,而CKS32F107VET6的SPI模塊可以通過(guò)這個(gè)結(jié)構(gòu)體,對(duì)這個(gè)特性編程控制。

e3c521d2-f50c-11f0-92de-92fbcf53809c.png

圖5 SPI數(shù)據(jù)先行方式

8) SPI_CRCPolynomial:這是SPI的CRC校驗(yàn)中的多項(xiàng)式,若我們使用CRC校驗(yàn)時(shí),就使用這個(gè)參數(shù)(多項(xiàng)式),來(lái)計(jì)算CRC的值。

配置完這些結(jié)構(gòu)體成員的值,調(diào)用庫(kù)函數(shù)SPI_Init即可把結(jié)構(gòu)體的配置寫(xiě)入到寄存器中。

SPI外設(shè)主要可通過(guò)主模式和從模式兩種方式進(jìn)行實(shí)現(xiàn),現(xiàn)在就兩個(gè)模式分別進(jìn)行講解。

配置SPI為主模式

在主配置時(shí),在SCK腳產(chǎn)生串行時(shí)鐘。

配置步驟:

(1)通過(guò)SPI_CR1寄存器的BR[2:0]位定義串行時(shí)鐘波特率;

(2)選擇CPOL和CPHA位,定義數(shù)據(jù)傳輸和串行時(shí)鐘間的相位關(guān)系(見(jiàn)圖4);

(3)設(shè)置DFF位來(lái)定義8位或16位數(shù)據(jù)幀格式;

(4)配置SPI_CR1寄存器的LSBFIRST位定義幀格式;

(5)如果需要NSS引腳工作在輸入模式,硬件模式下,在整個(gè)數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平;在軟件模式下,需設(shè)置SPI_CR1寄存器的SSM位和SSI位。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位;

(6)必須設(shè)置MSTR位和SPE位(只當(dāng)NSS腳被連到高電平,這些位才能保持置位)。在這個(gè)配置中,MOSI引腳是數(shù)據(jù)輸出,而MISO引腳是數(shù)據(jù)輸入;

數(shù)據(jù)發(fā)送過(guò)程

當(dāng)寫(xiě)入數(shù)據(jù)至發(fā)送緩沖器時(shí),發(fā)送過(guò)程開(kāi)始。在發(fā)送第一個(gè)數(shù)據(jù)位時(shí),數(shù)據(jù)字被并行地(通過(guò)內(nèi)部總線(xiàn))傳入移位寄存器,而后串行地移出到MOSI腳上;MSB在先還是LSB在先,取決于SPI_CR1寄存器中的LSBFIRST位的設(shè)置。數(shù)據(jù)從發(fā)送緩沖器傳輸?shù)揭莆患拇嫫鲿r(shí)TXE標(biāo)志將被置位,如果設(shè)置了SPI_CR1寄存器中的TXEIE位,將產(chǎn)生中斷。

數(shù)據(jù)接受過(guò)程

對(duì)于接收器來(lái)說(shuō),當(dāng)數(shù)據(jù)傳輸完成時(shí):

●傳送移位寄存器里的數(shù)據(jù)到接收緩沖器,并且RXNE標(biāo)志被置位。

●如果設(shè)置了SPI_CR2寄存器中的RXNEIE位,則產(chǎn)生中斷。在最后采樣時(shí)鐘沿,RXNE位被設(shè)置,在移位寄存器中接收到的數(shù)據(jù)字被傳送到接收緩沖器。讀SPI_DR寄存器時(shí),SPI設(shè)備返回接收緩沖器中的數(shù)據(jù)。讀SPI_DR寄存器將清除RXNE位。一旦傳輸開(kāi)始,如果下一個(gè)將發(fā)送的數(shù)據(jù)被放進(jìn)了發(fā)送緩沖器,就可以維持一個(gè)連續(xù)的傳輸流。在試圖寫(xiě)發(fā)送緩沖器之前,需確認(rèn)TXE標(biāo)志應(yīng)該為‘1’。

注:在NSS硬件模式下,從設(shè)備的NSS輸入由NSS引腳控制或另一個(gè)由軟件驅(qū)動(dòng)的GPIO引腳控制。

具體初始化代碼如下:

void SPI_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

/* Configure SPI1 Pins PA.4 NSS(software); PA.5 SCK; PA.6 MISO; PA.7 MOSI--------------*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_WriteBit( GPIOA, GPIO_Pin_4, Bit_SET );

/* Configure SPI1 -----------------------------------------------------------*/

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_128;

SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;

SPI_InitStruct.SPI_Mode = SPI_Mode_Master;

SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;

SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;

SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStruct.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStruct);

SPI_Cmd(SPI1, ENABLE);

}

單字節(jié)收發(fā)函數(shù)代碼如下:

uint8_t CKS_SPI_Tx_Rx_Byte(uint8_t data)

{

while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

SPI_I2S_SendData(SPI1, data);

while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

return SPI_I2S_ReceiveData(SPI1);

}

配置SPI為從模式

在從模式下,SCK引腳用于接收從主設(shè)備來(lái)的串行時(shí)鐘。SPI_CR1寄存器中BR[2:0]的設(shè)置不影響數(shù)據(jù)傳輸速率。

注:建議在主設(shè)備發(fā)送時(shí)鐘之前使能SPI從設(shè)備,否則可能會(huì)發(fā)生意外的數(shù)據(jù)傳輸。在通信時(shí)鐘的第一個(gè)邊沿到來(lái)之前或正在進(jìn)行的通信結(jié)束之前,從設(shè)備的數(shù)據(jù)寄存器必須就緒。在使能從設(shè)備和主設(shè)備之前,通信時(shí)鐘的極性必須處于穩(wěn)定的數(shù)值。請(qǐng)按照以下步驟配置SPI為從模式:

配置步驟

(1)設(shè)置DFF位以定義數(shù)據(jù)幀格式為8位或16位。

(2)選擇CPOL和CPHA位來(lái)定義數(shù)據(jù)傳輸和串行時(shí)鐘之間的相位關(guān)系。為保證正確的數(shù)據(jù)傳輸,從設(shè)備和主設(shè)備的CPOL和CPHA位必須配置成相同的方式。

(3)幀格式(SPI_CR1寄存器中的LSBFIRST位定義的“MSB在前”還是“LSB在前”)必須與主設(shè)備相同。

(4)硬件模式下(參考從選擇(NSS)腳管理部分),在完整的數(shù)據(jù)幀(8位或16位)傳輸過(guò)程中,NSS引腳必須為低電平。在NSS軟件模式下,設(shè)置SPI_CR1寄存器中的SSM位并清除SSI位。

(5)清除MSTR位、設(shè)置SPE位(SPI_CR1寄存器),使相應(yīng)引腳工作于SPI模式下。在這個(gè)配置中,MOSI引腳是數(shù)據(jù)輸入,MISO引腳是數(shù)據(jù)輸出。

數(shù)據(jù)發(fā)送過(guò)程

在寫(xiě)操作中,數(shù)據(jù)字被并行地寫(xiě)入發(fā)送緩沖器。當(dāng)從設(shè)備收到時(shí)鐘信號(hào),并且在MOSI引腳上出現(xiàn)第一個(gè)數(shù)據(jù)位時(shí),發(fā)送過(guò)程開(kāi)始(注:此時(shí)第一個(gè)位被發(fā)送出去)。余下的位(對(duì)于8位數(shù)據(jù)幀格式,還有7位;對(duì)于16位數(shù)據(jù)幀格式,還有15位)被裝進(jìn)移位寄存器。當(dāng)發(fā)送緩沖器中的數(shù)據(jù)傳輸?shù)揭莆患拇嫫鲿r(shí),SPI_SP寄存器的TXE標(biāo)志被設(shè)置,如果設(shè)置了SPI_CR2寄存器的TXEIE位,將會(huì)產(chǎn)生中斷。

數(shù)據(jù)接受過(guò)程

對(duì)于接收器,當(dāng)數(shù)據(jù)接收完成時(shí):

● 移位寄存器中的數(shù)據(jù)傳送到接收緩沖器,SPI_SR寄存器中的RXNE標(biāo)志被設(shè)置。

● 如果設(shè)置了SPI_CR2寄存器中的RXNEIE位,則產(chǎn)生中斷。在最后一個(gè)采樣時(shí)鐘邊沿后,RXNE位被置‘1’,移位寄存器中接收到的數(shù)據(jù)字節(jié)被傳送到接收緩沖器。當(dāng)讀SPI_DR寄存器時(shí),SPI設(shè)備返回這個(gè)接收緩沖器的數(shù)值。讀SPI_DR寄存器時(shí),RXNE位被清除。

上述部分是SPI的主/從模式理論配置過(guò)程,下面開(kāi)始對(duì)實(shí)際程序中的代碼配置進(jìn)行分解。程序較為簡(jiǎn)單,使用單顆CKS32F107VET6的SPI1外設(shè)作為主機(jī),SPI2外設(shè)作為從機(jī),通過(guò)兩路外設(shè)互相通信(先SPI1發(fā),SPI2收;再SPI2發(fā),SPI1收)的方式實(shí)現(xiàn)。

本講中,我們以簡(jiǎn)單的數(shù)據(jù)接收發(fā)送為例進(jìn)行配置,具體初始化代碼如下:

uint8_t CKS_SPI_Tx_Rx_Byte(uint8_t data)

{

while (SPI_I2S_GetFlagStatus(SPI1,

void SPI_Slaver_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

SPI_InitTypeDef SPI_InitStruct;

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1 | RCC_APB2Periph_AFIO, ENABLE);

/* Configure SPI1 Pins PA.4 NSS(software); PA.5 SCK; PA.6 MISO; PA.7 MOSI--------------*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Configure SPI1 -----------------------------------------------------------*/

SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;

SPI_InitStruct.SPI_Direction= SPI_Direction_2Lines_FullDuplex;

SPI_InitStruct.SPI_Mode = SPI_Mode_Slave;

SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStruct.SPI_CPOL = SPI_CPOL_High;

SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;

SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStruct.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStruct);

SPI_I2S_ITConfig(SPI1, SPI_I2S_IT_RXNE, ENABLE);

SPI_Cmd(SPI1, ENABLE);

/* Configure SPI1 INT------------------------------------------------------*/

NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

) == RESET);

SPI_I2S_SendData(SPI1, data);

while( SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

return SPI_I2S_ReceiveData(SPI1);

}

SPI中斷函數(shù):

void SPI1_IRQHandler(void)

{

if(SPI_I2S_GetITStatus(SPI1, SPI_I2S_IT_RXNE) != RESET)

{

SPI_Rx = SPI_I2S_ReceiveData(SPI1);

if(SPI_Rx <= 0x04)

{

SPI_I2S_SendData(SPI1, SPI_Tx[SPI_Rx]);

}

else

{

SPI_I2S_SendData(SPI1, SPI_Tx[0x05]);

}

while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}

SPI_I2S_ClearITPendingBit(SPI1, SPI_I2S_IT_RXNE);

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18917

    瀏覽量

    397867
  • adc
    adc
    +關(guān)注

    關(guān)注

    100

    文章

    7511

    瀏覽量

    555876
  • SPI協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    8832
  • 串行外設(shè)接口
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    4180

原文標(biāo)題:MCU微課堂|CKS32F107XX系列串行外設(shè)接口介紹

文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    中科CKS32F107XX系列MCU的獨(dú)立看門(mén)狗介紹

    中科CKS32F107xx系列產(chǎn)品內(nèi)部提供兩個(gè)看門(mén)狗定時(shí)器單元,獨(dú)立型看門(mén)狗IWDG(Independent Watchdog)和窗口型看門(mén)狗WWDG(Window Watchdog
    的頭像 發(fā)表于 11-28 14:51 ?3848次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b><b class='flag-5'>CKS32F107XX</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的獨(dú)立看門(mén)狗<b class='flag-5'>介紹</b>

    中科CKS32F107XX系列MCU的窗口看門(mén)狗介紹

    中科CKS32F107xx系列產(chǎn)品內(nèi)部提供兩個(gè)看門(mén)狗定時(shí)器單元,獨(dú)立型看門(mén)狗IWDG(Independent Watchdog)和窗口型看門(mén)狗WWDG(Window Watchdog
    的頭像 發(fā)表于 11-28 14:48 ?4108次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b><b class='flag-5'>CKS32F107XX</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的窗口看門(mén)狗<b class='flag-5'>介紹</b>

    中科CKS32F107XX系列MCU的bxCAN介紹

    CKS32F107xx系列產(chǎn)品的bxCAN支持CAN協(xié)議2.0A和2.0B標(biāo)準(zhǔn)。 該CAN 控制器支持最高的通訊速率為1Mb/s;可以自動(dòng)地接收和發(fā)送CAN報(bào)文,支持使用標(biāo)準(zhǔn)ID和擴(kuò)展ID的報(bào)文
    的頭像 發(fā)表于 01-22 09:06 ?3022次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b><b class='flag-5'>CKS32F107XX</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的bxCAN<b class='flag-5'>介紹</b>

    MCU微課堂|CKS32F4xx系列產(chǎn)品時(shí)鐘配置

    作為MCU運(yùn)行的基礎(chǔ),時(shí)鐘是單片機(jī)各個(gè)模塊工作時(shí)序的最小時(shí)間單位,推動(dòng)單片機(jī)的各指令執(zhí)行,是MCU選型的一個(gè)重要指標(biāo)。CKS32F4xx系列產(chǎn)品具有眾多的
    發(fā)表于 12-12 10:17 ?1308次閱讀

    中科CKS32F030K6T6 高性能32位RISC內(nèi)核MCU 程序兼容STM32F030K6T6

    。CKS32F030xx 系列包括三種不同的封裝,從 20 腳到 64 引腳不等的。根據(jù)選擇的器件,包含不同組合的外設(shè)。下面的內(nèi)容包含了這個(gè)產(chǎn)品系列所提供的全部
    發(fā)表于 03-05 16:23

    中科推出面向CKS32位MCU的編程調(diào)試工具

    隨著中科MCU在市場(chǎng)上越來(lái)越多的被應(yīng)用,為了更好的支持客戶(hù)在使用中科32位MCU芯片時(shí)的仿真
    的頭像 發(fā)表于 12-26 15:21 ?3228次閱讀

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發(fā)表于 11-06 16:56 ?1721次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC功能

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?1652次閱讀
    <b class='flag-5'>MCU</b>微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置
    的頭像 發(fā)表于 10-24 15:14 ?1542次閱讀
    <b class='flag-5'>MCU</b>微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>產(chǎn)品GPIO口配置

    CKS32F107xx系列時(shí)鐘組成介紹

    作為MCU運(yùn)行的基礎(chǔ),時(shí)鐘是MCU各個(gè)模塊工作時(shí)序的最小時(shí)間單位,推動(dòng)MCU的各指令執(zhí)行,是MCU選型的一個(gè)重要指標(biāo)。
    的頭像 發(fā)表于 05-20 14:04 ?1170次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>時(shí)鐘組成<b class='flag-5'>介紹</b>

    CKS32F107xx系列時(shí)鐘系統(tǒng)具體配置方法講解

    上一章節(jié)對(duì)CKS32F107xx系列時(shí)鐘做了整體介紹,本章節(jié)以使用HSI內(nèi)部高速時(shí)鐘為例對(duì)時(shí)鐘具體配置方法進(jìn)行講解。
    的頭像 發(fā)表于 05-28 10:05 ?1599次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>時(shí)鐘系統(tǒng)具體配置方法講解

    CKS32F107xx系列MCU中ADC介紹

    CKS32F107xx系列產(chǎn)品提供2個(gè)12位的模擬/數(shù)字轉(zhuǎn)換器(ADC),每個(gè)ADC共用多達(dá)16個(gè)外部通道,各通道的A/D轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。ADC的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器中。
    的頭像 發(fā)表于 06-22 11:04 ?1858次閱讀

    CKS32F107xx系列MCU的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

    16個(gè)引腳,如型號(hào)為CKS2F107VET6型號(hào)的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5組GPIO,芯片一共100個(gè)引腳,其中GPIO就占了一大部分,所有的GPIO引腳都有基本的輸入輸出功能。
    的頭像 發(fā)表于 07-22 09:23 ?1887次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的GPIO內(nèi)部硬件結(jié)構(gòu)和工作模式

    詳解CKS32F107xx系列的定時(shí)器同步功能

    CKS32F107xx系列部分定時(shí)器在內(nèi)部是相連的,可用于定時(shí)器同步或鏈接,方便用戶(hù)配置不同的同步模式,以便在電機(jī)控制、數(shù)據(jù)采集和PWM信號(hào)生成等應(yīng)用中,實(shí)現(xiàn)復(fù)雜的時(shí)間序列和多通道的同步操作。本節(jié)課
    的頭像 發(fā)表于 11-26 17:51 ?1737次閱讀
    詳解<b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>的定時(shí)器同步功能

    CKS32F107xx系列USART的LIN模式

    CKS32F107xx系列在支持正常USART功能的同時(shí),亦支持LIN(局域互聯(lián)網(wǎng))模式。
    的頭像 發(fā)表于 02-18 17:18 ?1151次閱讀
    <b class='flag-5'>CKS32F107xx</b><b class='flag-5'>系列</b>USART的LIN模式