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

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

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

STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA

GReq_mcu168 ? 來源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-02-12 13:22 ? 次閱讀

直接存儲(chǔ)器訪問(Direct Memory Access),簡稱DMA。DMA是CPU一個(gè)用于數(shù)據(jù)從一個(gè)地址空間到另一地址空間“搬運(yùn)”(拷貝)的組件,數(shù)據(jù)拷貝過程不需CPU干預(yù),數(shù)據(jù)拷貝結(jié)束則通知CPU處理。因此,大量數(shù)據(jù)拷貝時(shí),使用DMA可以釋放CPU資源,相關(guān)文章推薦:詳解STM32中的DMA原理。

在STM32控制器中,芯片采用Cortex-M3架構(gòu),總線結(jié)構(gòu)有了很大的優(yōu)化,DMA占用另外的總線,并不會(huì)與CPU的系統(tǒng)總線發(fā)生沖突。也就是說,DMA的使用不會(huì)影響CPU的運(yùn)行速度。

STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA

DMA數(shù)據(jù)拷貝過程,典型的有:

內(nèi)存—>內(nèi)存,內(nèi)存間拷貝

外設(shè)—>內(nèi)存,如uart、spi、i2c等總線接收數(shù)據(jù)過程

內(nèi)存—>外設(shè),如uart、spi、i2c等總線發(fā)送數(shù)據(jù)過程

串口有必要使用DMA嗎

串口(UART)是一種低速的串行異步通信,適用于低速通信場景,通常使用的波特率小于或等于115200bps。PC與STM32單片機(jī)通信實(shí)例推薦:按下按鍵,通過串口發(fā)送數(shù)據(jù)實(shí)例。

對于小于或者等于115200bps波特率的,而且數(shù)據(jù)量不大的通信場景,一般沒必要使用DMA,或者說使用DMA并未能充分發(fā)揮出DMA的作用。

對于數(shù)量大,或者波特率提高時(shí),必須使用DMA以釋放CPU資源,因?yàn)楦卟ㄌ芈士赡軒鞢PU資源過度浪費(fèi)的問題。

舉個(gè)例子

對于發(fā)送,使用循環(huán)發(fā)送,可能阻塞線程,需要消耗大量CPU資源“搬運(yùn)”數(shù)據(jù),浪費(fèi)CPU。對于發(fā)送,使用中斷發(fā)送,不會(huì)阻塞線程,但需浪費(fèi)大量中斷資源,CPU頻繁響應(yīng)中斷。以115200bps波特率,1s大約傳輸11520字節(jié),大約69us需響應(yīng)一次中斷,如波特率再提高,將消耗更多CPU資源。

對于接收,如仍采用傳統(tǒng)的中斷模式接收,同樣會(huì)因?yàn)轭l繁中斷導(dǎo)致消耗大量CPU資源。

因此,在高波特率傳輸場景下,串口非常有必要使用DMA。

原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?

文章出處:【微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

審核編輯:湯梓紅

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

    關(guān)注

    456

    文章

    51121

    瀏覽量

    426072
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16434

    瀏覽量

    178977
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10921

    瀏覽量

    356993

原文標(biāo)題:STM32串口收發(fā)數(shù)據(jù)為什么要使用DMA?

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    LS10串口數(shù)據(jù)庫模塊外擴(kuò)SD卡功能

    LS10串口數(shù)據(jù)庫模塊外擴(kuò)SD卡功能
    的頭像 發(fā)表于 11-23 09:42 ?242次閱讀
    LS10<b class='flag-5'>串口</b><b class='flag-5'>數(shù)據(jù)</b>庫模塊外擴(kuò)SD卡功能

    快速實(shí)現(xiàn)C2000串口程序升級

    電子發(fā)燒友網(wǎng)站提供《快速實(shí)現(xiàn)C2000串口程序升級.pdf》資料免費(fèi)下載
    發(fā)表于 08-29 10:50 ?1次下載
    快速實(shí)現(xiàn)C2000<b class='flag-5'>串口</b>程序升級

    使用stm32f205和esp32之間進(jìn)行串口通訊時(shí)遇到的疑問求解

    時(shí)間,接收超時(shí)時(shí)間設(shè)置為50ms,測量最小50ms,最大到了96ms。 stm32f205串口: 使用dma進(jìn)行收據(jù)收發(fā),可以保證通訊速度,50ms
    發(fā)表于 06-19 07:53

    用esp32的串口Stm32F407串口通訊,通過TJA轉(zhuǎn)CAN,結(jié)果esp32串口讀到的一直是自己發(fā)的數(shù)據(jù),為什么?

    我用esp32的串口Stm32F407串口通訊,通過TJA轉(zhuǎn)CAN。結(jié)果esp32串口讀到的一直是自己發(fā)的數(shù)據(jù),各位大神給我看看哪里有問題
    發(fā)表于 06-19 07:00

    485串口可以用can協(xié)議嗎

    一、引言 隨著工業(yè)自動(dòng)化和智能控制技術(shù)的發(fā)展,通信協(xié)議在設(shè)備間數(shù)據(jù)傳輸和控制中扮演著越來越重要的角色。485串口和CAN協(xié)議是兩種常見的通信協(xié)議,它們在不同的應(yīng)用場景中發(fā)揮著重要作用。本文將對這兩種
    的頭像 發(fā)表于 06-16 09:21 ?1393次閱讀

    ESP32C3串口可以使用DMA收發(fā)嗎?

    ESP32C3串口可以使用DMA收發(fā)嗎,如果可以,有沒有相關(guān)的使用例程
    發(fā)表于 06-11 07:08

    STM32串口DMA通訊接收不到數(shù)據(jù)的原因?

    //STM32串口DMA通訊接收不到數(shù)據(jù) //請各位大神幫忙看看,下面的DMA配置問題出在哪里 //程序編寫思路是:用
    發(fā)表于 05-09 06:40

    stm32 adc1和串口2同時(shí)使用DMA出錯(cuò)的原因?

    stm32f103r8t6adc1使用dma方式采集數(shù)據(jù)串口2使用dma方式收發(fā)
    發(fā)表于 04-22 08:08

    STM32F103串口DMA+IDLE收發(fā),速率過快會(huì)造成overrun數(shù)據(jù)溢出怎么解決?

    +IDLE, 收發(fā)都通過DMA,DMA每次接收最大數(shù)是64,進(jìn)入IDLE中斷后,從串口緩沖拷貝數(shù)據(jù)。在27字節(jié)
    發(fā)表于 04-18 06:26

    stm32F429串口采用DMA方式發(fā)送,數(shù)據(jù)流使能失敗的原因?

    最近項(xiàng)目要使用F429的DMA進(jìn)行串口發(fā)送數(shù)據(jù),燒錄之后程序無法正常運(yùn)行,仿真發(fā)現(xiàn)在執(zhí)行完DMA_Cmd(
    發(fā)表于 04-17 07:05

    STM32G071串口1無法使用DMA收發(fā)是為什么?

    首先說一下過程,之前在F1,F0上使用DMA串口發(fā)送和接收數(shù)據(jù),開啟空閑中斷接收不定長數(shù)據(jù),都沒有任何問題。后來用上了G030,使用串口1做
    發(fā)表于 04-01 07:46

    STM32G491使用串口DMA收發(fā)數(shù)據(jù),一直進(jìn)中斷卡死其他任務(wù)是為什么?

    STM32G491使用串口DMA收發(fā)數(shù)據(jù),一直進(jìn)中斷卡死其他任務(wù),具體原因是出現(xiàn)在哪里?
    發(fā)表于 03-18 07:49

    stm32f407zet6串口dma會(huì)和sdio的dma發(fā)生干擾嗎?

    stm32f407zet6 串口dma會(huì)和sdio的dma發(fā)生干擾嗎
    發(fā)表于 03-11 07:25

    STM32F407串口DMA發(fā)送卡死在HAL_DMA_GetState怎么解決?

    使用五路串口DMA收發(fā)數(shù)據(jù),但是在發(fā)送的時(shí)候,到了while(HAL_DMA_GetState( hdma_usart3_tx) != HA
    發(fā)表于 03-06 08:29

    ZDP1440串口屏應(yīng)用開發(fā)如何使用虛擬串口調(diào)試

    ZDP1440串口屏應(yīng)用開發(fā)如何使用虛擬串口調(diào)試呢?本文將詳細(xì)方法分享給大家。
    的頭像 發(fā)表于 01-25 11:32 ?1749次閱讀
    ZDP1440<b class='flag-5'>串口</b>屏應(yīng)用開發(fā)如何使用虛擬<b class='flag-5'>串口</b>調(diào)試