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

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

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

STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

嵌入式單片機MCU開發(fā) ? 來源:嵌入式單片機MCU開發(fā) ? 作者:嵌入式單片機MCU開 ? 2022-11-14 15:41 ? 次閱讀

概述

直接存儲器訪問(DMA)用于在外設(shè)與存儲器之間以及存儲器與存儲器之間提供高速數(shù)據(jù)傳輸??梢栽跓o需任何CPU操作的情況下通過DMA快速傳輸傳輸。這樣節(jié)省的CPU資源可供其它操作使用。

DMA允許在后臺執(zhí)行數(shù)據(jù)傳輸,無需Cortex-MO處理器干預(yù)。在此操作過程中,主處理器可以執(zhí)行其它任務(wù),僅當(dāng)整個數(shù)據(jù)塊需要處理時,才會中斷主處理器。這樣即使傳輸大量數(shù)據(jù)也不會對系統(tǒng)性能造成太大影響。

DMA主要用于為不同的外設(shè)模塊實現(xiàn)集中數(shù)據(jù)緩沖存儲(通常在系統(tǒng)SRAM中)。與分布式解決方案(其中每個外設(shè)都需要實現(xiàn)自己的本地數(shù)據(jù)存儲)相比,DMA解決方案在硅片成本和功耗方面的成本較低。

根據(jù)使用的產(chǎn)品型號的不同,有一個或兩個DMA模塊。

STM32F0XX DMA控制器總共有5個通道用于DMA1,每個通道都專門管理來自一個或多個外設(shè)的存儲器訪問請求。它具有一個仲裁器,用于處理不同的DMA請求的優(yōu)先級。

本篇文章主要介紹如何使用STM32CubeMX實現(xiàn)ADC在DMA下快速采集,并且打印出去。

非DMA接收請查看:https://blog.csdn.net/qq_24312945/article/details/109685401

在這里插入圖片描述

硬件準(zhǔn)備

首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板:

在這里插入圖片描述

選擇芯片型號

使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:

在這里插入圖片描述

配置時鐘

HSE與LSE分別為外部高速時鐘和低速時鐘,在本文中使用內(nèi)置的時鐘源,故都選擇Disable選項,如下所示:

在這里插入圖片描述

在這里插入圖片描述

配置時鐘樹

STM32F0的最高主頻到48M,所以配置48即可:

在這里插入圖片描述插入圖片描述

串口配置

本次實驗使用的串口1進行串口通信,波特率配置為115200。

在這里插入圖片描述

ADC配置

STM32f030中,有一個ADC(模擬/數(shù)字轉(zhuǎn)換器),每個 ADC 有 12 位、 10 位、 8 位和 6 位可選,每個ADC有16個外部通道、2個內(nèi)部通道和一個VBAT 通道的信號。

本文將開ADC的IN0、IN1、IN4一共三個通道,來分別讀取ADC,由于串口2和IN2,IN3復(fù)用,故不使用IN2、IN3。配置如下:

在這里插入圖片描述

開啟DMA:

在這里插入圖片描述

打開中斷:

在這里插入圖片描述

生成工程設(shè)置

最后設(shè)置生成獨立的初始化文件:

在這里插入圖片描述

生成代碼

在這里插入圖片描述

配置keil

在這里插入圖片描述

代碼

在main.c中,添加頭文件,若不添加會出現(xiàn) identifier "FILE" is undefined報錯。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

函數(shù)聲明和串口重定向:

/* USER CODE BEGIN PFP */
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}
/* USER CODE END 0 */

變量定義:

/* USER CODE BEGIN 1 */
        uint32_t ADC_1, ADC_2,ADC_3;
        //各采樣30次,故30*3為90
        uint32_t ADC_Value[90];
        uint8_t i;
  /* USER CODE END 1 */

使用DMA傳輸:

/* USER CODE BEGIN 2 */
    HAL_ADC_Start_DMA(&hadc,(uint32_t*)&ADC_Value,90);    //使用DMA傳輸
  /* USER CODE END 2 */

主循環(huán):

/* USER CODE BEGIN WHILE */
  while (1)
  {
        //放個延遲,防止程序運行第一次讀出數(shù)據(jù)有誤
        HAL_Delay(100);
        ADC_1=0;
        ADC_2=0;
        ADC_3=0;
            for(i=0,ADC_1=0,ADC_2=0;i<90;)
        {
            ADC_1+=ADC_Value[i++];   
            ADC_2+=ADC_Value[i++];
            ADC_3+=ADC_Value[i++];
        }
    printf("ADC數(shù)據(jù)如下
");
//除以30為求30次平均ADC值,乘以3.3為以3.3電壓為基準(zhǔn),除以4096為ADC配置為12位

        printf("ADC_IN0=%1.4f
",ADC_1/30*3.3f/4096);
        printf("ADC_IN1=%1.4f
",ADC_2/30*3.3f/4096);
        printf("ADC_IN2=%1.4f
",ADC_3/30*3.3f/4096);
    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */
        HAL_Delay(900);
  }
  /* USER CODE END 3 */

演示效果

設(shè)定adc1口接3.3V,adc2口接GND,adc口接1.5V,輸出如下。

在這里插入圖片描述

審核編輯:湯梓紅

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

    關(guān)注

    98

    文章

    6498

    瀏覽量

    544629
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30853
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    283

    瀏覽量

    14807
收藏 人收藏

    評論

    相關(guān)推薦

    STM32CUBEMX開發(fā)GD32F303(9)----USART通過DMA收發(fā)

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中進行開發(fā),同時通過GD32303C_START開發(fā)板內(nèi)進行驗證。 本章主要配置串口進行DMA收發(fā)。 查閱
    的頭像 發(fā)表于 11-29 11:15 ?2123次閱讀
    <b class='flag-5'>STM32CUBEMX</b>開發(fā)GD32F303(9)----<b class='flag-5'>USART</b><b class='flag-5'>通過</b><b class='flag-5'>DMA</b>收發(fā)

    STM32CUBEMX(2)--USART通過DMA方式接收不定長數(shù)據(jù)

    。 本篇文章主要介紹如何使用STM32CubeMX實現(xiàn)串口DMA讀取,并且打印出去。QQ群:615061293。 硬件準(zhǔn)備 首先需要準(zhǔn)備一個開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板
    發(fā)表于 09-04 11:48

    STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

    的優(yōu)先級。 本篇文章主要介紹如何使用STM32CubeMX實現(xiàn)ADCDMA下快速采集,并且打印出去。 QQ群:615061293。 非DMA
    發(fā)表于 09-04 14:08

    轉(zhuǎn):使用STM32CubeMX生成用于STM32-V5開發(fā)板的USART工程DMA方式

    本期教程使用STM32CubeMX生成可用于STM32-V5開發(fā)板的USART1的DMA方式的工程,通過
    發(fā)表于 09-09 11:29

    通過CubeMx實現(xiàn)ADC多通道掃描采集DMA方式

    通過串口1打印顯示開發(fā)環(huán)境:STM32CubeMx 5.4.0+Keil 5.28下載方式:ST_LINK V2項目內(nèi)容CubeMx配置配
    發(fā)表于 08-11 08:14

    如何使用STM32CubeMX實現(xiàn)ADCDMA下快速采集并且打印出去?

    如何使用STM32CubeMX實現(xiàn)ADCDMA下快速采集并且打印出去?
    發(fā)表于 01-26 07:26

    STM32CubeMX軟件工程描述_ USART配置過程

    STM32CubeMX軟件工程描述_USART配置過程
    的頭像 發(fā)表于 03-25 10:43 ?3358次閱讀
    <b class='flag-5'>STM32CubeMX</b>軟件工程描述_ <b class='flag-5'>USART</b>配置過程

    STM32CUBEMX配置教程(十二)STM32的定時器觸發(fā)的固定頻率ADC采樣(使用DMA

    STM32CUBEMX配置教程(十二)STM32的定時器觸發(fā)的固定頻率ADC采樣(使用DMA
    發(fā)表于 11-24 13:51 ?85次下載
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十二)<b class='flag-5'>STM32</b>的定時器觸發(fā)的固定頻率<b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>(使用<b class='flag-5'>DMA</b>)

    STM32CUBEMX配置教程(十三)STM32的定時器觸發(fā)的固定頻率DAC輸出(使用DMA

    STM32CUBEMX配置教程(十三)STM32的定時器觸發(fā)的固定頻率DAC輸出(使用DMA
    發(fā)表于 11-24 14:06 ?46次下載
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十三)<b class='flag-5'>STM32</b>的定時器觸發(fā)的固定頻率DAC輸出(使用<b class='flag-5'>DMA</b>)

    STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

    STM32CUBEME--3ADC通過DMA方式采樣USART
    發(fā)表于 12-01 14:51 ?7次下載
    <b class='flag-5'>STM32CUBEMX</b>(<b class='flag-5'>3</b>)--<b class='flag-5'>ADC</b><b class='flag-5'>通過</b><b class='flag-5'>DMA</b><b class='flag-5'>方式</b><b class='flag-5'>采樣</b>,<b class='flag-5'>USART</b><b class='flag-5'>打印</b>

    STM32CubeMX完成USART串口通信

    STM32CubeMX完成USART串口通信
    發(fā)表于 12-06 20:36 ?24次下載
    <b class='flag-5'>STM32CubeMX</b>完成<b class='flag-5'>USART</b>串口通信

    stm32CubeMx ADC多通道掃描模式DMA + 采集STM32內(nèi)部溫度傳感器的值

    方式通過串口1打印顯示開發(fā)環(huán)境:STM32CubeMx 5.4.0+Keil 5.28下載方式:ST_LINK V2項目內(nèi)容
    發(fā)表于 12-08 21:06 ?18次下載
    <b class='flag-5'>stm32CubeMx</b> <b class='flag-5'>ADC</b>多通道掃描模式<b class='flag-5'>DMA</b> + 采集<b class='flag-5'>STM32</b>內(nèi)部溫度傳感器的值

    STM32CubeMX實現(xiàn)串口通信(中斷方式

    這里寫目錄標(biāo)題一、STM32CubeMX工程創(chuàng)建1、題目要求2、配置STM32CubeMX工程一、STM32CubeMX工程創(chuàng)建1、題目要求完成一個STM32
    發(fā)表于 12-24 19:18 ?11次下載
    <b class='flag-5'>STM32CubeMX</b>實現(xiàn)串口通信(中斷<b class='flag-5'>方式</b>)

    STM32CubeMX與HAL庫學(xué)習(xí)--ADCUSART的簡單練習(xí)

    STM32CubeMX與HAL庫學(xué)習(xí)--ADCUSART的簡單練習(xí)前言STM32CubeMX生成初始化代碼在MDK-ARM里編輯代碼效果前言最近看了
    發(fā)表于 01-12 20:27 ?13次下載
    <b class='flag-5'>STM32CubeMX</b>與HAL庫學(xué)習(xí)--<b class='flag-5'>ADC</b>與<b class='flag-5'>USART</b>的簡單練習(xí)

    STM32CubeMx配置USART1增加打印功能

    STM32CubeMx配置USART1增加打印功能
    的頭像 發(fā)表于 08-22 10:32 ?1224次閱讀
    <b class='flag-5'>STM32CubeMx</b>配置<b class='flag-5'>USART</b>1增加<b class='flag-5'>打印</b>功能