# Using ADC on STM32

## Software Trigger Polling Mode

Set **External Trigger Conversion Source** to be "Regular Conversion launched by software"

<figure><img src="https://1287130752-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvVJ0h2a4qMIhB1I8GdV8%2Fuploads%2FWCuNSqRGplon0ACgPmvZ%2Fimage.png?alt=media&#x26;token=5fa6ac4d-02aa-4da6-96bd-7e416e8972b6" alt=""><figcaption></figcaption></figure>

```c
HAL_ADC_Start(&hadc1);
HAL_StatusTypeDef status = HAL_ADC_PollForConversion(&hadc1, 100);
uint32_t value = (int32_t)HAL_ADC_GetValue(&hadc1);
```

## Timer Triggered Mode

It is more convenient to use injected channel.

<figure><img src="https://1287130752-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvVJ0h2a4qMIhB1I8GdV8%2Fuploads%2FJQBYchin44QJkAzX3Hw4%2Fimage.png?alt=media&#x26;token=c97fc1c3-9f20-4c50-8b98-c6c0729a4234" alt=""><figcaption></figcaption></figure>

Configure Timer 2 to generate reset event on TRGO at 1 kHz.

The 1 kHz is calculated from `APB1_TIMER_CLOCKS / (PSC + 1) / (ARR + 1)`:

$$
\frac{80 MHz}{(79 + 1) \times (999 + 1)} = 1 kHz
$$

<figure><img src="https://1287130752-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvVJ0h2a4qMIhB1I8GdV8%2Fuploads%2F6MoOrbL5q8gHO7rqROQR%2Fimage.png?alt=media&#x26;token=4458e169-770e-4cd3-8c54-e2936f44a2cc" alt=""><figcaption></figcaption></figure>
