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

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

這篇具有很好參考價(jià)值的文章主要介紹了STM32開(kāi)發(fā)(16)----CubeMX配置DMA。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


前言

本章介紹使用STM32CubeMX對(duì)DMA進(jìn)行配置的方法,DMA的原理、概念和特點(diǎn),配置各個(gè)步驟的功能,并通過(guò)串口DMA傳輸實(shí)驗(yàn)方式驗(yàn)證。

一、什么是DMA?

DMA(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 的效率大為提高。

STM32F103 內(nèi)部有 2 個(gè) DMA 控制器(DMA2 僅存大容量產(chǎn)品中), DMA1 有 7 個(gè)通道。DMA2 有 5 個(gè)通道。每個(gè)通道專門用來(lái)管理來(lái)自于一個(gè)或多個(gè)外設(shè)對(duì)存儲(chǔ)器訪問(wèn)的請(qǐng)求。還有一個(gè)仲裁器來(lái)協(xié)調(diào)各個(gè) DMA 請(qǐng)求的優(yōu)先權(quán)。

DMA框架圖如下:
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
① DMA 請(qǐng)求:外設(shè)想要通過(guò) DMA 來(lái)傳輸數(shù)據(jù),必須先給 DMA 控制器發(fā)送 DMA 請(qǐng)求, DMA 收到請(qǐng)求信號(hào)之后,控制器會(huì)給外設(shè)一個(gè)應(yīng)答信號(hào),當(dāng)外設(shè)應(yīng)答后且 DMA 控制器收到應(yīng)答信號(hào)之后,就會(huì)啟動(dòng) DMA 的傳輸,直到傳輸完畢。這里可以看到SPI,TIM,UASRT,I2C,ADC等外設(shè)都可以使用DMA。

下面是F103各個(gè)外設(shè)和總線對(duì)應(yīng)的DMA通道:
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
② 通道:DMA 具有 12 個(gè)獨(dú)立可編程的通道,其中 DMA1 有 7 個(gè)通道, DMA2 有 5 個(gè)通道,每個(gè)通道對(duì)應(yīng)不同的外設(shè)的 DMA 請(qǐng)求。雖然每個(gè)通道可以接收多個(gè)外設(shè)的請(qǐng)求,但是同一時(shí)間只能接收一個(gè),不能同時(shí)接收多個(gè)。

③ 仲裁器:當(dāng)發(fā)生多個(gè) DMA 通道請(qǐng)求時(shí),就意味著有先后響應(yīng)處理的順序問(wèn)題,這個(gè)就由仲裁器管理誰(shuí)優(yōu)先執(zhí)行。

二、實(shí)驗(yàn)過(guò)程

這里以串口的DMA傳輸為例,配置過(guò)程如下

1.CubeMX配置

選擇芯片stm32f103c6t6,新建工程

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

設(shè)置時(shí)鐘源,最小系統(tǒng)外部晶振8Mhz,作為外部高速HSE時(shí)鐘源。由于沒(méi)有外接外部低速晶振,這里低速時(shí)鐘源選擇旁路時(shí)鐘源。

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

配置時(shí)鐘樹(shù),這里使用官方推薦的配置

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
USART1的參數(shù)配置如下,波特率115200,傳輸數(shù)據(jù)長(zhǎng)度為8 Bit,奇偶檢驗(yàn)無(wú),停止位1.其他參數(shù)默認(rèn)
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

使能USART1中斷,串口使用DMA方式必須開(kāi)啟中斷,否則程序發(fā)送一次數(shù)據(jù)后,不能判斷DMA傳輸是否完成,串口會(huì)一直處于busy狀態(tài)。
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
DMA參數(shù)配置,發(fā)送選擇 DMA1 Stream 4通道,方向從存儲(chǔ)器到外設(shè),優(yōu)先級(jí)為低。接收選擇 DMA1 Stream 5通道,方向從外設(shè)到存儲(chǔ)器。mode設(shè)置可以選擇Normal表單次傳輸,傳輸一次后終止傳輸,Circular表示循環(huán)傳輸,傳輸完成后又重新開(kāi)始繼續(xù)傳輸,不斷循環(huán)永不停止。此處選擇單次傳輸,Mode為Normal。Data Width:串口數(shù)據(jù)發(fā)送寄存器只能存儲(chǔ)8bit,每次發(fā)送一個(gè)字節(jié),所以數(shù)據(jù)長(zhǎng)度選擇Byte。
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件
Code Generator中設(shè)置只拷貝使用到的庫(kù),分離.c和.h文件
cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

設(shè)置好項(xiàng)目名稱和路徑,點(diǎn)擊GENERATE CODE即可,生成后使用keil5 IDE打開(kāi)。

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件

2.代碼實(shí)現(xiàn)

在usart.c文件后面添加如下代碼,代碼中添加了#ifdef宏定義進(jìn)行條件編譯,如果使用GUNC編譯,則PUTCHAR_PROTOTYPE 定義為int __io_putchar(int ch)函數(shù),否則定義為int fputc(int ch, FILE *f)函數(shù)。

/* USER CODE BEGIN 0 */
#include "stdio.h"
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}
/* USER CODE END 0 */

main函數(shù)如下,每秒串口打印一次:

/* USER CODE BEGIN 0 */
uint8_t aTxMessage[] = "\r\n****DMA Serial  communication***\r\n";
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
		HAL_UART_Transmit_DMA(&huart1, (uint8_t *)aTxMessage, sizeof(aTxMessage));

    	HAL_Delay(1000);

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

3.實(shí)驗(yàn)結(jié)果

cube配置串口dma,stm32基礎(chǔ)教程,stm32,單片機(jī),嵌入式硬件


總結(jié)

DMA的原理和特性很重要,在很多實(shí)際開(kāi)發(fā)中都有應(yīng)用,如大數(shù)據(jù)量的傳輸,高速率的數(shù)據(jù)交換等。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-614899.html

到了這里,關(guān)于STM32開(kāi)發(fā)(16)----CubeMX配置DMA的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā))

    STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā))

    ?時(shí)鐘配置HSI主頻配置64M ?勾選打開(kāi)8個(gè)通道的ADC ?使能連續(xù)轉(zhuǎn)換模式 ?添加DMA ?DMA模式選擇循環(huán)模式 ?使能DMA連續(xù)請(qǐng)求 采樣時(shí)間配置160.5 轉(zhuǎn)換次數(shù)為8 ?配置好8次轉(zhuǎn)換的順序 ?配置好串口,選擇異步模式 配置好需要的開(kāi)發(fā)環(huán)境并獲取代碼 ?修改main.c 串口重定向 ?串口重定向

    2024年02月08日
    瀏覽(40)
  • STM32CubeMx配置ADC(多通道采集+DMA讀取數(shù)據(jù))(HAL庫(kù)開(kāi)發(fā))

    STM32CubeMx配置ADC(多通道采集+DMA讀取數(shù)據(jù))(HAL庫(kù)開(kāi)發(fā))

    目錄 1、函數(shù)配置過(guò)程(這是標(biāo)準(zhǔn)庫(kù)配置過(guò)程): 2、STM32CubeMx配置過(guò)程 ?3、main函數(shù)源文件 采集5路ADC數(shù)據(jù),并用串口printf()函數(shù)打印出來(lái)。 實(shí)驗(yàn)現(xiàn)象:? ADC轉(zhuǎn)換的初始條件: 1、使能 2、觸發(fā)源條件完成(這個(gè)需要自己配置)利用:HAL_ADC_Start_DMA()函數(shù); ADC中HAL開(kāi)發(fā)優(yōu)勢(shì)就是,

    2023年04月08日
    瀏覽(27)
  • 【STM32】CUBEMX之串口:串口三種模式(輪詢模式、中斷模式、DMA模式)的配置與使用示例 + 串口重定向 + 使用HAL擴(kuò)展函數(shù)實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收

    【STM32】CUBEMX之串口:串口三種模式(輪詢模式、中斷模式、DMA模式)的配置與使用示例 + 串口重定向 + 使用HAL擴(kuò)展函數(shù)實(shí)現(xiàn)不定長(zhǎng)數(shù)據(jù)接收

    目錄 ? 總覽 使用CUBEMX創(chuàng)建工程的基本配置 CUBEMX中的配置 Keil中的配置 實(shí)物連接 串口輪詢模式 輪詢模式HAL庫(kù)函數(shù) 特點(diǎn) 實(shí)驗(yàn)一:發(fā)送數(shù)據(jù)給單片機(jī)并讓其返回相同值 串口重定向 串口中斷模式 在CUBEMX中打開(kāi)串口中斷 中斷模式HAL庫(kù)函數(shù) 特點(diǎn) 實(shí)驗(yàn)二:使用中斷回調(diào)完成實(shí)驗(yàn)一

    2024年04月10日
    瀏覽(44)
  • STM32CubeMX配置-ADC多通道配置(DMA) (STM32G070)

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

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

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

    STM32 cubemx配置USART DMA傳輸

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

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

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

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

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

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

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

    2024年02月19日
    瀏覽(27)
  • STM32初學(xué)入門筆記(3):STM32CubeMX配置STM32實(shí)現(xiàn)多通道ADC+DMA讀取模擬量

    STM32初學(xué)入門筆記(3):STM32CubeMX配置STM32實(shí)現(xiàn)多通道ADC+DMA讀取模擬量

    模擬信號(hào)的讀取是我們?cè)谧龊芏囗?xiàng)目是都要用到的,而模擬量的讀取就要依賴于ADC數(shù)模轉(zhuǎn)換器。對(duì)于初學(xué)者,學(xué)習(xí)使用ADC可以很大的幫助以后的STM32學(xué)習(xí)。 目錄 ADC簡(jiǎn)介 : DMA簡(jiǎn)介:? 工程開(kāi)始: STM32CubeMX配置區(qū): 配置外部時(shí)鐘: 配置調(diào)試: 配置ADC: 配置DMA: 配置串口: 配

    2024年02月09日
    瀏覽(31)
  • STM32 Cubemx配置串口收發(fā)

    STM32 Cubemx配置串口收發(fā)

    最近學(xué)到了串口收發(fā),簡(jiǎn)單記錄一下注意事項(xiàng)。 以使用USART1為例。 USART1需配置成 異步工作模式Asynchronous 。 并且 需要使能NVIC 。 我偏向于在stm32f1xx_it.c文件中對(duì)printf進(jìn)行重定向,重定向函數(shù)如下。 同時(shí)需包含頭文件路徑#include “stdio.h” 在工程屬性Target下, 勾選Use MicroLIB

    2024年02月10日
    瀏覽(16)
  • 使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    使用STM32CubeMX創(chuàng)建STM32工程(串口,硬件IIC配置)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 最近教研室的項(xiàng)目需要使用STM32做處理器,對(duì)環(huán)境數(shù)據(jù)進(jìn)行采集處理,在拿到板子后,需要根據(jù)單片機(jī)具體型號(hào)(STM32F411CEU6)創(chuàng)建工程,再進(jìn)行上層應(yīng)用的開(kāi)發(fā)。因?yàn)橐郧岸际怯玫腇1系列的開(kāi)發(fā)板,用的

    2023年04月18日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包