Using Arduino IDE 1.8.x and STM32 Core 2.1 with an STM32F411CEU6 Black Pill.
I need to read an analog value from inside an Interrupt Service Routine that runs just once per second (the constraint is that the analog value must be read 2µs +/- 500ns after the interrupt itself). But I am using analogRead() already inside loop() at various points.
So my questions:
1. If I call analogRead() inside the ISR and the interrupt occurs while another analogRead() call was executing in loop(), will this completely mangle either or both analogRead() calls? Or does analogRead() disable interrupts while executing?
2. I have read that analogRead() as implemented is somewhat inefficient, because the ADC has to be completely reconfigured for each call. Does anybody know how long analogRead() takes to run on a 80 ~ 100MHz STM32F4? I am asking because I simultaneously use two serial interfaces, one at 115200 baud and the other at 38400 baud, and I was wondering if an excessively long analogRead() would cause the loss of some character(s)?
3. Is there a simple example of reading an ADC channel using HAL code, which is supposedly faster, and how long does that take? What special requirement would that impose on my code? Is it worth the extra programming/debugging effort?
I apologize if these sound like basic questions. I haven't really had much experience with analogRead() until now.

Thanks for any help!