stm32 freezes during ADC
Try only getting the ADC value in the IRQ handler and letting the main loop do the LCD processing which may be triggering an interrupt that is preempted by the ADC interrupt you are already in, causing a lock.

Maybe make sure your ADC clock is correctly configured.

Maybe try without the interrupt:

    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    while(ADC_GetSoftwareStartConvStatus(ADC1));
    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
    data_adc = ADC_GetConversionValue(ADC1);
    ADC_ClearFlag(ADC1, ADC_FLAG_EOC);