# ADC conversion Time/Frequency Calculation in STM32

I have already covered How to use ADC in STM32. None of those tutorials actually covered the precise way to measure the conversion time or frequency for the ADC. Today in this tutorial, we will cover How to measure ADC conversion Time or conversion Frequency.

This tutorial will be divided into two halves. I will demonstrate how to utilize the datasheet to do these calculations. The first half of the tutorial will cover the STM32F103C8 controller, and the second half will cover STM32F446RE.

But this is not specific to these two microcontrollers. If you read everything carefully, you can implement the same logic for whatever series of microcontroller you have.

**STM32F103C8 controller**

Some of the important ADC features of STM32 F1 series, from the calculation point of view, are listed below

- 12 BIT Resolution. This is fixed, and can’t be changed.
- ADC clock is derived from the APB2 Clock. And using the prescalar, we can further control the ADC clock
- MAX ADC Clock can be 14 MHz

Below is the picture from the reference manual of F103 controller.

It shows that the ADC Conversion Time = Sampling Time + 12.5 Cycles. Here Sampling Time is something that you can choose during the setup in the CubeMX. Below is the modified formula to do this calculation

The formula mentioned above is the same, but little better representation of what’s there in the reference manual. See the **example below**

I want the **conversion time to be of 17 microseconds**. It’s not a random time, this is the requirement for the internal Temp sensor to work.

We need to select the values of Sampling Time and ADC Clock in such a way, so as to get this 17 microseconds of Conversion Time.

There can be many possibilities for doing this, and one of them is if we select the **Sampling Time of 71.5 CYCLES** along with the** ADC CLOCK of 5 MHz****(71.5 + 12.5)/14MHz = 17 us**

In the similar way, the Conversion frequency can be calculated by reversing the formula mentioned above

With the same setup of Sampling time (71.5) and same ADC Clock (14 MHz), the **Conversion Frequency would be around 59 KHz.**

**STM32F446RE Controller**

Some of the ADC Key points from the Reference manual of F446RE are as follows:

- 12-bit, 10-bit, 8-bit or 6-bit configurable resolution
- ADC Sampling Time changes based on the resolution Selected
- ADC Clock is derived from the APB2 clock, and can be configured using the prescalar

F446RE reference manual also have a formula to calculate the Conversion time and that is as shown below

I have modified this a bit in order for you to understand it, and the modified formula to calculate the conversion time is given below

Here, **Cycles **depends on the resolution you select for the ADC

- For 12 bit Resolution
**CYCLES**= 12 - For 10 bit Resolution
**CYCLES**= 10 - For 6 bit Resolution
**CYCLES**= 6

The rest of the variables, like Sampling Time, and **ADC CLOCK** are configurable during the setup.

For eg:- Let’s say I want the ADC conversion time of 10 microseconds, for the Temperature Sensor. Here is the setup I an do for the same

- Keep the APB2 CLOCK at 50 MHz
- I am using 12 bit Resolution for this purpose, so the Cycles = 12
- Use the prescalar as 4. This is bring the ADC CLOCK to 12.5 MHz
- Use the Sampling Time of 112 CYCLES.
- Now conversion Time =
**(112 + 12) / 12.5 MHz = 9.9 us**

The above example is just one of the combinations of many, that you can do for the same conversion time.

The same setup would also result in **Conversion Frequency** of 1/10 us = **100 KHz**

You can apply the same Logic to any other STM32 controller you have. Just remember to look for the formula in the datasheet or the reference manual.