Giải mã NGẮT trong STM32

Một khái niệm quan trọng được giải thích theo cách đơn giản nhất!

Hãy tưởng tượng...

Bạn đang làm bài tập về nhà. Đột nhiên điện thoại reo!

👎

Cách 1: Luôn kiểm tra (Polling)

Bạn liên tục liếc nhìn điện thoại xem có ai gọi không. Điều này làm bạn mất tập trung và tốn thời gian!

👍

Cách 2: Dùng Ngắt (Interrupt)

Bạn tập trung làm bài. Khi điện thoại reo, bạn mới dừng lại để nghe. Hiệu quả và thông minh hơn nhiều!

Vi điều khiển STM32 cũng hoạt động theo cách thứ hai, đó chính là Ngắt.

Vậy Ngắt là gì?

Ngắt là một cơ chế cho phép vi điều khiển tạm dừng công việc chính đang làm để xử lý một sự kiện đột xuất, sau đó quay lại công việc chính như chưa có gì xảy ra.

Hành trình 5 bước của một Ngắt

Khi một sự kiện xảy ra, STM32 sẽ làm gì?

1. Sự kiện xảy ra ⚡

Một nút được nhấn, cảm biến có tín hiệu, hoặc timer đếm xong.

2. Yêu cầu được chấp nhận ✅

Bộ xử lý kiểm tra và xác nhận yêu cầu ngắt là hợp lệ.

3. Tạm dừng chương trình chính ⏸️

Lưu lại trạng thái công việc đang làm dở (giống như đánh dấu trang sách).

4. Thực thi trình phục vụ ngắt (ISR) 🏃💨

Chạy một đoạn code đặc biệt để xử lý sự kiện (ví dụ: bật đèn LED).

5. Quay lại chương trình chính ▶️

Sau khi xử lý xong, quay lại tiếp tục công việc đang làm dở.

Ngắt giúp CPU hoạt động hiệu quả

CPU không lãng phí thời gian vào việc chờ đợi.

Phân bổ thời gian của CPU

Với cơ chế ngắt, CPU có thể dành gần như toàn bộ thời gian cho các tác vụ chính. Nó chỉ tạm dừng một khoảng rất nhỏ để xử lý các sự kiện đột xuất khi chúng thực sự xảy ra. Điều này giúp tối ưu hóa hiệu năng và khả năng phản hồi của hệ thống.

Một số loại Ngắt phổ biến

Bạn sẽ thường xuyên gặp những "sự kiện" này.

🖱️

Ngắt ngoài (EXTI)

Khi có tín hiệu từ bên ngoài tác động lên một chân GPIO, ví dụ như nhấn nút.

Ngắt Timer

Khi bộ đếm thời gian (Timer) đếm xong hoặc bị tràn, hữu ích cho các tác vụ định thời.

💬

Ngắt giao tiếp

Khi nhận hoặc gửi dữ liệu xong qua các cổng giao tiếp như UART, SPI, I2C.