STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程相关的知识,希望对你有一定的参考价值。

STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程


- 📌相关篇《【硬件开源电路】STM32G070RBT6开发板

📋对于STM32G070RBT6来说,它的ADC是12位,ADC最多有16个外部通道和3个内部通道。支持单次,连续以及间断模式扫描。

  • 🌼STM32CubeMX配置过程
  • 🌷业务代码补充演示

📚工程概要

📑通过ADC DMA采集PA0 ~ PA3的外部电压信号(单片机能承受的电压信号范围:0 ~ 3.6V) ,然后通过串口1分别打印每个通道的数据以及转换后的电压值。

🔨启用以下4个通道:

	PA0     ------> ADC1_IN0
    PA1     ------> ADC1_IN1
    PA2     ------> ADC1_IN2
    PA3     ------> ADC1_IN3

  • 🌿在DMA功能模块当中添加ADC1
  • 🌿使能串口1功能

默认配置的串口1引脚位PC4和PC5,可以根据个人需求将串口1复用到:PA9和PA10,或者PB6和PB7


📝相关业务代码补充

  • 🌿在usart.c文件当中,在指定的位置放置如下实现函数

📑主要功能是实现在需要调试信息输出的地方,Printf函数串口打印,在需要使用printf打印的地方,需要包含其stdio.h头文件,本函数依赖Miicro LIB,需要在Keil中,Target-勾选“Micro Lib”选项。

#include "stdio.h"
/*可调用printf*/
int fputc(int ch,FILE *f)

    /*&huart1指的是串口1,如果用别的串口就修改数字*/
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch , 1 , 0xffff);
    return ch;


  • 🌿编译器版本根据个人安装的版本选择,STM32CubeMX生成的是5.37的,如果安装的是最新的那么就选择ARM Compiler 6版本的。

  • 主函数while中添加如下代码
for(int i=0; i<ADC_BUFFER_SIZE; i++) 
			voltage[i] = (float)adc_dma_buffer[i] * (3.3/4096);
			printf(" PA%1d ADC_value: %u voltage: %.2fv\\r\\n", i,adc_dma_buffer[i], voltage[i]);
		
		printf("\\r\\n");		
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2);//板载led状态翻转
		
		HAL_ADC_Start_DMA(&hadc1, (uint32_t *)&adc_dma_buffer, ADC_BUFFER_SIZE);
		HAL_Delay(800);

📚工程源码

链接:https://pan.baidu.com/s/1yFeJYatGv5E90IMMWFw_Ag 
提取码:goq2

以上是关于STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程的主要内容,如果未能解决你的问题,请参考以下文章

STM32G070RBT6基于STM32CubeMX创建串口中断接收数据

STM32G070RBT6基于STM32CubeMX创建ADC DMA多通道采样工程

STM32G070RBT6基于STM32CubeMX创建EXTI外部中断工程

STM32G070RBT6基于Arduino框架下点灯程序

STM32G070RBT6基于Arduino框架GPIO外部中断

STM32G070RBT6基于STM32CubeMX创建定时器中断控制LED闪烁