You are on page 1of 12

NGẮT NGOÀI TRONG STM32

Ngọc Tuấn
NGẮT LÀ GÌ
Ngắ t (Interrupt) có thể hiểu là 1 tín hiệ u khẩ n cấ p gử i đến bộ vi xử lý,
yêu cầ u bộ vi xử lý tạ m dừ ng cá c cô ng việc đang thự c hiện để nhảy đến 1
nơi khá c thự c hiệ n mộ t chương trình khá c (cô ng việc khá c). Chương trình
này đượ c gọ i là trình phụ c vụ ngắ t (ISR: Interrupt Service Routine). Sau
khi kết thú c chương trình trong ngắ t. CPU sẽ quay về vị trí trướ c đó để
thự c hiện tiếp nhiệ m vụ cò n đang dang dở .

Ngọc Tuấn
HOẠ T ĐỘ NG CỦ A NGẮT

Hoạ t độ ng củ a ngắ t sẽ xảy ra như sau:


 Thự c hiện nố t lệnh đang thự c hiện
 Dừ ng chương trình chính.
 Thự c thi cá c lệnh trong chương trình ngắ t.
 Quay trở về thự c hiệ n lệnh tiếp theo trong
chương trình chính.

ISR

MAIN MAIN
Ngọc Tuấn
NGẮT NGOÀI

Ngọc Tuấn
NGẮT NGOÀ I
STM32F103 có 16 line ngắt ngoài riêng biệt.
LineX (EXTI0) sẽ chứa ngắt cho các chân Px của các
Port.
Ví dụ: Line0 bao gồm ngắt ở các chân PA0, PB0, …,
Line1 bao gồm các chân PA, PB,…

Các Line0, Line1, Line2, Line3, Line4 sẽ được phân vào


các vector ngắt riêng biệt EXTI0, EXTI1, EXTI2,
EXTI3, EXTI4, còn từ Line5->Line9 sẽ được phân vào
vector ngắt EXTI9_5, Line10->Line15 được phân vào
vector EXTI15_10.

Lưu ý rằng: Mỗi Line chỉ được phép có được 1 chân


ngắt ngoài, nghĩa là nếu đã chọn PA0 làm ngắt thì những
chân 0 của các Port khác không được phép chọn làm ngắt
ngoài.

Ngọc Tuấn
NGẮT NGOÀ I
Khi có sự chuyển đổi mức logic trên chân chân ngắt thì một sự kiện ngắt sẽ sinh ra. Khi đó bộ
NIVC sẽ kiểm tra xem ngắt xảy ra ở line nào để chạy vào chương trình trình ngắt tương ứng.

ISR ISR

MAIN MAIN MAIN

0 1 Ngắt ở chế độ RISING


Tín hiệu ở
chân ngắt 1
Ngắt ở chế độ FALLING
0

Ngọc Tuấn
CẤ U HÌNH NGẮT TRÊ N CUBE
Bước 1: Cấu hình bộ dao động, chế độ debug…

Bước 2: Cấu hình chân ngắt

Ngọc Tuấn
CẤ U HÌNH NGẮT TRÊ N CUBE
Bước 3: Cấu hình chế độ ngắt

GPIO mode: Chọn chế độ bắt tín hiêu để ngắt


• Rising edge trigger detection: Chế độ bắt sườn lên (RISING).
• Falling edge trigger detection: Chế độ bắt sườn xuống (FALLING).
• Rising/Falling edge trigger detection: Chế độ bắt cả sườn lên và xuống.

GPIO Pull-up/Pull-down: Chọn trở nội kéo lên nguồn hay xuống đất.

Ngọc Tuấn
CẤ U HÌNH NGẮT TRÊ N CUBE
Bước 4: Cho phép ngắt và thiết lập ưu tiên ngắt
Vào mục NVIC, tích vào ô Enable và có thể thiết lập ưu tiên
ngắt.

Ngọc Tuấn
CÁ C MỨ C ƯU TIÊ N NGẮT
STM32 có rất nhiều ngắt khác nhau và được quản lí bởi NVIC (Nested Vetor Interrupt
Controller). Giả sử khi có 1 chương trình ngắt đang thực hiện mà lại có 1 ngắt khác yêu
cầu thì điều gì sẽ xảy ra ?
Có 2 loại mức ưu tiên ngắt: Preemption Priority và Sub Priority
• Preemption Priority: càng thấp thì độ ưu tiên càng cao.
• Sub Priority Priority: càng cao thì độ ưu tiên càng cao

Ngọc Tuấn
HOẠ T ĐỘ NG NGẮT LỒ NG NHAU

Khi 2 ngắt xảy ra cùng 1 thời điểm. Ngắt nào có độ ưu tiên cao hơn thì thực hiện trước.

Khi 1 ngắt đang chạy. Nếu có ngắt khác có mức độ ưu


tiên cao hơn được gọi thì sẽ thực hiện ngắt ngắt Ngọc Tuấn
HÀ M XỬ LÍ KHI CÓ NGẮT
Mở file stm32f1xx_it.c
Ngoài ra bạn còn có thể gọi hàm này ra 1 file khác để
xử lí ngắt:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin).

Tìm đến hàm xử lí ngắt.

Ngọc Tuấn

You might also like