http://we.easyelectronics.ru/GYUR22/stm32-adcdmaitcusrednenie.html#comment94893 ADCout (uint) — уже откалиброваные данные (которые надо получить) ADCin (uint)- сырые данные ADCref (uint)- измеренный внутренний референс. Он на 17м канале сидит вроде бы. А дальше следим за руками: 1. ADCin = (Vin/Vdd)*4095 (измерение относительно питания, 12 бит) 2. ADCref = (Vref/Vdd)*4095 (Vref смотрим в даташите, не помню сколько) (1489) 3. Выведем Vin: Vin = Vref*ADCin/ADCref 4. Но это бесполезные в целочисленной арифметике вольты. А нам нужны попугаи: ADCout = (Vin/Vdd) * 4095 (эмулируем АЦП )))) ) ADCout = (ADCin * (Vref*4095/Vdd) )/ ADCref 5. Обозначим K = Vref*4095/Vdd (коэффициент типа uint) 6. Итоговый вариант: ADCout = ((u32)ADCin * K)/ADCref; K — какой коэффициентугодно можно. Но для красоты и предсказуемости данных я его высчитываю относительно номинального напряжения питания. Как уже было подмечено, калибровку делаем после каждого измерения. А потом хоть заусредняйтесь. Еще момент (было в сообществе кстати), на точность измерения очень сильно влияет сэмплинг тайм. На ваш вкус. Но для рефа мы делаем не менее 28.5 циклов тактирования АЦП. Как-то так --- http://www.robobuild.ru/index.php?itid=4 --- http://microtechnics.ru/stm32-uchebnyj-kurs-adc-acp/