Si lees el archivo que enlacé, la mayoría de los errores son esperados pero muestran formas de como disminuir sus efectos tanto en hardware como en software.
La primera tarjeta con la que probé, de antemano se que está mal, pero la siguiente es el resultado de una prueba con otra tarjeta del mismo tipo con 13.5 ciclos (ADC_IN0, V_TEMP, VREFINT)
4095 4094 4094 1712 1715 1715 1399 1396 1395
4095 4095 4095 1713 1714 1716 1398 1396 1396
4095 4095 4095 1713 1715 1715 1400 1396 1395
4095 4095 4095 1715 1715 1715 1394 1394 1396
4095 4092 4094 1714 1715 1715 1396 1397 1394
4095 4094 4091 1715 1715 1714 1395 1396 1396
4095 4095 4094 1713 1715 1716 1399 1399 1398
4095 4095 4095 1714 1715 1713 1398 1396 1396
4095 4095 4095 1714 1715 1718 1400 1395 1393
4095 4094 4094 1714 1714 1716 1397 1395 1396
4090 4095 4095 1714 1715 1715 1396 1395 1396
0 0 0 1766 1769 1766 1382 1381 1379
0 0 0 1766 1766 1767 1382 1381 1384
0 0 0 1765 1766 1768 1380 1382 1380
0 0 0 1767 1768 1767 1379 1380 1381
0 0 0 1765 1766 1769 1382 1379 1377
0 0 0 1765 1768 1768 1379 1382 1379
0 0 0 1767 1768 1765 1380 1381 1382
1 0 0 1768 1767 1766 1381 1381 1380
0 0 0 1766 1767 1767 1379 1385 1380
0 0 0 1767 1768 1768 1383 1380 1380
3 0 0 1766 1768 1767 1382 1381 1379
Y no he cambiado nada del código de prueba.
Volví a leer las hojas de datos y el tiempo total de conversión se calcula
Tconv <= Sampling Time + 12.5 cycles.
Así si se elije 13.5 ciclos Tconv sería de 2.16us, pero en la misma hoja de datos hace referencia a los tiempos en los cuales está garantizada una lectura precisa. La lectura de la temperatura la garantizan con un tiempo de muestreo de 17.1us, así que la muevo al final y la configuro con 239.5 ciclos. De igual forma incremento el tiempo de muestreo a 239.5 ciclos para la lectura de VREFINT, ya que también su lectura está garantizada con un tiempo de muestreo de 17.1us.


(ADC_IN0, VREFINT, V_TEMP)
4095 4095 4095 1489 1489 1490 1757 1757 1757
4095 4095 4095 1489 1488 1489 1759 1757 1757
4095 4095 4095 1490 1488 1489 1753 1759 1757
4095 4095 4095 1489 1488 1489 1757 1757 1758
4095 4095 4095 1490 1489 1490 1755 1759 1759
4095 4095 4095 1491 1488 1487 1759 1757 1757
4095 4094 4095 1489 1489 1492 1757 1758 1756
4095 4095 4095 1492 1489 1489 1758 1760 1757
4095 4095 4095 1488 1489 1491 1757 1757 1757
4095 4095 4095 1492 1490 1489 1757 1757 1761
4095 4095 4095 1489 1488 1491 1759 1759 1759
0 0 0 1493 1494 1495 1760 1756 1757
0 0 0 1494 1493 1493 1759 1756 1757
0 0 0 1492 1492 1494 1758 1757 1757
0 0 0 1494 1492 1492 1758 1753 1757
0 0 0 1493 1492 1496 1759 1758 1757
0 0 1 1494 1493 1491 1757 1758 1757
0 0 0 1493 1490 1493 1757 1757 1756
0 0 0 1491 1493 1493 1758 1758 1756
0 0 0 1492 1493 1492 1757 1757 1756
0 0 0 1493 1495 1493 1757 1757 1755
0 0 0 1493 1493 1492 1757 1759 1757
Y no sólo se estabilizaron las lecturas, sino que obtengo valores dentro de lo que la hoja de datos me dice.
Por ejemplo VREFINT puede tener valores entre, 1.16 a 1.26, siendo 1.20 el típico. Sin considerar la hoja de datos, lo que en apariencia leía era alrededor de 1V, pero con estos resultados está alrededor de 1.18V que está dentro de los parámetros.
Adjunto el .hex y el .bin por si lo quieres probar en tu placa. Para ver las lecturas conectalo por USB y lo va a reconocer como puerto serie (115200 8 bits, 1 bit de stop sin paridad).