Ngắt trong vi điều khiển STM32 là gì?
Interrupt là gì?
Xin chào các bạn,sau đây mình xin giới thiệu chức năng ngắt trong STM32
Giống như Timer,Ngắt là một module rất quan trọng của STM32,sử dụng ngắt giúp chúng ta không phải mất thời gian kiểm tra liên tục đoạn chương trình nào đó,ngoài ra chúng ta có thể sử dụng ngắt để đồng thời cho STM32 cùng 1 lúc làm"nhiều nhiệm vụ" .
Khi điều kiện ngắt xảy ra,vi điều khiển sẽ tạm dừng chương trình đang thực hiện để nhảy tới chương trình ngắt,sau khi thực hiện xong chương trình ngắt,STM32 tiếp tục thực hiện các chương trình trước đó đang làm.
Chú ý:Chương trình ngắt không có đối số truyền vào và cũng không được gọi trực tiếp từ hàm main() hay một chương trình con khác.
Để hiểu rõ hơn về Ngắt(Interrupt) chúng ta cùng xem ví dụ sau:
void main() {
while(1) {
LED1=1;
delay_ms(1000);
LED1=0;
delay_ms(1000);
if(button)
LED2=1;
else
LED2=0;
}
}
Chúng ta có thể thấy: LED1 sẽ luôn nhấp nháy mỗi 1s.
Khi ta bấm nút (button) thì LED2 đôi khi sẽ không sáng.Nguyên nhân là sao? Do trong ngôn ngữ C/C++ các hàm đều thực hiện theo nguyên tắc tuần tự (Từ trên xuống dưới):
Giả sử hàm main () đang thực hiện lệnh:
LED1=1;
delay_ms(1000);
Lúc này,dù ta có bấm nút thì LED2 cũng sẽ không sáng do chương trình đang trong hàm delay_ms().
Để khắc phục,ta phải sử dụng Ngắt(Interrupt).
Ở bài sau mình sẽ hướng dẫn các bạn cách sử dụng Ngắt trong STM32.
XIn cảm ơn,hẹn gặp lại.
thank
Trả lờiXóa