Advise: Bạn nên đưa đầy đủ thông tin câu hỏi ngay từ lúc đầu để mình đánh giá được level của bạn và không đi sâu vào các basic questions như ở trên.
Mình vừa đọc thử User Manual của STM32 tại: https://www.st.com/resource/en/reference_manual/dm00119316-stm32f411xc-e-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf
Theo thông tin trong này thì module ADC cần thời gian để lấy mẫu và convert kết quả qua giá trị có thể đọc được. Như vậy, để có thể có được kết quả chính xác trong Interrupt timer, thì bạn cần:
Theo mình nhận định thì interrupt Timer của bạn có thể rơi vào thời điểm mà ADC chưa convert xong nên không đọc được giá trị chính xác.
Một cách tiếp cận hiệu quả hơn là sử dụng interrupt ADC, khi có cập nhật giá trị mới thì interrupt sẽ lưu giá trị vào 1 biến hoặc 1 mảng và cập nhật ở đó. Interrupt timer sẽ đọc latest value của biến hoặc mảng trên và trả về giá trị ngay lập tức thay vì polling.