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

项目简介

任务:通过CubeMx实现ADC多通道扫描采集DMA方式(无中断) 采集内部温度传感器的温度
通道:采集A0、A1、A2、B0、B1端口电压,
采集内部温度传感器通道16、内部电压通道17
显示方式:通过串口1打印显示
开发环境:STM32CubeMx 5.4.0+Keil 5.28
下载方式:ST_LINK V2

项目内容

CubeMx配置

配置开启外部高速时钟振荡源HSE
配置开启外部高速时钟振荡源HSE
配置串行调试下载方式Serial Wire
配置串行调试下载方式Serial Wire
配置串口1为异步模式,其余参数默认,无需中断
配置串口1为异步模式
配置ADC1
开启ADC需要使用的通道
ADC参数配置ADC开启DMA传输
注意:DMA中断已被强制打开
DMA中断已被强制打开
时钟树配置
在这里插入图片描述

源代码配置:

添加头文件:

#include "stdio.h"

变量定义:

uint8_t Uart1_TX_buffer[30];//串口1发送缓冲数组
uint16_t AdcValue[7];		//DMA传输ADC采集值变量内存数组
float temperature = 0;		//CPU内部温度
float Vref = 0;				//参考电压

串口重定义函数:

/***********************************
@function:串口1的重定义,使用标准C的输入输出函数
@parameter:void
@return:void
@date:2020-2-7
note:头文件stdio.h
***********************************/
int fputc(int ch,FILE *f)
{
	uint8_t temp[1] = {ch};
	HAL_UART_Transmit(&huart1,temp,1,2);
	return(ch);
}

主函数代码:

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_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_ADCEx_Calibration_Start(&hadc1);    //AD校准
	HAL_NVIC_DisableIRQ(DMA1_Channel1_IRQn);//注意:防止反复进入DMA中断
	HAL_ADC_Start_DMA(&hadc1,(uint32_t *)AdcValue,7);	
	HAL_UART_AbortTransmit(&huart1);
	printf("串口1就绪\r\n");
	
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
		HAL_Delay(100);		
		Vref = AdcValue[6];
		Vref = 1.2 / Vref;
		temperature = AdcValue[5];
		temperature = Vref*temperature;
		temperature = (1.43 - temperature)/0.0043 + 25;
		
		printf("A0=%0.2fv\tA1=%0.2fv\tA2=%0.2fv\tB0=%0.2fv\tB1=%0.2fv\t%0.1f℃\r\n",Vref*(float)(AdcValue[0]),Vref*(float)(AdcValue[1]),Vref*(float)(AdcValue[2]),Vref*(float)(AdcValue[3]),Vref*(float)(AdcValue[4]),temperature);
  }
  /* USER CODE END 3 */
}

项目效果:

硬件设备:
硬件设备
原理图:
电路图1
电路图2
不动遥杆采集值:
效果
操作摇杆后的值:
操作摇杆后的值
项目结束语:
本篇文章只涉及使用CubeMx项目配置方法,后面将会写一篇对本篇文章的项目配置代码进行讲解。由于笔者能力有限,如有错误请指出,不足之处还望见谅。加油2020年!

发布了10 篇原创文章 · 获赞 1 · 访问量 435

猜你喜欢

转载自blog.csdn.net/qq_36561846/article/details/104213387