This example configures ADC1
to read a 16 bit analog value of PA7
using a polled loop. The serial output is available on the STLink header.
#include <Arduino.h> #include <stm32h7xx_hal.h> ADC_HandleTypeDef hadc1; static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // Enable the GPIOA clock __HAL_RCC_GPIOA_CLK_ENABLE(); /**ADC1 GPIO Configuration PA7 ------> ADC1_IN7 */ GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } static void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_16B; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; //hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; hadc1.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { // Initialization Error } sConfig.Channel = ADC_CHANNEL_7; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { // Channel Configuration Error } } void setup() { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); Serial.begin(115200); } void loop() { HAL_ADC_Start(&hadc1); // Start ADC conversion HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); // Wait for conversion to complete uint32_t adcValue = HAL_ADC_GetValue(&hadc1); // Read the ADC converted value Serial.printf("ADC value: %04X\n", adcValue); }
[env:nucleo_h743zi] platform = ststm32 board = nucleo_h743zi framework = arduino monitor_speed = 115200
Example output (unconnected):
ADC value: 04B6 ADC value: 049C ADC value: 04AC ADC value: 04AE ADC value: 0497 ADC value: 04AF ADC value: 04A7 ADC value: 04C6 ADC value: 0491 ADC value: 04A1 ADC value: 04AF ADC value: 0493 ADC value: 0497 ADC value: 04AF ADC value: 04A3 ADC value: 047D ADC value: 04C1 ADC value: 04B1 ADC value: 04AF ADC value: 0498 ADC value: 04A1 ADC value: 04C3 ADC value: 04AE ADC value: 04AC ADC value: 0489 ADC value: 0491 ADC value: 0491 ADC value: 047E ADC value: 04B8 ADC value: 0494 ADC value: 04A5 ADC value: 0491 ADC value: 0494 ADC value: 048A ADC value: 0499 ADC value: 0494 ADC value: 049E