Lo ideal sería utilizar una derivación del lado bajo, y quizás amplificarla. De esa manera, comienza dentro del rango del ADC, y potencialmente mapea los voltajes esperados (generalmente pequeños) vistos a través de la derivación a una fracción significativa del rango del ADC.
Si debe permanecer con una derivación oculta, una mejor solución podría ser un amplificador diferencial que pueda eliminar el voltaje de compensación y multiplicarse, lo que produce un aumento de la variación de voltaje que va desde el suelo. Puede hacerlo usted mismo con amplificadores operacionales, o puede usar un chip creado específicamente para este propósito, como el INA139 / INA169.
También tenga en cuenta que el ADC STM32F1xx se considera un poco ruidoso por algunos: tenga cuidado con el diseño analógico, apague las partes no utilizadas de la MCU durante la medición y considere el filtrado del software.
Otra solución podría ser utilizar el INA219, que maneja tanto la conversión de desplazamiento de lado alto a lado bajo, como también el ADC, por lo que simplemente consulta en su interfaz I2C. Adafruit tiene una tabla de ruptura para esto y muestra un código de Arduino que puedes usar para intentarlo antes de integrarlo en un diseño; la placa está ampliamente clonada por otros (es un diseño de hardware abierto), aunque uno debe sospechar que puede venir con el grado de calidad más bajo del chip y tal vez una resistencia de cortocircuito más barata (pero puede terminar eliminando la derivación a bordo de todos modos) .
Si su sistema ya tiene un amplificador diferencial y genera un rango de 0 a 5v, entonces un divisor como Jeff sugiere que podría funcionar, pero depende de la naturaleza del Salida del amplificador. Algunos (como el INA139 / 169 mencionado anteriormente) usan una resistencia de carga para programar el rango de voltaje de salida, si tiene un sistema de este tipo, lo que probablemente querría hacer es calcular una resistencia de carga externa paralela que reprogramaría el rango para que coincida con su Rango ADC.