在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            STM32-DMA學(xué)習(xí)筆記

            作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
            DMA,全稱(chēng)為:Direct Memory Access,即直接存儲(chǔ)器訪問(wèn)。DMA傳輸方式無(wú)需CPU 直接控制傳輸,也沒(méi)有中斷處理方式那樣保留現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的過(guò)程,通過(guò)硬件為RAM 與I/O設(shè)備開(kāi)辟一條直接傳送數(shù)據(jù)的通路,能使CPU 的效率大為提高。
            STM32中 DMA1有7個(gè)通道,DMA2有5個(gè)通道(DMA2 僅存在大容量產(chǎn)品中)。DMA掛載的時(shí)鐘為AHB總線,其時(shí)鐘為72Mhz,所以可以實(shí)現(xiàn)高速數(shù)據(jù)搬運(yùn)。
            STM32F103RBT6 只有1 個(gè)DMA控制器,DMA1 ,下面我們就針對(duì)DMA1 進(jìn)行介紹。
            從外設(shè)(TIMx、ADC、SPIx 、I2Cx 和USARTx )產(chǎn)生的DMA請(qǐng)求,通過(guò)邏輯或輸入到DMA控制器,這就意味著同時(shí)只能有一個(gè)請(qǐng)求有效。外設(shè)的DMA請(qǐng)求,可以通過(guò)設(shè)置相應(yīng)的外設(shè)寄存器中的控制位,被獨(dú)立地開(kāi)啟或關(guān)閉。
            DMA1各通道一覽:
            這里我們要使用的是串口 1 的 DMA 傳送,也就是要用到通道 4。
            DMA1通道4的配置方法如下:
            dma.c主要代碼:
            [cpp]view plaincopy
            1. u16DMA1_MEM_LEN;//保存DMA每次數(shù)據(jù)傳送的長(zhǎng)度
            2. //DMA1的各通道配置
            3. //這里的傳輸形式是固定的,這點(diǎn)要根據(jù)不同的情況來(lái)修改
            4. //從存儲(chǔ)器->外設(shè)模式/8位數(shù)據(jù)寬度/存儲(chǔ)器增量模式
            5. //DMA_CHx:DMA通道CHx
            6. //cpar:外設(shè)地址
            7. //cmar:存儲(chǔ)器地址
            8. //cndtr:數(shù)據(jù)傳輸量
            9. voidMYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar,u16cndtr)
            10. {
            11. RCC->AHBENR|=1<<0;//開(kāi)啟DMA1時(shí)鐘
            12. delay_ms(1);//等待DMA時(shí)鐘穩(wěn)定
            13. DMA_CHx->CPAR=cpar;//DMA1外設(shè)地址
            14. DMA_CHx->CMAR=(u32)cmar;//DMA1,存儲(chǔ)器地址
            15. DMA1_MEM_LEN=cndtr;//保存DMA傳輸數(shù)據(jù)量
            16. DMA_CHx->CNDTR=cndtr;//DMA1,傳輸數(shù)據(jù)量
            17. DMA_CHx->CCR=0X00000000;//復(fù)位
            18. DMA_CHx->CCR|=1<<4;//從存儲(chǔ)器讀
            19. DMA_CHx->CCR|=0<<5;//普通模式
            20. DMA_CHx->CCR|=0<<6;//外設(shè)地址非增量模式
            21. DMA_CHx->CCR|=1<<7;//存儲(chǔ)器增量模式
            22. DMA_CHx->CCR|=0<<8;//外設(shè)數(shù)據(jù)寬度為8位
            23. DMA_CHx->CCR|=0<<10;//存儲(chǔ)器數(shù)據(jù)寬度8位
            24. DMA_CHx->CCR|=1<<12;//中等優(yōu)先級(jí)
            25. DMA_CHx->CCR|=0<<14;//非存儲(chǔ)器到存儲(chǔ)器模式
            26. }
            27. //開(kāi)啟一次DMA傳輸
            28. voidMYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
            29. {
            30. DMA_CHx->CCR&=~(1<<0);//關(guān)閉DMA傳輸
            31. DMA_CHx->CNDTR=DMA1_MEM_LEN;//DMA1,傳輸數(shù)據(jù)量
            32. DMA_CHx->CCR|=1<<0;//開(kāi)啟DMA傳輸
            33. }
            }
            在主函數(shù)里主要有這幾個(gè)語(yǔ)句完成DMA傳輸:
            1.首先配置DMA1通道4相關(guān)參數(shù)
            MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,5200);//DMA1通道4,外設(shè)為串口1,存儲(chǔ)器為SendBuff,長(zhǎng)度5200.
            2.然后將待發(fā)送內(nèi)容裝入存儲(chǔ)器
            SendBuff[i]=TEXT_TO_SEND[t];
            3.然后開(kāi)啟一次DMA傳輸
            MYDMA_Enable(DMA1_Channel4);//開(kāi)始一次DMA傳輸!
            4.監(jiān)控傳送進(jìn)度。
            pro=DMA1_Channel4->CNDTR;//得到當(dāng)前還剩余多少個(gè)數(shù)據(jù)


            關(guān)鍵詞: STM32DMA學(xué)習(xí)筆

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉