首页 >> 知识 >> STM32G030F6使用CubeMx配置DMA读取多通道ADC实验

STM32G030F6使用CubeMx配置DMA读取多通道ADC实验

1. 使用 CubeMx 创建 ADC 工程

打开 CubeMx 软件,选中草莓视频在线观看APP此次使用的单片机型号 STM32G030F6P6 ,点击 StartProject.

先配置一下串口,用来打印相关信息

再来配置 ADC

配置DMA PS:DMA需要要配置成循环模式,否则只填满一次缓存数组后就停止工作,需要重调用启动 DMA 的函数.

配置时钟

ps:本实验使用内部高速时钟,未使用外部晶振,主频设置为最大的64MHZ.

配置工程相关选项

配置完成后点击右上角 GENERATE CODE完成工程的创建

2. 编程 2.1 串口相关的代码 因打印相关信息需要使用 printf ,需要包含 stdio.h 的头文件,且需要重新设 fputc 的函数 /* Includes ------------------------------------------------------------------*/#include "main.h"/* Private includes ----------------------------------------------------------*//* USER CODE BEGIN Includes */#include "stdio.h"/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*//* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*//* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*//* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/ADC_HandleTypeDef hadc1;DMA_HandleTypeDef hdma_adc1;UART_HandleTypeDef huart1;/* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/void SystemClock_Config(void);static void MX_GPIO_Init(void);static void MX_DMA_Init(void);static void MX_ADC1_Init(void);static void MX_USART1_UART_Init(void);/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*//* USER CODE BEGIN 0 */__IO uint16_t adcCovValueBuff[30][2] = {0};//存放ADC的值 2通道 每个通道存放30个值,由DMA循环写入uint16_t adcAverageBuff[2] = {0};//对每个通道30个ADC值取平均值#ifdef __GNUC_#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xFFFF); return ch;}/* USER CODE END 0 */ 2.2 main 函数 /** * @brief The application entry point. * @retval int */int main(void){ /* USER CODE BEGIN 1 */ float votage = 0; uint32_t sum = 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 */ printf("stm32g030f6 adc demo...... "); HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adcCovValueBuff, 60); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while(1) { for(uint8_t i = 0; i
网站地图