En este caso, voy a utilizar 8 puertos analógicos de un STM8S.

La rutina de inicialización que propongo es:

//* De-Init ADC peripheral
ADC2->CSR  = ADC2_CSR_RESET_VALUE;
ADC2->CR1  = ADC2_CR1_RESET_VALUE;
ADC2->CR2  = ADC2_CR2_RESET_VALUE;
ADC2->TDRH = ADC2_TDRH_RESET_VALUE;
ADC2->TDRL = ADC2_TDRL_RESET_VALUE;
        
//* Clear the ADC2 channels
ADC2->CSR &= (uint8_t)(~ADC2_CSR_CH);
//* Disable the ADC2 interrupts
ADC2->CSR &= (uint8_t)(~ADC2_CSR_EOCIE);
//* Configure the data alignment
ADC2->CR2 &= (uint8_t)(~ADC2_CR2_ALIGN);//alineo a la izquierda
//* Clear the external trigger selection bits
ADC2->CR2 &= (uint8_t)(~ADC2_CR2_EXTSEL);
//* Disable the selected external trigger
ADC2->CR2 &= (uint8_t)(~ADC2_CR2_EXTTRIG);
//* Set the selected schmittTrigger
ADC2->TDRL |= (uint8_t)0xFF;    //disable
ADC2->TDRH |= (uint8_t)0xFF;
//* Set the single conversion mode
ADC2->CR1 &= (uint8_t)(~ADC2_CR1_CONT);
//* Clear the prescaler division factor
ADC2->CR1 &= (uint8_t)(~ADC2_CR1_SPSEL);        //Divide por 2
ADC2->CR1 |= 0x20;        //Divide por 4. La frecuencia tiene que ser entre 1 y 4MHZ o 6MHz
//* Turn ON the ADC
ADC2->CR1 |= ADC2_CR1_ADON;

Hay que tener en cuenta que estoy utilizando un XTAL de 16MHz sin PLL

Ahora, para leer cada puerto:

uint16_t Lee_ADC(uint8_t Puerto)
{
    uint16_t Conversion_Value=0;
    /* Select the ADC2 channel */
    ADC2->CSR |= (uint8_t)(Puerto);        //canal 5
    /*Start Conversion */
  ADC2->CR1 |= ADC2_CR1_ADON;    //tiene que estr el bit a 1 y volver a ponerse a 1 para activar la conversión
    while(!(ADC2->CSR & ADC2_CSR_EOC));    //espero a que haya terminado la conversión
    /* Get converted value */
    /* Read MSB first */
    Conversion_Value = ADC2->DRH;
    /* Then read LSB */
    Conversion_Value = ((Conversion_Value<<8)&0xFF00) | ADC2->DRL;
    ADC2->CSR &=(uint8_t)(~ADC2_CSR_EOC);
    return Conversion_Value;
}

Sólo con llamar la función de lectura poniendo un número del 0 al 15 (el número del puerto AD) obtendríamos su lectura.

Hay que tener en cuenta que para iniciar la conversión hay que poner a '1' el bit ADON del CR1 estando a  '1' anteriormente, sino no inicializa la conversión. Por eso en la inicialización pongo //* Turn On the ADC y en la lectura /* Start conversion */