Cách sử dụng interrupt

thường thì các dự án công trình lập trình vi điều khiển và tinh chỉnh tinh vi những áp dụng Interrupt (Ngắt). Bài viết đã lí giải các bạn sử dụng Interrupt GPIO ESP32.

Bạn đang xem: Cách sử dụng interrupt


Interrupts bên trên ESP32

ESP32 tích hợp 32 khe interrupt trên mỗi core, từng interrupt đều phải sở hữu thông số kỹ thuật độ ưu tiên khăng khăng. cũng có thể chia thành 2 các loại interrupt.

Hardware Interrupts – Được kích hoạt từ bỏ những sự kiện phía bên ngoài, ví dụ: GPIO, Touch

Software Interrupts – Được kích hoạt trường đoản cú những sự kiện bên phía trong, ví dụ:Timer, Watchdog.

Interrupt GPIO ESP32 Pin

Trên ESP32, chúng ta cũng có thể khai báo một hàm nhưng mà sẽ tiến hành call Khi GPIO bao gồm sự biến hóa nấc xúc tích.

Tất cả các chân GPIO của ESP32 số đông hoàn toàn có thể được áp dụng làm chân interrupt ngõ vào.

*
*
*
*

Giải thích hợp code

Ban đầu, chúng ta knhị báo một struct mang tên Button. Struct này lưu những biến chuyển là trang bị từ bỏ GPIO, số lần nút ít nhấn tâm trạng nút ít nhấn.

Xem thêm: Cho Hỏi Cách Đục Lỗ Trong Diablo 2 Chuẩn Nhất, Game Hay, Nhưng Mình Gà Quá

struct Button const uint8_t PIN; uint32_t numberKeyPresses; bool pressed;;Tiếp theo bọn họ khải báo một biến đổi struct Button, máy tự GPIO18, tần số nút nhấn0tinh thần nút ít nhấnfalse.

Button button1 = 18, 0, false;Chúng ta knhị báo một hàm ISR với thuốc tính IRAM_ATTR

Trong hàm ISR, triển khai tăng dần số lần thừa nhận và đổi khác tâm trạng nút nhấn thành true

void IRAM_ATTR isr() button1.numberKeyPresses += 1; button1.pressed = true;Trong hàm Setup(), chúng ta khởi chế tạo tiếp xúc Serial và GPIO vật dụng 18 là ngõ vào bao gồm điện trsống vuốt lên.

Tiếp kia, ta báo cho ESP32 biết rằng Lúc có interrupt FALLING tại chân D18 hàm isr sẽ được điện thoại tư vấn.

Serial.begin(115200);pinMode(button1.PIN, INPUT_PULLUP);attachInterrupt(button1.PIN, isr, FALLING);Trong Loop(), họ dễ dàng và đơn giản chỉ chất vấn tâm lý nút ít đã có được nhấn và in ra mốc giới hạn nút ít được nhận.

if (button1.pressed) Serial.printf("Button 1 has been pressed %u times ", button1.numberKeyPresses); button1.pressed = false;Trong Loop(), chúng ta kiểm tra thời hạn chương trình đang chạy millis(), trường hợp thời hạn này to hơn 1 phút ít thì chân D18 có khả năng sẽ bị xóa interrupt detachInterrupt().

static uint32_t lastMillis = 0;if (millis() - lastMillis > 60000) lastMillis = millis(); detachInterrupt(button1.PIN); Serial.println("Interrupt Detached!");

Kết luận

Interrupt là 1 trong tuấn kiệt không thể thiếu trên các vi tinh chỉnh, Tuy dễ dàng và đơn giản mà lại giải pháp sử dụng sẽ khác biệt đối với mỗi một số loại chip. Hy vọng bài viết hỗ trợ kỹ năng có ích đến chúng ta tiến hành dự án công trình Khi sử dụng Interrupt GPIO ESP32 của bản thân nhanh chóng hơn.