国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STM32 CubeMX】串口編程DMA

這篇具有很好參考價值的文章主要介紹了【STM32 CubeMX】串口編程DMA。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

在嵌入式系統(tǒng)中,串口通信是一項至關(guān)重要的功能,它允許單片機與外部設(shè)備進行數(shù)據(jù)交換,如傳感器、顯示器或其他設(shè)備。然而,在高速數(shù)據(jù)傳輸?shù)膱鼍跋?,傳統(tǒng)的串口通信方式可能會使CPU過于繁忙,從而影響系統(tǒng)的性能。為了解決這一問題,STM32系列微控制器提供了DMA(直接內(nèi)存訪問)技術(shù),可以在不占用CPU資源的情況下實現(xiàn)高速的數(shù)據(jù)傳輸。本文將介紹如何利用STM32 CubeMX配置串口通信并使用DMA進行數(shù)據(jù)傳輸。


一、DMA方式

1.1 DMA是什么

想象一下你在單片機中需要把一堆數(shù)據(jù)從一個地方搬到另一個地方,比如從內(nèi)存搬到外設(shè)(比如串口或者存儲器)。傳統(tǒng)的方式是由CPU來親自操持每一個數(shù)據(jù)的傳輸,就像你親自搬運每一件家具一樣。

而DMA就像是單片機中的一支專業(yè)的搬家隊伍。你可以告訴這支隊伍從哪里搬到哪里,然后它們就可以自動完成這個任務,而不需要CPU一直牽頭指揮。這樣,CPU就可以專注于處理其他的事務,而不用為每個數(shù)據(jù)傳輸都忙碌起來。

所以,單片機中的DMA就是一種讓數(shù)據(jù)在不需要CPU持續(xù)參與的情況下,在內(nèi)存和外設(shè)之間自動傳輸?shù)募夹g(shù),使得單片機能更高效地完成一些數(shù)據(jù)搬運的任務。簡而言之,就是讓單片機變得更聰明、更省力。

比如下面這個圖,如果我們使用普通的發(fā)送RAM里面的buf,那么cpu就要一位一位的取buf,放到串口發(fā)送寄存器中,那么就非常耗費時間,那么這時DMA就出現(xiàn)了,他可以直接讓cpu把RAM里面的buf放到DMA,然后DMA自動把buf放到發(fā)送寄存器里,放到寄存器這個過程cpu是不參與的
【STM32 CubeMX】串口編程DMA,從0帶你學會如何像人類一樣寫STM32程序,stm32,嵌入式硬件,單片機,c語言,mcu,51單片機
他不僅可以發(fā)送,還可以把接收的寄存器放到DMA中,然后放到RAM中

1.2 CubeMX配置DMA

【STM32 CubeMX】串口編程DMA,從0帶你學會如何像人類一樣寫STM32程序,stm32,嵌入式硬件,單片機,c語言,mcu,51單片機
打開我們的串口,選擇DMA設(shè)置,然后添加一個DMA,其中的DMA Request就是你為了什么而使用DMA,比如為了發(fā)送,為了接收都可以設(shè)置。

模式的設(shè)置:
【STM32 CubeMX】串口編程DMA,從0帶你學會如何像人類一樣寫STM32程序,stm32,嵌入式硬件,單片機,c語言,mcu,51單片機
模式有兩種,一種是Normal,一種是circular
Normal:比如要傳輸1000字節(jié),傳輸完了就ok了,不傳輸了
circular:比如要傳輸1000字節(jié),傳輸完了,他會從開頭,再傳輸一次

注意:這里不能打勾【STM32 CubeMX】串口編程DMA,從0帶你學會如何像人類一樣寫STM32程序,stm32,嵌入式硬件,單片機,c語言,mcu,51單片機
Memory需要打勾

1.3 DMA方式函數(shù)使用

DMA的發(fā)送

我們可以使用下面這個函數(shù)進行發(fā)送:

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);

他的參數(shù)為串口對象,要發(fā)送的data,要發(fā)送的大小。
比如說,我們可以這樣:

HAL_UART_Transmit_DMA(&huart1,(uint8_t *)"Hello DMA",sizeof("Hello DMA"));

那么我們可以在串口里看到打印的數(shù)據(jù):
【STM32 CubeMX】串口編程DMA,從0帶你學會如何像人類一樣寫STM32程序,stm32,嵌入式硬件,單片機,c語言,mcu,51單片機
上面這個函數(shù)的中斷如下:

__weak void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart)
__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)

當DMA發(fā)送完一半時,調(diào)用第一個回調(diào)函數(shù)
當DMA發(fā)送完時,調(diào)用第二個回調(diào)函數(shù)

接收函數(shù)

我們可以使用下面這個函數(shù)進行接收:

HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

他的參數(shù)為串口對象,要接收的buf,要接收的大小。

上面這個函數(shù)的中斷如下:

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
__weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);

對于純DMA接收是沒有意義的,比如你和外設(shè)通信,你調(diào)用DMA的接收,你還要去指定你要接收多少字節(jié),可是,每次接收的都是不一樣的啊,大小根本指定不了,所以DMA接收要和下節(jié)課的IDLE中斷一起才有意義


總結(jié)

通過本文的介紹,我們學習了如何在STM32 CubeMX中配置串口通信并使用DMA進行數(shù)據(jù)傳輸。首先,我們利用CubeMX配置了串口通信的基本參數(shù),包括波特率、數(shù)據(jù)位數(shù)和停止位數(shù)等。然后,我們配置了DMA通道,將串口接收和發(fā)送的數(shù)據(jù)直接傳輸?shù)絻?nèi)存,而不需要CPU的干預。這樣一來,系統(tǒng)的CPU資源就可以得到釋放,提高了系統(tǒng)的性能和效率。最后,我們可以根據(jù)具體的應用場景,編寫相應的串口通信代碼,實現(xiàn)數(shù)據(jù)的接收和發(fā)送功能。通過合理地利用DMA技術(shù),我們可以在嵌入式系統(tǒng)中實現(xiàn)高效可靠的串口通信功能,為各種應用場景提供了更好的支持。文章來源地址http://www.zghlxwxcb.cn/news/detail-830743.html

到了這里,關(guān)于【STM32 CubeMX】串口編程DMA的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • Note10:基于STM32H7+HAL+CubeMX+DMA+SPI+串口中斷+定時器+RTC的多傳感器數(shù)據(jù)采集系統(tǒng)(2*ADXL355和ADXL375通過Sync時序同步)

    Note10:基于STM32H7+HAL+CubeMX+DMA+SPI+串口中斷+定時器+RTC的多傳感器數(shù)據(jù)采集系統(tǒng)(2*ADXL355和ADXL375通過Sync時序同步)

    本文的初衷一方面是將我的一些關(guān)于STM32開發(fā)方面淺顯的個人經(jīng)驗分享給初學者、并期望得到大佬的批評指正,另一方面是記錄自己的實驗過程便于回顧。 我預感應該要寫很多,不過鑒于之前的數(shù)篇筆跡中,對于SPI/DMA/ADXL3XX系列加表的使用已經(jīng)詳細描述過了,所以這篇博客只

    2024年02月10日
    瀏覽(24)
  • STM32開發(fā)(16)----CubeMX配置DMA

    STM32開發(fā)(16)----CubeMX配置DMA

    本章介紹使用STM32CubeMX對DMA進行配置的方法,DMA的原理、概念和特點,配置各個步驟的功能,并通過串口DMA傳輸實驗方式驗證。 DMA(Direct Memory Access),即直接存儲器訪問。 DMA 傳輸方式無需 CPU 直接控制傳輸,也沒有中斷處理方式那樣保留現(xiàn)場和恢復現(xiàn)場的過程,通過硬件為

    2024年02月15日
    瀏覽(24)
  • STM32 cubemx配置USART DMA傳輸

    STM32 cubemx配置USART DMA傳輸

    本篇文章來講解DMA的概念,并使用DMA來進行串口的數(shù)據(jù)收發(fā)。 DMA(Direct Memory Access,直接內(nèi)存訪問)是一種計算機系統(tǒng)的技術(shù),允許外部設(shè)備(如硬盤驅(qū)動器、網(wǎng)絡(luò)適配器或圖形卡)直接與計算機內(nèi)存進行數(shù)據(jù)傳輸,而不需要CPU的直接參與。這種直接的內(nèi)存訪問可以提高數(shù)據(jù)

    2024年02月11日
    瀏覽(16)
  • STM32Cubemx——ADC采集+DMA傳輸

    STM32Cubemx——ADC采集+DMA傳輸

    STM32F407VE核心板 STM32Cubemx 版本 6.0.1 Keil 版本 5.31 杜邦線 ST-Link 12 位 ADC 是逐次趨近型模數(shù)轉(zhuǎn)換器。它具有多達 19 個復用通道,可測量來自 16 個外部源、兩個內(nèi)部源和 VBAT 通道的信號。這些通道的 A/D 轉(zhuǎn)換可在單次、連續(xù)、掃描或不連續(xù)采樣模式下進行。ADC 的結(jié)果存儲在一個左

    2023年04月24日
    瀏覽(18)
  • STM32CubeMX教程12 DMA 直接內(nèi)存讀取

    開發(fā)板(正點原子stm32f407探索者開發(fā)板V2.4) STM32CubeMX軟件(Version 6.10.0) keil μVision5 IDE(MDK-Arm) ST-LINK/V2驅(qū)動 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX軟件配置STM32F407開發(fā)板上 串口USART1以DMA方式傳輸數(shù)據(jù) ,然后實現(xiàn)與實驗“STM32CubeMX教程9 USART/UART 異步通信”相同的目標

    2024年02月03日
    瀏覽(23)
  • STM32CubeMX系列05——ADC(輪詢、中斷、DMA)

    STM32CubeMX系列05——ADC(輪詢、中斷、DMA)

    ==== 文章匯總(有代碼匯總) ==== 正點原子Mini板,主控 STM32F103RCT6. 用到的外設(shè): 串口1(PA9、PA10) 任意幾個GPIO口(這里用PA1、PA2、PA3,對應ADC通道1、2、3)。 配置時鐘源 配置debug模式(如果需要ST-Link下載及調(diào)試可以勾選) 配置時鐘樹(可以直接在HCLK那里輸入72,然后敲回

    2024年02月10日
    瀏覽(24)
  • STM32CubeMX配置ADC采樣(輪詢、中斷、DMA)

    STM32CubeMX配置ADC采樣(輪詢、中斷、DMA)

    STM32CubeMX能夠極大減小STM32外設(shè)配置的工作量,因此作者也借助空閑時間對STM32CubeMX相關(guān)配置進行了學習,本文介紹如何利用STM32CubeMX配置ADC采樣,記錄了作者學習過程中遇到的問題及解決辦法,使大家少走彎路,并方便以后復習 先選擇所使用的MCU,這里我使用的是STM32F407ZGT系

    2024年02月03日
    瀏覽(29)
  • STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

    STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

    一、寫在前面 ????????ADC通道采集數(shù)據(jù)的兩種方式: ? ? ? ? 1)ADC輪詢采集數(shù)據(jù)直接放到數(shù)組中; ? ? ? ? 2)采用中斷方式,ADC采集完成進入中斷,中斷關(guān)閉ADC采集,取數(shù)據(jù)之后再打開ADC采集。 以下按第一種方式實現(xiàn): 二、ADC多通道配置 1)配置通道及參數(shù) ? ? 如果要控

    2024年02月05日
    瀏覽(24)
  • STM32 cubemx配置DMA+空閑中斷接收不定長數(shù)據(jù)

    STM32 cubemx配置DMA+空閑中斷接收不定長數(shù)據(jù)

    本篇文章給大家講解一下DMA+串口空閑中斷接收串口不定長數(shù)據(jù),之前我們也是講解過串口接收不定長數(shù)據(jù)的,那么本篇文章的話將使用DMA來接收不定長數(shù)據(jù)。 串口空閑中斷是指在串口接收到數(shù)據(jù)后,在數(shù)據(jù)的傳輸結(jié)束之后,在一段連續(xù)的空閑時間內(nèi)沒有接收到新數(shù)據(jù)時觸發(fā)

    2024年02月19日
    瀏覽(27)
  • STM32CubeMX教程18 DAC - DMA輸出自定義波形

    開發(fā)板(正點原子stm32f407探索者開發(fā)板V2.4) STM32CubeMX軟件(Version 6.10.0) 野火DAP仿真器 keil μVision5 IDE(MDK-Arm) ST-LINK/V2驅(qū)動 一臺示波器 邏輯分析儀nanoDLA 使用STM32CubeMX軟件配置STM32F407開發(fā)板的 DAC OUT1實現(xiàn)輸出0-3.3V 周期為12.8ms的正弦波形 由于STM32F407的兩個DAC輸出通道只能自動

    2024年01月19日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包