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);//如果DMA设置的是循环模式,可以将此函数放置到while前面,启用一次即可。
		HAL_Delay(800);

在这里插入图片描述

📚STM32G070工程源码

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

📙STM32F4 ADC DMA单通道采样例程

  • 🔰ADC 单通道采样和多通道采样软件配置差异:
  • 🔖Scan Conversion Mode需要使能Enable :此项选择扫描模式使能,代表启用对多通道路ADC输入分别扫描,如果不使能,其将会只读取一个输入的值。
  • 🔖Number of Conversion设置: 如果有多少路输入就选择多少,此处选择数字之后,下面的Rank才会出来启用的通道。
    在这里插入图片描述
  • 🌿DMA设置和上面的相同:
    在这里插入图片描述
  • 📝main函数代码:
int main(void)
{

  /* USER CODE BEGIN 1 */
	 uint16_t AdcBuf=0;
  /* 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_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
//	HAL_ADCEx_Calibration_Start(&hadc1); //F401没有
	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&AdcBuf,1) ;

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		float Voltage = AdcBuf*3.3f/4095;//通过转化的值计算电压值
		printf("\n\rCH0 AdcBuf:%d ,Voltage=%.2fV\n\r",AdcBuf,Voltage);//输出电压值
		HAL_Delay(500) ;
		HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
  }
  /* USER CODE END 3 */
}

📘STM32F401测试工程:

链接:https://pan.baidu.com/s/1Zaf0b8xrXssGs6e5FCsyPw?pwd=ema3 
提取码:ema3
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值