Làm sao để biết yêu cầu ngắt được tạo ra từ chân GPIO nào khi chương trình của bạn sử dụng nhiều chân External Interrupt? Trong bài viết này, tôi sẽ giúp các bạn giải quyết được vấn đề trên với các ví dụ cụ thể. Tôi sử dụng vi điều khiển STM32F103C8T6, cấu hình bằng STM32CubeMX sau đó code bằng Keil C IDE, sử dụng thư viện HAL.
- Thiếc Hàn – Vật liệu không thể thiếu trong lĩnh vực công nghiệp
- IC 555: Hiểu Về Cấu Tạo Nguyên Lý Và Ứng Dụng
- Cảm biến laser: Khám phá ý nghĩa và ứng dụng trong công nghiệp hiện đại
- Cách đo và kiểm tra Mosfet sống hay chết bằng đồng hồ vạn năng đơn giản
- Cách đọc giá trị, thông số tụ điện chi tiết từ A-Z
Contents
Sử dụng External Interrupt trên STM32
Ví dụ mình có 02 nút bấm ở chân PA1 và PA2 khai báo External Interrupt, sử dụng trở kéo lên để định mức logic khi không nhấn nút, sử dụng sườn xuống để kích hoạt ngắt. Mình cấu hình thêm chân PC13 là GPIO OUTPUT để điều khiển LED.
Bạn đang xem: Cách phân biệt các chân sinh ra ngắt trên vi điều khiển STM32
READ MORE:
Cách phân biệt chân ngắt
Khi sinh code ra thì sẽ có các hàm liên quan đến ngắt ngoài trong thư viện HAL như sau:
Trong file stm32f1xx_hal_gpio.c
Trong file stm32f1xx_it.c
Bình thường, với 1 chương trình đơn giản, các bạn vào file stm32f1xx_hal_gpio.c
copy cả phần định nghĩa hàm Callback ra file main.c
, bỏ đi từ khóa weak
và viết chương trình phục vụ ngắt vào đấy là xong. Ví dụ khi phát hiện nhấn nút (có sườn xuống tại bất 1 trong 2 chân đã khai báo) thì đảo trạng thái của LED.
Nếu bài toán không phải là đảo LED khi nhấn bất kì 1 trong 2 nút bấm mà là nhấn nút PA1 thì bật LED còn nhấn nút PA2 thì tắt LED thì các bạn phải trả lời được câu hỏi: Làm sao để có thể phân biệt được chân nào đang sinh ra ngắt? Có 2 cách:
Cách 1: Sử dụng hàm Callback
Sử dụng hàm Callback như trên, tuy nhiên trong hàm Callback các bạn kiểm tra xem chân nào đang được truyền vào hàm thì chính là ngắt tại chân đó. Ví dụ:
Cách 2: Viết nội dung ngắt riêng
Xem thêm : Top 3 mạch hạ áp 24V xuống 12V bạn cần biết
Viết nội dung ngắt riêng cho từng line ngay tại các hàm phục vụ ngắt theo line trong file thư viện stm32f1xx_it.c
Xem thêm: Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32 tại đây. Nếu có bất kì thắc mắc gì, hãy để lại bình luận.
Chúc các bạn thành công!
Nhóm TAPIT ARM R&D
Nguồn: https://cite.edu.vn
Danh mục: Học tập