![《STM32嵌入式單片機(jī)原理與應(yīng)用》 課件 第9章 SPI與I2C串行總線_第1頁](http://file4.renrendoc.com/view14/M0A/0C/3F/wKhkGWY4lRKACMkQAACGJ9HE8Ag423.jpg)
![《STM32嵌入式單片機(jī)原理與應(yīng)用》 課件 第9章 SPI與I2C串行總線_第2頁](http://file4.renrendoc.com/view14/M0A/0C/3F/wKhkGWY4lRKACMkQAACGJ9HE8Ag4232.jpg)
![《STM32嵌入式單片機(jī)原理與應(yīng)用》 課件 第9章 SPI與I2C串行總線_第3頁](http://file4.renrendoc.com/view14/M0A/0C/3F/wKhkGWY4lRKACMkQAACGJ9HE8Ag4233.jpg)
![《STM32嵌入式單片機(jī)原理與應(yīng)用》 課件 第9章 SPI與I2C串行總線_第4頁](http://file4.renrendoc.com/view14/M0A/0C/3F/wKhkGWY4lRKACMkQAACGJ9HE8Ag4234.jpg)
![《STM32嵌入式單片機(jī)原理與應(yīng)用》 課件 第9章 SPI與I2C串行總線_第5頁](http://file4.renrendoc.com/view14/M0A/0C/3F/wKhkGWY4lRKACMkQAACGJ9HE8Ag4235.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第9章SPI與I2C串行總線本章講述了SPI與I2C串行總線,包括SPI通信原理、STM32F103的SPI工作原理、SPI庫函數(shù)、SPI串行總線應(yīng)用實(shí)例、I2C通信原理、STM32F103的I2C接口、STM32F103的I2C庫函數(shù)和I2C串行總線應(yīng)用實(shí)例。
9.1SPI通信原理串行外設(shè)接口(SerialPeripheralInterface,SPI)是由美國摩托羅拉(Motorola)公司提出的一種高速全雙工串行同步通信接口,首先出現(xiàn)在M68HC系列處理器中,由于其簡單方便,成本低廉,傳輸速度快,因此被其他半導(dǎo)體廠商廣泛使用,從而成為事實(shí)上的標(biāo)準(zhǔn)。SPI與USART相比,其數(shù)據(jù)傳輸速度要快得多,因此它被廣泛地應(yīng)用于微控制器與ADC、LCD等設(shè)備的通信,尤其是高速通信的場合。微控制器還可以通過SPI組成一個小型同步網(wǎng)絡(luò)進(jìn)行高速數(shù)據(jù)交換,完成較復(fù)雜的工作。作為全雙工同步串行通信接口,SPI采用主/從模式(master/slave),支持一個或多個從設(shè)備,能夠?qū)崿F(xiàn)主設(shè)備和從設(shè)備之間的高速數(shù)據(jù)通信。SPI具有硬件簡單、成本低廉、易于使用、傳輸數(shù)據(jù)速度快等優(yōu)點(diǎn),使用于成本敏感或者高速通信的場合。但同時,SPI也存在無法檢查糾錯、不具備尋址能力和接收方?jīng)]有應(yīng)答信號等缺點(diǎn),不適合復(fù)雜或者可靠性要求較高的場合。SPI是同步全雙工串行通信接口。由于同步,SPI有一條公共的時鐘線;由于全雙工,SPI至少有兩條數(shù)據(jù)線來實(shí)現(xiàn)數(shù)據(jù)的雙向同時傳輸;由于串行,SPI收發(fā)數(shù)據(jù)只能一位一位地在各自的數(shù)據(jù)線上傳輸,因此最多只有兩條數(shù)據(jù)線:一條發(fā)送數(shù)據(jù)線和一條接收數(shù)據(jù)線。由此可見,SPI在物理層體現(xiàn)為4條信號線,分別是SCK、MOSI、MISO和SS。1)SCK(SerialClock),即時鐘線,由主設(shè)備產(chǎn)生。不同的設(shè)備支持的時鐘頻率不同。但每個時鐘周期可以傳輸一位數(shù)據(jù),經(jīng)過8個時鐘周期,一個完整的字節(jié)數(shù)據(jù)就傳輸完成了。2)MOSI(MasterOutputSlaveInput),即主設(shè)備數(shù)據(jù)輸出/從設(shè)備數(shù)據(jù)輸入線。這條信號線上的方向是從主設(shè)備到從設(shè)備,即主設(shè)備從這條信號線發(fā)送數(shù)據(jù),從設(shè)備從這條信號線上接收數(shù)據(jù)。有的半導(dǎo)體廠商(如Microchip公司),站在從設(shè)備的角度,將其命名為SDI。9.1.1SPI介紹3)MISO(MasterInputSlaveOutput),即主設(shè)備數(shù)據(jù)輸入/從設(shè)備數(shù)據(jù)輸出線。這條信號線上的方向是由從設(shè)備到主設(shè)備,即從設(shè)備從這條信號線發(fā)送數(shù)據(jù),主設(shè)備從這條信號線上接收數(shù)據(jù)。有的半導(dǎo)體廠商(如Microchip公司),站在從設(shè)備的角度,將其命名為SDO。4)SS(SlaveSelect),有時候也叫CS(ChipSelect),SPI從設(shè)備選擇信號線,當(dāng)有多個SPI從設(shè)備與SPI主設(shè)備相連(即一主多從)時,SS用來選擇激活指定的從設(shè)備,由SPI主設(shè)備(通常是微控制器)驅(qū)動,低電平有效。當(dāng)只有一個SPI從設(shè)備與SPI主設(shè)備相連(即一主一從)時,SS并不是必需的。因此,SPI也被稱為三線同步通信接口。除了SCK、MOSI、MISO和SS這4條信號線外,SPI接口還包含一個串行移位寄存器,如圖9-1所示。圖9-1SPI接口組成SPI互連主要有一主一從和一主多從兩種互連方式。1.一主一從在一主一從的SPI互連方式下,只有一個SPI主設(shè)備和一個SPI從設(shè)備進(jìn)行通信。這種情況下,只需要分別將主設(shè)備的SCK、MOSI、MISO和從設(shè)備的SCK、MOSI、MISO直接相連,并將主設(shè)備的SS置為高電平,從設(shè)備的SS接地(置為低電平,片選有效,選中該從設(shè)備)即可,如圖9-2所示。9.1.2SPI互連圖9-2一主一從的SPI互連2.一主多從在一主多從的SPI互連方式下,一個SPI主設(shè)備可以和多個SPI從設(shè)備相互通信。這種情況下,所有的SPI設(shè)備(包括主設(shè)備和從設(shè)備)共享時鐘線和數(shù)據(jù)線,即SCK、MOSI、MISO這3條線,并在主設(shè)備端使用多個GPIO引腳來選擇不同的SPI從設(shè)備,如圖9-3所示。顯然,在多個從設(shè)備的SPI互連方式下,片選信號SS必須對每個從設(shè)備分別進(jìn)行選通,增加了連接的難度和連接的數(shù)量,失去了串行通信的優(yōu)勢。圖9-3一主多從的SPI互連9.2STM32F103的SPI工作原理串行外設(shè)接口(SPI)允許芯片與外部設(shè)備以半/全雙工、同步、串行方式通信。此接口可以被配置成主模式,并為外部從設(shè)備提供通信時鐘(SCK),接口還能以多主的配置方式工作。它可用于多種用途,包括使用一條雙向數(shù)據(jù)線的雙線單工同步傳輸,還可使用CRC校驗(yàn)的可靠通信。STM32F103微控制器的小容量產(chǎn)品有1個SPI接口,中等容量產(chǎn)品有2個SPI,大容量產(chǎn)品則有3個SPI。STM32F103微控制器SPI主要具有以下特征:1)3線全雙工同步傳輸。2)帶或不帶第三根雙向數(shù)據(jù)線的雙線單工同步傳輸。3)8或16位傳輸幀格式選擇。4)主或從操作。5)支持多主模式。6)8個主模式波特率預(yù)分頻系數(shù)(最大為fPCLK/2)。7)從模式頻率(最大為fPCLK/2)。8)主模式和從模式的快速通信。9.2.1SPI主要特征9)主模式和從模式下均可以由軟件或硬件進(jìn)行NSS管理:主/從操作模式的動態(tài)改變。10)可編程的時鐘極性和相位。11)可編程的數(shù)據(jù)順序,MSB在前或LSB在前。12)可觸發(fā)中斷的專用發(fā)送和接收標(biāo)志。13)SPI總線忙狀態(tài)標(biāo)志。14)支持可靠通信的硬件CRC。在發(fā)送模式下,CRC值可以被作為最后一個字節(jié)發(fā)送;在全雙工模式下,對接收到的最后一個字節(jié)自動進(jìn)行CRC校驗(yàn)。15)可觸發(fā)中斷的主模式故障、過載以及CRC錯誤標(biāo)志。16)支持DMA功能的1字節(jié)發(fā)送和接收緩沖器:產(chǎn)生發(fā)送和接受請求。STM32F103微控制器SPI主要由波特率發(fā)生器、收發(fā)控制和數(shù)據(jù)存儲轉(zhuǎn)移三部分組成,內(nèi)部結(jié)構(gòu)如圖9-4所示。波特率發(fā)生器用來產(chǎn)生SPI的SCK時鐘信號,收發(fā)控制主要由控制寄存器組成,數(shù)據(jù)存儲轉(zhuǎn)移主要由移位寄存器、接收緩沖區(qū)和發(fā)送緩沖區(qū)等構(gòu)成。
9.2.2SPI內(nèi)部結(jié)構(gòu)圖9-4STM32F103微控制器SPI內(nèi)部結(jié)構(gòu)圖通常SPI通過4個引腳與外部器件相連:①M(fèi)ISO:主設(shè)備輸入/從設(shè)備輸出引腳。該引腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù)。②MOSI:主設(shè)備輸出/從設(shè)備輸入引腳。該引腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù)。③SCK:串口時鐘,作為主設(shè)備的輸出,從設(shè)備的輸入。④NSS:從設(shè)備選擇。這是一個可選的引腳,用來選擇主/從設(shè)備。它的功能是用來作為片選引腳,讓主設(shè)備可以單獨(dú)地與特定從設(shè)備通信,避免數(shù)據(jù)線上的沖突。SPI_CR寄存器的CPOL和CPHA位,能夠組合成四種可能的時序關(guān)系。CPOL(時鐘極性)位控制在沒有數(shù)據(jù)傳輸時時鐘的空閑狀態(tài)電平,此位對主模式和從模式下的設(shè)備都有效。如果CPOL被清0,SCK引腳在空閑狀態(tài)保持低電平;如果CPOL被置1,SCK引腳在空閑狀態(tài)保持高電平。如圖9-5所示,如果CPHA(時鐘相位)位被清0,數(shù)據(jù)在SCK時鐘的奇數(shù)(第1、3、5個···)跳變沿(CPOL位為0時就是上升沿,CPOL位為1時就是下降沿)進(jìn)行數(shù)據(jù)位的存取,數(shù)據(jù)在SCK時鐘偶數(shù)(第2、4、6個···)跳變沿(CPOL位為0時就是下降沿,CPOL位為1時就是上升沿)準(zhǔn)備就緒。9.2.3時鐘信號的相位和極性圖9-5CPHA=0時SPI時序圖如圖9-6所示,如果CPHA(時鐘相位)位被置1,數(shù)據(jù)在SCK時鐘的偶數(shù)(第2、4、6個···)跳變沿(CPOL位為0時就是下降沿,CPOL位為1時就是上升沿)進(jìn)行數(shù)據(jù)位的存取,數(shù)據(jù)在SCK時鐘奇數(shù)(第1、3、5個···)跳變沿(CPOL位為0時就是上升沿,CPOL位為1時就是下降沿)準(zhǔn)備就緒。圖9-6CPHA=1時SPI時序圖CPOL時鐘極性和CPHA時鐘相位的組合選擇數(shù)據(jù)捕捉的時鐘邊沿。圖9-5和圖9-6顯示了SPI傳輸?shù)?種CPHA和CPOL位組合。此圖可以解釋為主設(shè)備和從設(shè)備的SCK、MISO、MOSI引腳直接連接的主或從時序圖。根據(jù)SPI_CR1寄存器中的LSBFIRST位,輸出數(shù)據(jù)位時可以MSB在先也可以LSB在先。根據(jù)SPI_CR1寄存器的DFF位,每個數(shù)據(jù)幀可以是8位或是16位。所選擇的數(shù)據(jù)幀格式?jīng)Q定發(fā)送/接收的數(shù)據(jù)長度。9.2.4數(shù)據(jù)幀格式在SPI為主模式時,在SCK腳產(chǎn)生串行時鐘。請按照以下步驟配置SPI為主模式。9.2.5配置SPI為主模式1.配置步驟1)通過SPI_CR1寄存器的BR[2:0]位定義串行時鐘波特率。2)選擇CPOL和CPHA位,定義數(shù)據(jù)傳輸和串行時鐘間的相位關(guān)系。3)設(shè)置DFF位來定義8位或16位數(shù)據(jù)幀格式。4)配置SPI_CR1寄存器的LSBFIRST位定義幀格式。5)如果需要NSS引腳工作在輸入模式,硬件模式下,在整個數(shù)據(jù)幀傳輸期間應(yīng)把NSS腳連接到高電平;在軟件模式下,需設(shè)置SPI_CR1寄存器的SSM位和SSI位。如果NSS引腳工作在輸出模式,則只需設(shè)置SSOE位。6)必須設(shè)置MSTR位和SPE位(只當(dāng)NSS腳被連到高電平,這些位才能保持置位)。在這個配置中,MOSI引腳是數(shù)據(jù)輸出,而MISO引腳是數(shù)據(jù)輸入。2.?dāng)?shù)據(jù)發(fā)送過程當(dāng)寫入數(shù)據(jù)至發(fā)送緩沖器時,發(fā)送過程開始。在發(fā)送第一個數(shù)據(jù)位時,數(shù)據(jù)字被并行地(通過內(nèi)部總線)傳入移位寄存器,而后串行地移出到MOSI腳上;“MSB在先”還是“LSB在先”,取決于SPI_CR1寄存器中的LSBFIRST位的設(shè)置。數(shù)據(jù)從發(fā)送緩沖器傳輸?shù)揭莆患拇嫫鲿rTXE標(biāo)志將被置位,如果設(shè)置了SPI_CR1寄存器中的TXEIE位,將產(chǎn)生中斷。3.?dāng)?shù)據(jù)接收過程對于接收器來說,當(dāng)數(shù)據(jù)傳輸完成時:1)傳送移位寄存器里的數(shù)據(jù)到接收緩沖器,并且RXNE標(biāo)志被置位。2)如果設(shè)置了SPI_CR2寄存器中的RXNEIE位,則產(chǎn)生中斷。在最后一個采樣時鐘沿,RXNE位被設(shè)置,在移位寄存器中接收到的數(shù)據(jù)字被傳送到接收緩沖器。讀SPI_DR寄存器時,SPI設(shè)備返回接收緩沖器中的數(shù)據(jù)。讀SPI_DR寄存器將清除RXNE位。9.3SPI庫函數(shù)SPI固件庫支持21種庫函數(shù),如表9-1所示。為了理解這些函數(shù)的具體使用方法,對標(biāo)準(zhǔn)庫中部分函數(shù)做詳細(xì)介紹。表9-1SPI庫函數(shù)函數(shù)名稱功能SPI_DeInit將外設(shè)SPIx寄存器重設(shè)為缺省值SPI_Init根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器SPI_StructInit把SPI_InitStruct中的每一個參數(shù)按缺省值填入SPI_Cmd使能或者失能SPI外設(shè)SPI_ITConfig使能或者失能指定的SPI中斷SPI_DMACmd使能或者失能指定SPI的DMA請求SPI_SendData通過外設(shè)SPIx發(fā)送一個數(shù)據(jù)SPI_ReceiveData返回通過SPIx接收最近數(shù)據(jù)SPI_DMALastTransferCmd使下一次DMA傳輸為最后一次傳輸SPI_NSSInternalSoftwareConfig為選定的SPI軟件配置內(nèi)部NSS引腳SPI_SSOutputCmd使能或者失能指定的SPISPI_DataSizeConfig設(shè)置選定的SPI數(shù)據(jù)大小SPI_TransmitCRC發(fā)送SPIx的CRC值SPI_CalculateCRC使能或者失能指定SPI的傳輸字CRC值計(jì)算SPI_GetCRC返回指定SPI的發(fā)送或者接收CRC寄存器值SPI_GetCRCPolynomial返回指定SPI的CRC多項(xiàng)式寄存器值SPI_BiDirectionalLineConfig選擇指定SPI在雙向模式下的數(shù)據(jù)傳輸方向SPI_GetFlagStatus檢查指定的SPI標(biāo)志位設(shè)置與否SPI_ClearFlag清除SPIx的待處理標(biāo)志位SPI_GetITStatus檢查指定的SPI中斷發(fā)生與否SPI_ClearITPendingBit清除SPIx的中斷待處理位1.函數(shù)SPI_DeInit函數(shù)名:SPI_I2S_DeInit。函數(shù)原型:voidSPI_I2S_DeInit(SPI_TypeDef*SPIx)。功能描述:將外設(shè)SPIx寄存器重設(shè)為缺省值。輸入?yún)?shù):SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸出參數(shù):無。返回值:無。2.函數(shù)SPI_Init函數(shù)名:SPI_Init。函數(shù)原型:voidSPI_Init(SPI_TypeDef*SPIx,SPI_InitTypeDef*SPI_InitStruct)。功能描述:根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:SPI_InitStruct,指向結(jié)構(gòu)SPI_InitTypeDef的指針,包含了外設(shè)SPI的配置信息。輸出參數(shù):無。返回值:無。3.函數(shù)SPI_Cmd函數(shù)名:SPI_Cmd。函數(shù)原型:voidSPI_Cmd(SPI_TypeDef*SPIx,F(xiàn)unctionalStateNewState)。功能描述:使能或者失能SPI外設(shè)。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:NewState,外設(shè)SPIx的新狀態(tài),這個參數(shù)可以取ENABLE或者DISABLE。輸出參數(shù):無。返回值:無。4.函數(shù)SPI_SendData函數(shù)名:SPI_I2S_SendData。函數(shù)原型:voidSPI_I2S_SendData(SPI_TypeDef*SPIx,u16Data)。功能描述:通過外設(shè)SPIx發(fā)送一個數(shù)據(jù)。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:Data,待發(fā)送的數(shù)據(jù)。輸出參數(shù):無。返回值:無。5.函數(shù)SPI_I2S_ReceiveData函數(shù)名:SPI_I2S_ReceiveData。函數(shù)原型:u16SPI_I2S_ReceiveData(SPI_TypeDef*SPIx)。功能描述:返回通過SPIx最近接收的數(shù)據(jù)。輸入?yún)?shù):SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸出參數(shù):無。返回值:接收到的字。6.函數(shù)SPI_I2S_ITConfig函數(shù)名:SPI_I2S_ITConfig。函數(shù)原型:voidSPI_I2S_ITConfig(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT,F(xiàn)unctionalStateNewState)。功能描述:使能或者失能指定的SPI/I2S中斷。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:SPI_I2S_IT,待使能或者失能的SPI/I2S中斷源。輸入?yún)?shù)3:NewState,SPIx/I2S中斷的新狀態(tài),這個參數(shù)可以取ENABLE或者DISABLE。輸出參數(shù):無。返回值:無。7.函數(shù)SPI_I2S_GetITStatus函數(shù)名:SPI_I2S_GetITStatus。函數(shù)原型:ITStatusSPI_I2S_GetITStatus(SPI_TypeDef*SPIx,uint8_tSPI_I2S_IT)。功能描述:檢查指定的SPI_I2S中斷發(fā)生與否。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:SPI_I2S_IT,待檢查的SPI_I2S中斷源。輸出參數(shù):無。返回值:SPI_IT的新狀態(tài)。8.函數(shù)SPI_I2S_ClearFlag函數(shù)名:SPI_I2S_ClearFlag。函數(shù)原型:voidSPI_I2S_ClearFlag(SPI_TypeDef*SPIx,uint16_tSPI_I2S_FLAG)。功能描述:清除SPI/I2S的待處理標(biāo)志位。輸入?yún)?shù)1:SPIx,x可以是1或者2,用來選擇SPI外設(shè)。輸入?yún)?shù)2:SPI_I2S_FLAG,待清除的SPI/I2S標(biāo)志位。輸出參數(shù):無。返回值:無。9.4SPI串行總線應(yīng)用實(shí)例Flash存儲器又稱閃存,它與EEPROM都是掉電后數(shù)據(jù)不丟失的存儲器,但Flash存儲器容量普遍大于EEPROM,現(xiàn)在基本取代了它的地位。我們生活中常用的U盤、SD卡、SSD固態(tài)硬盤以及STM32芯片內(nèi)部用于存儲程序的設(shè)備,都是Flash類型的存儲器。本節(jié)以一種使用SPI通信的串行Flash存儲芯片W25Q64的讀寫為例,講述STM32的SPI使用方法。實(shí)例中STM32的SPI外設(shè)采用主模式,通過查詢事件的方式來確保正常通信。SPI是一種串行同步通信協(xié)議,由一個主設(shè)備和一個或多個從設(shè)備組成,主設(shè)備啟動一個與從設(shè)備的同步通信,從而完成數(shù)據(jù)的交換。該總線大量用在Flash、ADC、RAM和顯示驅(qū)動器之類的慢速外設(shè)器件中。因?yàn)椴煌钠骷ㄐ琶畈煌?,這里具體介紹STM32上SPI的配置方法,關(guān)于具體器件請參考相關(guān)說明書。SPI配置流程圖如圖9-7所示,主要包括開啟時鐘、相關(guān)引腳配置和SPI工作模式設(shè)置。其中,GPIO配置需將SPI器件片選設(shè)置為高電平,SCK、MISO、MOSI設(shè)置為復(fù)用功能。配置完成后,可根據(jù)器件功能和命令進(jìn)行讀寫操作。
9.4.1SPI配置流程圖9-7SPI配置流程圖W25Q64SPI串行Flash硬件連接圖如圖9-8所示。9.4.2SPI串行總線應(yīng)用的硬件設(shè)計(jì)圖9-8W25Q64SPI串行Flash接口電路圖本開發(fā)板中的Flash芯片(W25Q64)是一種使用SPI通信協(xié)議的NORFlash存儲器,它的CS/CLK/DIO/DO引腳分別連接到STM32對應(yīng)的SPI引腳NSS、SCK、MOSI、MISO上,其中STM32的NSS引腳是一個普通的GPIO,不是SPI的專用NSS引腳,所以程序中要使用軟件控制的方式。Flash芯片中還有WP和HOLD引腳。WP引腳可控制寫保護(hù)功能,當(dāng)該引腳為低電平時,禁止寫入數(shù)據(jù)。直接接電源,不使用寫保護(hù)功能。HOLD引腳可用于暫停通信,該引腳為低電平時,通信暫停,數(shù)據(jù)輸出引腳輸出高阻抗?fàn)顟B(tài),時鐘和數(shù)據(jù)輸入引腳無效。直接接電源,不使用通信暫停功能。關(guān)于Flash芯片的更多信息,可參考W25Q64數(shù)據(jù)手冊。若使用的開發(fā)板Flash的型號或控制引腳不一樣,只需根據(jù)工程模板修改即可,程序的控制原理相同。為了使工程更加有條理,把讀寫Flash相關(guān)的代碼獨(dú)立分開存儲,方便以后移植。在“工程模板”之上新建bsp_spi_flash.c及bsp_spi_flash.h文件。編程要點(diǎn):1)初始化通信使用的目標(biāo)引腳及端口時鐘;2)使能SPI外設(shè)的時鐘;3)配置SPI外設(shè)的模式、地址、速率等參數(shù)并使能SPI外設(shè);4)編寫基本SPI按字節(jié)收發(fā)的函數(shù);5)編寫對Flash擦除及讀寫操作的函數(shù);6)編寫測試程序,對讀寫數(shù)據(jù)進(jìn)行校驗(yàn)。9.4.3SPI串行總線應(yīng)用的軟件設(shè)計(jì)9.5I2C通信原理I2C總線是原Philips公司推出的一種用于IC器件之間連接的2線制串行擴(kuò)展總線,它通過2條信號線(SDA,串行數(shù)據(jù)線;SCL,串行時鐘線)在連接到總線上的器件之間傳送數(shù)據(jù),所有連接在總線的I2C器件都可以工作于發(fā)送方式或接收方式。I2C總線主要是用來連接整體電路,I2C是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實(shí)時數(shù)據(jù)傳輸?shù)目刂圃础_@種方式簡化了信號傳輸總線接口。I2C總線結(jié)構(gòu)如圖9-10所示。9.5.1I2C串行總線概述圖9-10I2C總線結(jié)構(gòu)1.數(shù)據(jù)位的有效性規(guī)定如圖9-11所示,I2C總線進(jìn)行數(shù)據(jù)傳送時,時鐘信號為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定,只有在時鐘線上的信號為低電平期間,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。
9.5.2I2C總線的數(shù)據(jù)傳送圖9-11I2C數(shù)據(jù)有效性規(guī)定2.起始和終止信號I2C總線規(guī)定,當(dāng)SCL為高電平時,SDA的電平必須保持穩(wěn)定不變的狀態(tài),只有當(dāng)SCL處于低電平時,才可以改變SDA的電平值,但起始信號和停止信號是特例。因此,當(dāng)SCL處于高電平時,SDA的任何跳變都會被識別成為一個起始信號或停止信號。如圖9-12所示,SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。圖9-12I2C總線起始和終止信號3.數(shù)據(jù)傳送格式1)字節(jié)傳送與應(yīng)答在I2C總線的數(shù)據(jù)傳輸過程中,發(fā)送到SDA信號線上的數(shù)據(jù)以字節(jié)為單位,每個字節(jié)必須為8位,而且是高位(MSB)在前,低位(LSB)在后,每次發(fā)送數(shù)據(jù)的字節(jié)數(shù)量不受限制。但在這個數(shù)據(jù)傳輸過程中需要著重強(qiáng)調(diào)的是,當(dāng)發(fā)送方發(fā)送完每一字節(jié)后,都必須等待接收方返回一個應(yīng)答響應(yīng)信號,如圖9-13所示。響應(yīng)信號寬度為1位,緊跟在8個數(shù)據(jù)位后面,所以發(fā)送1字節(jié)的數(shù)據(jù)需要9個SCL時鐘脈沖。響應(yīng)時鐘脈沖也是由主機(jī)產(chǎn)生的,主機(jī)在響應(yīng)時鐘脈沖期間釋放SDA線,使其處在高電平。圖9-13I2C總線字節(jié)傳送與應(yīng)答2)總線的尋址掛在I2C總線上的器件可以很多,但相互間只有兩根線連接(數(shù)據(jù)線和時鐘線),如何進(jìn)行識別尋址呢?具有I2C總線結(jié)構(gòu)的器件在其出廠時已經(jīng)給定了器件的地址編碼。I2C總線器件地址SLA(以7位為例)格式如圖9-14所示。圖9-14I2C總線器件地址格式(1)DA3~DA0:4位器件地址是I2C總線器件固有的地址編碼,器件出廠時就已給定,用戶不能自行設(shè)置。例如,I2C總線器件E2PROMAT24CXX的器件地址為1010。(2)A2~A0:3位引腳地址用于相同地址器件的識別。若I2C總線上掛有相同地址的器件,或同時掛有多片相同器件時,可用硬件連接方式對3位引腳A2~A0接Vcc或接地,形成地址數(shù)據(jù)。(3)R/W:用于確定數(shù)據(jù)傳送方向。R/W=1時,主機(jī)接收(讀);R/W=0,主機(jī)發(fā)送(寫)。主機(jī)發(fā)送地址時,總線上的每個從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較,如果相同,則認(rèn)為自己正被主機(jī)尋址,根據(jù)R/W位將自己確定為發(fā)送器或接收器。3)數(shù)據(jù)幀格式I2C總線上傳送的數(shù)據(jù)信號是廣義的,既包括地址信號,又包括真正的數(shù)據(jù)信號。在起始信號后必須傳送一個從機(jī)的地址(7位),第8位是數(shù)據(jù)的傳送方向位(R/W),用0表示主機(jī)發(fā)送數(shù)據(jù)(W),1表示主機(jī)接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號結(jié)束。但是,若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生終止信號,立即再次發(fā)出起始信號對另一從機(jī)進(jìn)行尋址。在總線的一次數(shù)據(jù)傳送過程中,可以有以下幾種組合方式。(1)主機(jī)向從機(jī)寫數(shù)據(jù)主機(jī)向從機(jī)寫n個字節(jié)數(shù)據(jù),數(shù)據(jù)傳送方向在整個傳送過程中不變。12C的數(shù)據(jù)線SDA上的數(shù)據(jù)流如圖9-15所示。有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送。A表示應(yīng)答,A表示非應(yīng)答(高電平),S表示起始信號,P表示終止信號。如果主機(jī)要向從機(jī)傳輸一個或多個字節(jié)數(shù)據(jù),在SDA上需經(jīng)歷以下過程:①主機(jī)產(chǎn)生起始信號S。②主機(jī)發(fā)送尋址字節(jié)SLAVEADDRESS,其中的高7位表示數(shù)據(jù)傳輸目標(biāo)的從機(jī)地址;最后1位是傳輸方向位,此時其值為0,表示數(shù)據(jù)傳輸方向從主機(jī)到從機(jī)。③當(dāng)某個從機(jī)檢測到主機(jī)在I2C總線上廣播的地址與它的地址相同時,該從機(jī)就被選中,并返回一個應(yīng)答信號A。沒被選中的從機(jī)會忽略之后SDA上的數(shù)據(jù)。圖9-15主機(jī)向從機(jī)寫數(shù)據(jù)SDA數(shù)據(jù)流④當(dāng)主機(jī)收到來自從機(jī)的應(yīng)答信號后,開始發(fā)送數(shù)據(jù)DATA。主機(jī)每發(fā)送完一個字節(jié),從機(jī)產(chǎn)生一個應(yīng)答信號。如果在I2C的數(shù)據(jù)傳輸過程中,從機(jī)產(chǎn)生了非應(yīng)答信號/A,則主機(jī)提前結(jié)束本次數(shù)據(jù)傳輸。⑤當(dāng)主機(jī)的數(shù)據(jù)發(fā)送完畢后,主機(jī)產(chǎn)生一個停止信號結(jié)束數(shù)據(jù)傳輸,或者產(chǎn)生一個重復(fù)起始信號進(jìn)入下一次數(shù)據(jù)傳輸。(2)主機(jī)從從機(jī)讀數(shù)據(jù)主機(jī)從從機(jī)讀n個字節(jié)數(shù)據(jù)時,I2C的數(shù)據(jù)線SDA上的數(shù)據(jù)流如圖9-16所示。其中,陰影框表示數(shù)據(jù)由主機(jī)傳輸?shù)綇臋C(jī),透明框表示數(shù)據(jù)流由從機(jī)傳輸?shù)街鳈C(jī)。9-16主機(jī)由從機(jī)讀數(shù)據(jù)時SDA上的數(shù)據(jù)流流如果主機(jī)要從從機(jī)讀取一個或多個字節(jié)數(shù)據(jù),在SDA上需經(jīng)歷以下過程:①主機(jī)產(chǎn)生起始信號S。②主機(jī)發(fā)送尋址字節(jié)SLAVEADDRESS,其中的高7位表示數(shù)據(jù)傳輸目標(biāo)的從機(jī)地址;最后1位是傳輸方向位,此時其值為1,表示數(shù)據(jù)傳輸方向由從機(jī)到主機(jī)。尋址字節(jié)SLAVEADDRESS發(fā)送完畢后,主機(jī)釋放SDA(拉高SDA)。③當(dāng)某個從機(jī)檢測到主機(jī)在12C總線上廣播的地址與它的地址相同時,該從機(jī)就被選中,并返回一個應(yīng)答信號A。沒被選中的從機(jī)會忽略之后SDA上的數(shù)據(jù)。④當(dāng)主機(jī)收到應(yīng)答信號后,從機(jī)開始發(fā)送數(shù)據(jù)DATA。從機(jī)每發(fā)送完一個字節(jié),主機(jī)產(chǎn)生一個應(yīng)答信號。當(dāng)主機(jī)讀取從機(jī)數(shù)據(jù)完畢或者主機(jī)想結(jié)束本次數(shù)據(jù)傳輸時,可以向從機(jī)返回一個非應(yīng)答信號/A,從機(jī)即自動停止數(shù)據(jù)傳輸。⑤當(dāng)傳輸完畢后,主機(jī)產(chǎn)生一個停止信號結(jié)束數(shù)據(jù)傳輸,或者產(chǎn)生一個重復(fù)起始信號進(jìn)入下一次數(shù)據(jù)傳輸。(3)主機(jī)和從機(jī)雙向數(shù)據(jù)傳送在傳送過程中,當(dāng)需要改變傳送方向時,起始信號和從機(jī)地址都被重復(fù)產(chǎn)生一次,但兩次讀/寫方向位正好反向。I2C的數(shù)據(jù)線SDA上的數(shù)據(jù)流如圖9-17所示。圖9-17主機(jī)和從機(jī)雙向數(shù)據(jù)傳送SDA上的數(shù)據(jù)流主機(jī)和從機(jī)雙向數(shù)據(jù)傳送的數(shù)據(jù)傳送過程是主機(jī)向從機(jī)寫數(shù)據(jù)和主機(jī)由從機(jī)讀數(shù)據(jù)的組合,故不再贅述。4.傳輸速率I2C的標(biāo)準(zhǔn)傳輸速率為100Kbit/s,快速傳輸可達(dá)400Kbit/s。目前還增加了高速模式,最高傳輸速率可達(dá)3.4Mbit/s。9.6STM32F103的I2C接口STM32F103微控制器的I2C模塊連接微控制器和I2C總線,提供多主機(jī)功能,支持標(biāo)準(zhǔn)和快速兩種傳輸速率,控制所有I2C總線特定的時序、協(xié)議、仲裁和定時。支持標(biāo)準(zhǔn)和快速兩種模式,同時與SMBus2.0兼容。I2C模塊有多種用途,包括CRC碼的生成和校驗(yàn)、SMBus(SystemManagementBus,系統(tǒng)管理總線)和PMBus(PowerManagementBus,電源管理總線)。根據(jù)特定設(shè)備的需要,可以使用DMA以減輕CPU的負(fù)擔(dān)。STM32F103微控制器的小容量產(chǎn)品有1個I2C,中等容量和大容量產(chǎn)品有2個I2C。STM32F103微控制器的I2C主要具有以下特性:1)所有的I2C都位于APB1總線。2)支持標(biāo)準(zhǔn)(100Kbit/s)和快速(400Kbit/s)兩種傳輸速率。3)所有的I2C可工作于主模式或從模式,可以作為主發(fā)送器、主接收器、從發(fā)送器或者從接收器。4)支持7位或10位尋址和廣播呼叫。5)具有3個狀態(tài)標(biāo)志:發(fā)送器/接收器模式標(biāo)志、字節(jié)發(fā)送結(jié)束標(biāo)志、總線忙標(biāo)志。9.6.1STM32F103的I2C主要特性6)具有2個中斷向量:1個中斷用于地址/數(shù)據(jù)通信成功,1個中斷用于錯誤。7)具有單字節(jié)緩沖器的DMA。8)兼容系統(tǒng)管理總線SMBus2.0。STM32F103系列微控制器的I2C結(jié)構(gòu),由SDA線和SCL線展開,主要分為時鐘控制、數(shù)據(jù)控制和控制邏輯等部分,負(fù)責(zé)實(shí)現(xiàn)I2C的時鐘產(chǎn)生、數(shù)據(jù)收發(fā)、總線仲裁和中斷、DMA等功能,如圖9-18所示。9.6.2STM432F103的I2C內(nèi)部結(jié)構(gòu)圖9-18STM32F103微控制器I2C接口內(nèi)部結(jié)構(gòu)1.時鐘控制時鐘控制模塊根據(jù)控制寄存器CCR、CR1和CR2中的配置產(chǎn)的生I2C協(xié)議的時鐘信號:即SCL線上的信號。為了產(chǎn)生正確時序,必須在I2C_CR2寄存器中設(shè)定I2C的輸入時鐘。當(dāng)I2C工作在標(biāo)準(zhǔn)傳輸速率時,輸入時鐘的頻率必須大于等于2MHz;當(dāng)I2C工作在快速傳輸速率時,輸入時鐘的頻率必須大于等于4MHz。2.數(shù)據(jù)控制數(shù)據(jù)控制模塊通過一系列控制架構(gòu),在將要發(fā)送數(shù)據(jù)的基礎(chǔ)上,按照12C的數(shù)據(jù)格式加上起始信號、地址信號、應(yīng)答信號和停止信號,將數(shù)據(jù)一位一位從SDA線上發(fā)送出去。讀取數(shù)據(jù)時,則從SDA線上的信號中提取出接收到的數(shù)據(jù)值。發(fā)送和接收的數(shù)據(jù)都被保存在數(shù)據(jù)寄存器中。3.控制邏輯控制邏輯用于產(chǎn)生I2C中斷和DMA請求。I2C接口可以按下述4種模式中的一種運(yùn)行:1)從發(fā)送器模式。2)從接收器模式。3)主發(fā)送器模式。4)主接收器模式。該模塊默認(rèn)工作于從模式。接口在生成起始條件后自動地從從模式切換到主模式;當(dāng)仲裁丟失或產(chǎn)生停止信號時,則從主模式切換到從模式。允許多主機(jī)功能。主模式時,I2C接口啟動數(shù)據(jù)傳輸并產(chǎn)生時鐘信號。串行數(shù)據(jù)傳輸總是以起始條件開始并以停止條件結(jié)束。起始條件和停止條件都是在主模式下由軟件控制產(chǎn)生。9.6.3STM32F103的模式選擇從模式時,I2C接口能識別它自己的地址(7位或10位)和廣播呼叫地址。軟件能夠控制開啟或禁止廣播呼叫地址的識別。數(shù)據(jù)和地址按8位/字節(jié)進(jìn)行傳輸,高位在前。跟在起始條件后的1或2字節(jié)是地址(7位模式為1字節(jié),10位模式為2字節(jié))。地址只在主模式發(fā)送。在一個字節(jié)傳輸?shù)?個時鐘后的第9個時鐘期間,接收器必須回送一個應(yīng)答位(ACK)給發(fā)送器。9.7STM32F103的I2C庫函數(shù)STM32標(biāo)準(zhǔn)庫中提供了幾乎覆蓋所有I2C操作的函數(shù),I2C函數(shù)庫如表9-2所示。為了理解這些函數(shù)的具體使用方法,本節(jié)將對標(biāo)準(zhǔn)庫中部分函數(shù)做詳細(xì)介紹。表9-2I2C庫函數(shù)函數(shù)名稱功能I2C_DeInit將外設(shè)I2Cx寄存器重設(shè)為缺省值I2C_Init根據(jù)I2C_InitStruct中指定的參數(shù)初始化外設(shè)I2Cx寄存器I2C_StructInit把I2C_InitStruct中的每一個參數(shù)按缺省值填入I2C_Cmd使能或者失能I2C外設(shè)I2C_DMACmd使能或者失能指定I2C的DMA請求I2C_DMALastTransferCmd使下一次DMA傳輸為最后一次傳輸I2C_GenerateSTART產(chǎn)生I2Cx傳輸START條件I2C_GenerateSTOP產(chǎn)生I2Cx傳輸STOP條件I2C_AcknowledgeConfig使能或者失能指定I2C的應(yīng)答功能I2C_OwnAddress2Config設(shè)置指定I2C的自身地址2I2C_DualAddressCmd使能或者失能指定I2C的雙地址模式I2C_GeneralCallCmd使能或者失能指定I2C的廣播呼叫功能I2C_ITConfig使能或者失能指定的I2C中斷I2C_SendData通過外設(shè)I2Cx發(fā)送一個數(shù)據(jù)I2C_ReceiveData讀取I2Cx最近接收的數(shù)據(jù)I2C_Send7bitAddress向指定的從I2C設(shè)備傳送地址字I2C_ReadRegister讀取指定的I2C寄存器并返回其值I2C_SoftwareResetCmd使能或者失能指定I2C的軟件復(fù)位I2C_SMBusAlertConfig驅(qū)動指定I2Cx的SMBusAlert引腳電平為高或低表9-2I2C庫函數(shù)(續(xù)表)函數(shù)名稱功能I2C_TransmitPEC使能或者失能指定I2C的PEC傳輸I2C_PECPositionConfig選擇指定I2C的PEC位置I2C_CalculatePEC使能或者失能指定I2C的傳輸字PEC值計(jì)算I2C_GetPEC返回指定I2C的PEC值I2C_ARPCmd使能或者失能指定I2C的ARPI2C_StretchClockCmd使能或者失能指定I2C的時鐘延展I2C_FastModeDutyCycleConfig選擇指定I2C的快速模式占空比I2C_GetLastEvent返回最近一次I2C事件I2C_CheckEvent檢查最近一次I2C事件是否是輸入的事件I2C_GetFlagStatus檢查指定的I2C標(biāo)志位設(shè)置與否I2C_ClearFlag清除I2Cx的待處理標(biāo)志位I2C_GetITStatus檢查指定的I2C中斷發(fā)生與否I2C_ClearITPendingBit清除I2Cx的中斷待處理位1.函數(shù)I2C_DeInit函數(shù)名:I2C_DeInit函數(shù)原型:voidI2C_DeInit(I2C_TypeDef*I2Cx)功能描述:將外設(shè)I2Cx寄存器重設(shè)為缺省值輸入?yún)?shù):I2Cx:x可以是1或者2,用來選擇I2C外設(shè)輸出參數(shù):無返回值:無先決條件:無被調(diào)用函數(shù):RCC_APB1PeriphClockCmd()例如:/*DeinitializeI2C2interface*/I2C_DeInit(I2C2);2.函數(shù)I2C_Init函數(shù)名:I2C_Init函數(shù)原型:voidI2C_Init(I2C_TypeDef*I2Cx,I2C_InitTypeDef*I2C_InitStruct)功能描述:根據(jù)I2C_InitStruct中指定的參數(shù)初始化外設(shè)I2Cx寄存器輸入?yún)?shù)1:I2Cx:x可以是1或者2,用來選擇I2C外設(shè)輸入?yún)?shù)2:I2C_InitStruct:指向結(jié)構(gòu)I2C_InitTypeDef的指針,包含了外設(shè)GPIO的配置信息輸出參數(shù):無返回值:無先決條件:無被調(diào)用函數(shù):無例如:/*InitializetheI2C1accordingtotheI2C_InitStructuremembers*/I2C_InitTypeDefI2C_InitStructure;I2C_InitStructure.I2C_Mode=I2C_Mode_SMBusHost;I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1=0x03A2;I2C_InitStructure.I2C_Ack=I2I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed=200000;I2C_Init(I2C1,&I2C_InitStructure);3.函數(shù)I2C_Cmd函數(shù)名:函數(shù)I2C_Cmd函數(shù)原型:voidI2C_Cmd(I2C_TypeDef*I2Cx,F(xiàn)unctionalStateNewState)功能描述:使能或者失能I2C外設(shè)輸入?yún)?shù)1:I2Cx:x可以是1或者2,用來選擇I2C外設(shè)輸入?yún)?shù)2:NewState:外設(shè)I2Cx的新狀態(tài),可以為ENABLE或者DISABLE輸出參數(shù):無返回值:無先決條件:無被調(diào)用函數(shù):無例如:/*EnableI2C1peripheral*/I2C_Cmd(I2C1,ENABLE);4.函數(shù)I2C_GenerateSTART函數(shù)名:I2C_GenerateSTART函數(shù)原型:voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,F(xiàn)unctionalStateNewState)功能描述:產(chǎn)生I2Cx傳輸START條件輸入?yún)?shù)1:I2Cx:x可以是1或者2,用來選擇I2C外設(shè)輸入?yún)?shù)2:NewState:I2CxSTART條件的新狀態(tài),可以為ENABLE或者DISABLE輸出參數(shù):無返回值:無先決條件:無被調(diào)用函數(shù):無例如:/*GenerateaSTARTconditiononI2C1*/I2C_GenerateSTART(I2C1,ENABLE);5.函數(shù)I2C_GenerateSTOP函數(shù)名:I2C_GenerateSTOP函數(shù)原型:voidI2C_GenerateSTOP(I2C_TypeDef*I2Cx,F(xiàn)unctionalStateNewState)功能描述:產(chǎn)生I2Cx傳輸STOP條件輸入?yún)?shù)1:I2Cx:x可以是1或者2,用來選擇I2C外設(shè)輸入?yún)?shù)2:NewState:I2CxSTOP條件的新狀態(tài),可以為ENABLE或者DISABLE輸出參數(shù):無返回值:無先決條件:無被調(diào)用函數(shù):無例如:/*GenerateaSTOPconditiononI2C2*/I2C_GenerateSTOP(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度版股東借款合同爭議調(diào)解與賠償協(xié)議書
- 二零二五年度電商平臺跨境電商稅收籌劃合作協(xié)議
- 二零二五年度特色小吃店整體轉(zhuǎn)讓合同
- 2025年度航空航天維修與服務(wù)版勞動合同
- 施工組織設(shè)計(jì)對土木工程項(xiàng)目的重要性探討
- 施工日志填寫樣本施工質(zhì)量檢查與驗(yàn)收記錄
- 科技前沿電子產(chǎn)品的設(shè)計(jì)與制造新趨勢
- 營銷策略與學(xué)校品牌形象塑造探討
- 風(fēng)險(xiǎn)評估模型在小型商業(yè)企業(yè)線上貸款中的應(yīng)用
- 跨文化視角下的學(xué)生心理壓力與應(yīng)對措施
- 高考百日誓師動員大會
- 賈玲何歡《真假老師》小品臺詞
- 2024年北京東城社區(qū)工作者招聘筆試真題
- 《敏捷項(xiàng)目管理》課件
- 統(tǒng)編版(2024新版)七年級上學(xué)期道德與法治期末綜合測試卷(含答案)
- 黑龍江省哈爾濱市2024屆中考數(shù)學(xué)試卷(含答案)
- 前程無憂測評題庫及答案
- 高三日語一輪復(fù)習(xí)助詞「と」的用法課件
- 物業(yè)管理服務(wù)房屋及公用設(shè)施維修養(yǎng)護(hù)方案
- 醫(yī)療器械法規(guī)培訓(xùn)
- 無子女離婚協(xié)議書范文百度網(wǎng)盤
評論
0/150
提交評論