0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32CUBEMX(3)--ADC通过DMA方式采样,USART打印

嵌入式单片机MCU开发 来源:嵌入式单片机MCU开发 作者:嵌入式单片机MCU开 2022-11-14 15:41 次阅读

概述

直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何CPU操作的情况下通过DMA快速传输传输。这样节省的CPU资源可供其它操作使用。

DMA允许在后台执行数据传输,无需Cortex-MO处理器干预。在此操作过程中,主处理器可以执行其它任务,仅当整个数据块需要处理时,才会中断主处理器。这样即使传输大量数据也不会对系统性能造成太大影响。

DMA主要用于为不同的外设模块实现集中数据缓冲存储(通常在系统SRAM中)。与分布式解决方案(其中每个外设都需要实现自己的本地数据存储)相比,DMA解决方案在硅片成本和功耗方面的成本较低。

根据使用的产品型号的不同,有一个或两个DMA模块。

STM32F0XX DMA控制器总共有5个通道用于DMA1,每个通道都专门管理来自一个或多个外设的存储器访问请求。它具有一个仲裁器,用于处理不同的DMA请求的优先级。

本篇文章主要介绍如何使用STM32CubeMX实现ADC在DMA下快速采集,并且打印出去。

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

在这里插入图片描述

硬件准备

首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:

在这里插入图片描述

选择芯片型号

使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

在这里插入图片描述

配置时钟

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

在这里插入图片描述

在这里插入图片描述

配置时钟树

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

在这里插入图片描述插入图片描述

串口配置

本次实验使用的串口1进行串口通信,波特率配置为115200。

在这里插入图片描述

ADC配置

STM32f030中,有一个ADC(模拟/数字转换器),每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个ADC有16个外部通道、2个内部通道和一个VBAT 通道的信号

本文将开ADC的IN0、IN1、IN4一共三个通道,来分别读取ADC,由于串口2和IN2,IN3复用,故不使用IN2、IN3。配置如下:

在这里插入图片描述

开启DMA:

在这里插入图片描述

打开中断:

在这里插入图片描述

生成工程设置

最后设置生成独立的初始化文件:

在这里插入图片描述

生成代码

在这里插入图片描述

配置keil

在这里插入图片描述

代码

在main.c中,添加头文件,若不添加会出现 identifier "FILE" is undefined报错。

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

函数声明和串口重定向:

/* 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 */

主循环:

/* USER CODE BEGIN WHILE */
  while (1)
  {
        //放个延迟,防止程序运行第一次读出数据有误
        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数据如下
");
//除以30为求30次平均ADC值,乘以3.3为以3.3电压为基准,除以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 */

演示效果

设定adc1口接3.3V,adc2口接GND,adc口接1.5V,输出如下。

在这里插入图片描述

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    98

    文章

    6489

    浏览量

    544421
  • USART
    +关注

    关注

    1

    文章

    195

    浏览量

    30834
  • stm32cubemx
    +关注

    关注

    5

    文章

    283

    浏览量

    14788
收藏 人收藏

    评论

    相关推荐

    STM32CUBEMX开发GD32F303(9)----USART通过DMA收发

    概述 本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过GD32303C_START开发板内进行验证。 本章主要配置串口进行DMA收发。 查阅
    的头像 发表于 11-29 11:15 2096次阅读
    <b class='flag-5'>STM32CUBEMX</b>开发GD32F303(9)----<b class='flag-5'>USART</b><b class='flag-5'>通过</b><b class='flag-5'>DMA</b>收发

    STM32CUBEMX(3)--ADC通过DMA方式采样USART打印

    的优先级。 本篇文章主要介绍如何使用STM32CubeMX实现ADCDMA下快速采集,并且打印出去。 QQ群:615061293。 非DMA
    发表于 09-04 14:08

    STM32CUBEMX(9)--ADC通过轮询方式读取,USART打印

    概述 本章通过使用模数转换器(ADC),通过轮询方式采集多个ADC通道电压。 之前已经做过DMA
    发表于 09-10 15:31

    转:使用STM32CubeMX生成用于STM32-V5开发板的USART工程DMA方式

    本期教程使用STM32CubeMX生成可用于STM32-V5开发板的USART1的DMA方式的工程,通过
    发表于 09-09 11:29

    通过CubeMx实现ADC多通道扫描采集DMA方式

    通过串口1打印显示开发环境:STM32CubeMx 5.4.0+Keil 5.28下载方式:ST_LINK V2项目内容CubeMx配置配
    发表于 08-11 08:14

    如何使用STM32CubeMX实现ADCDMA下快速采集并且打印出去?

    如何使用STM32CubeMX实现ADCDMA下快速采集并且打印出去?
    发表于 01-26 07:26

    STM32CubeMX软件工程描述_ USART配置过程

    STM32CubeMX软件工程描述_USART配置过程
    的头像 发表于 03-25 10:43 3350次阅读
    <b class='flag-5'>STM32CubeMX</b>软件工程描述_ <b class='flag-5'>USART</b>配置过程

    STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA

    STM32CUBEMX配置教程(十二)STM32的定时器触发的固定频率ADC采样(使用DMA
    发表于 11-24 13:51 85次下载
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十二)<b class='flag-5'>STM32</b>的定时器触发的固定频率<b class='flag-5'>ADC</b><b class='flag-5'>采样</b>(使用<b class='flag-5'>DMA</b>)

    STM32CUBEMX配置教程(十三)STM32的定时器触发的固定频率DAC输出(使用DMA

    STM32CUBEMX配置教程(十三)STM32的定时器触发的固定频率DAC输出(使用DMA
    发表于 11-24 14:06 46次下载
    <b class='flag-5'>STM32CUBEMX</b>配置教程(十三)<b class='flag-5'>STM32</b>的定时器触发的固定频率DAC输出(使用<b class='flag-5'>DMA</b>)

    STM32CUBEMX(3)--ADC通过DMA方式采样USART打印

    STM32CUBEME--3ADC通过DMA方式采样USART
    发表于 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串口通信
    发表于 12-06 20:36 24次下载
    <b class='flag-5'>STM32CubeMX</b>完成<b class='flag-5'>USART</b>串口通信

    stm32CubeMx ADC多通道扫描模式DMA + 采集STM32内部温度传感器的值

    方式通过串口1打印显示开发环境:STM32CubeMx 5.4.0+Keil 5.28下载方式:ST_LINK V2项目内容
    发表于 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>内部温度传感器的值

    STM32CubeMX实现串口通信(中断方式

    这里写目录标题一、STM32CubeMX工程创建1、题目要求2、配置STM32CubeMX工程一、STM32CubeMX工程创建1、题目要求完成一个STM32
    发表于 12-24 19:18 11次下载
    <b class='flag-5'>STM32CubeMX</b>实现串口通信(中断<b class='flag-5'>方式</b>)

    STM32CubeMX与HAL库学习--ADCUSART的简单练习

    STM32CubeMX与HAL库学习--ADCUSART的简单练习前言STM32CubeMX生成初始化代码在MDK-ARM里编辑代码效果前言最近看了
    发表于 01-12 20:27 13次下载
    <b class='flag-5'>STM32CubeMX</b>与HAL库学习--<b class='flag-5'>ADC</b>与<b class='flag-5'>USART</b>的简单练习

    STM32CubeMx配置USART1增加打印功能

    STM32CubeMx配置USART1增加打印功能
    的头像 发表于 08-22 10:32 1212次阅读
    <b class='flag-5'>STM32CubeMx</b>配置<b class='flag-5'>USART</b>1增加<b class='flag-5'>打印</b>功能