一、介绍
蓝桥杯嵌入式开发板使用的是STM32G431RBT6,这个G系列的mcu使用STM32cubemax配置的时候和普通的F系列不太一样。
二、原理图
同时开发板预留了两个adc采样通道,分别是PB15和PB12,如果需要adc采样的话,这里我们这里使用两种方式,一种是adc直接采样CPU处理数据,另外一种是采用ADC采样加DMA传输。
三、STM32CUBEMAX配置
时钟配置 :输入外部高速时钟为24MHZ,这里可以将主频调至170MHZ。
ADC配置 :PB15和PB12位ADC输入
3-1 ADC直接采样
将IN11通道设置为single-ended
ContinuousConvMode = DISABLE;
DMAContinuousRequests = DISABLE;
其他配置不变
3-2 ADC采样+DMA传输
将IN11通道设置为single-ended
ContinuousConvMode = ENABLE;
DMAContinuousRequests = ENABLE;
DMA中断和ADC中断;
DMA设置circular,传输设为word
四、程序代码
注意这里两种配置方式对应不同的采样模式,我的建议的选择一种即可。然后两种的程序代码也不一样。
4-1 ADC直接采样
在主函数中直接调用getADC1()和getADC2()函数就可以完全可以,就是有点浪费资源
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "dma.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "lcd.h"
#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 ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint16_t getADC1(void) //得到ADC1的值
{
uint16_t adc = 0;
HAL_ADC_Start(&hadc1);
adc = HAL_ADC_GetValue(&hadc1);
return adc;
}
uint16_t getADC2(void