STM32單片機(jī)串口DMA解析_第1頁
STM32單片機(jī)串口DMA解析_第2頁
STM32單片機(jī)串口DMA解析_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

STM32單片機(jī)串口DMA解析討論三個(gè)問題:1、什么叫串口DMA請求;2、串口簡要復(fù)習(xí);3、串口DMA發(fā)送流程。1、什么叫串口DMA請求(戰(zhàn)艦STM32開發(fā)板)說這個(gè)問題之前先簡單回顧DMA的基本特性。先導(dǎo)出原子哥的PPT內(nèi)容:DMA全稱DirectMemoryAccess,即直接存儲(chǔ)器訪問。DMA傳輸將數(shù)據(jù)從一個(gè)地址空間復(fù)制到另一個(gè)地址空間。當(dāng)CPU初始化這個(gè)傳輸動(dòng)作,傳輸動(dòng)作本身是由DMA控制器來實(shí)現(xiàn)和完成的。STM32有兩個(gè)DMA控制器(DMA2只存在于大容量產(chǎn)品中),DMA1有7個(gè)通道,DMA2有5個(gè)通道,每個(gè)通道專門用來管理來自于一個(gè)或者多個(gè)外設(shè)對存儲(chǔ)器的訪問請求。還有一個(gè)仲裁器來協(xié)調(diào)各個(gè)DMA請求的優(yōu)先權(quán)。作用:為CPU減負(fù)!下面上圖DMA各通道從外設(shè)(TIMx、ADCx、SPIx、I2Cx、和USARTx)產(chǎn)生的DMA請求,通過邏輯或輸入到DMA控制器,這就意味著同時(shí)只能有一個(gè)請求有效(在同一時(shí)間,就只能使用其中的一個(gè),其他通道也類似)。外設(shè)的DMA請求,可以通過設(shè)置相應(yīng)的外設(shè)寄存器中的控制位,被獨(dú)立的開啟或關(guān)閉??吹竭@里串口DMA請求的定義就出來了:先舉個(gè)例子:譬如我想用串口發(fā)送數(shù)據(jù)到PC機(jī),一般做法是CPU通過APB1/APB2總線往串口寫數(shù)據(jù),然后串口發(fā)送;或者是CPU通過總線從串口?。ㄗx)數(shù)據(jù);如果此時(shí)CPU處理的任務(wù)非常多,這就會(huì)耗費(fèi)CPU的處理時(shí)間。而我們?nèi)绻肈MA來傳送數(shù)據(jù)那就很快了,DMA會(huì)通過自己的特定通道將數(shù)據(jù)從一個(gè)地址空間復(fù)制到另一個(gè)地址空間,而且不需要CPU的干預(yù)。所以串口DMA請求的定義是:串口要發(fā)送/接收數(shù)據(jù)會(huì)請求DMA來完成數(shù)據(jù)的寫和讀。(注意這句話只針對本文!)2、串口簡要復(fù)習(xí)(庫函數(shù))這里簡要復(fù)習(xí)一下戰(zhàn)艦STM32串口的知識(shí)點(diǎn)。舉個(gè)例子:我想用PC機(jī)往STM32串口發(fā)送個(gè)數(shù)據(jù),然后STM32接收到后將數(shù)據(jù)原樣返回給PC機(jī)(顯示在串口調(diào)試助手中)。思路:首先我們會(huì)在串口初始化函數(shù)中配置串口接收中斷,當(dāng)你PC機(jī)往串口發(fā)送數(shù)據(jù)時(shí),串口會(huì)產(chǎn)生接收中斷;并在中斷服務(wù)函數(shù)中,判斷接沒接收完,如果接收完畢就會(huì)把接收狀態(tài)寄存器的接收完成標(biāo)志位置1。到這兒是接收中斷的作用。。然后在主函數(shù)中,我們不斷檢測接收狀態(tài)寄存器的接收完成標(biāo)志,看接沒接收完。如果接收完了,就通過for循環(huán)將接收到的數(shù)據(jù),全部發(fā)給串口的USART_DR寄存器(當(dāng)向該寄存器寫數(shù)據(jù)時(shí),串口就會(huì)自動(dòng)發(fā)送)。于是我們通過PC機(jī)發(fā)給串口的數(shù)據(jù)就會(huì)被STM32通過串口發(fā)回來了,顯示在串口調(diào)試助手中。3、串口DMA發(fā)送流程(庫函數(shù))戰(zhàn)艦實(shí)驗(yàn):通過按鍵KEY0來控制DMA發(fā)送,每按一次KEY0,DMA就傳送一次數(shù)據(jù)到USART1,然后在TFTLCD模塊上顯示進(jìn)度信息。這個(gè)現(xiàn)在理解就不難了吧。從主函數(shù)入手,首先我們在STM32的SRAM中開辟一段5200(這個(gè)數(shù)字越大DMA傳輸越慢,反之越快)字節(jié)的空間SendBuff[],作為我們的存儲(chǔ)器(內(nèi)存),存儲(chǔ)要往外設(shè)(USART1)發(fā)送的數(shù)據(jù)。然后我們在SendBuff[]中寫滿TEXT_TO_SEND[]里的內(nèi)容。這里戰(zhàn)艦往SendBuff[]里寫的算法非常巧妙,應(yīng)該學(xué)習(xí);現(xiàn)在SendBuff[]中已經(jīng)存滿了要發(fā)送給串口的數(shù)據(jù)。這時(shí)我們還要檢測KEY0有沒有按下,如果按下了,就通過兩個(gè)函數(shù):1、使能串口發(fā)送(在STM32庫函數(shù)stm32f10x_usart.c中,配置USART_CR3中的DMA使能位DMAT);2、使能DMA1通道4,啟動(dòng)傳輸(在dam.c中,最后也是調(diào)用了stm32f10x_dma.c中的DMA_Cmd();函數(shù)來使能通道)。加上之前(本文沒有)對DMA參數(shù)的初始化(初始化存儲(chǔ)器和外設(shè)基地址等),就可以啟動(dòng)一次傳輸了。傳輸時(shí)間問題:傳輸時(shí)間跟波特率密切相關(guān)。比如波特率是9600,意思就是每秒鐘發(fā)送或接受的速率為9600bit/s,8bit=1Byte(字節(jié)),故當(dāng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論