I think the clearing should be: ```c ADC_SR(ADC1) &= ~ADC_SR_JEOC; ``` Instead of: ```c ADC_SR(ADC1) = ~ADC_SR_JEOC; ``` If it is broken, then it should probably be fixed in `libopencm3` too.