Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

LinkVideo: EXTTIM

Cấu hình PA0 là Mode OutPut cho LED, chân ngắt ngoài PA1 với điện trở kéo
xuống bên trong nối với nút nhấn được kéo lên nguồn. Chọn Mode ngắt là Rising.
Cấu hình chọn Timer2 như hình, với tần số APB1 là 8Mhz, tiến hành chọn PSC =
7999 và ARR = 99, ta được time_base = 100ms
Cấu hình cho phép khối NVIC nhận ngắt EXTI và ngắt TIM2, với độ ưu tiên ngắt
ngoài cao hơn ngắt timer.
Khởi tạo 2 biến cục bộ với kiểu int lần lượt là LedMode để cập nhật trạng thái của
Led (vì ban đầu LED chớp tắt 100ms nên khởi tạo ban đầu LedMode = 1) và biến
cnt để đếm.
Define các giá trị LED100MS và LED300MS để viết code dễ dàng hơn.

Gọi lệnh HAL_TIM_Base_Start_IT(&htim2) để bắt đầu ngắt TIM2


Ở file main.c tab Functions. Gọi hàm HAL_TIM_PeriodElapsedCallback và
HAL_GPIO_EXTI_Callback như hình trên.

Hàm HAL_TIM_PeriodElapsedCallback:

 Trong hàm này, chúng ta kiểm tra xem biến LedMode có đang ở chế độ
LED nhấp nháy mỗi 100ms không.
 Nếu LedMode là LED100MS, nghĩa là chế độ nhấp nháy 100ms, chúng ta
sử dụng hàm HAL_GPIO_TogglePin
 Nếu LedMode không phải là LED100MS, chúng ta tăng biến cnt lên mỗi lần
hàm được gọi. Khi cnt đạt đến giá trị của LED300MS, nghĩa là đã qua
300ms, chúng ta thực hiện chuyển đổi trạng thái của LED. Sau đó, đặt cnt về
0 để bắt đầu đếm lại từ đầu.
Hàm HAL_GPIO_EXTI_Callback:

 Trong hàm này, chúng ta kiểm tra xem LedMode đang ở chế độ nào.
 Nếu LedMode là LED100MS (đang ở chế độ nhấp nháy 100ms) ta chuyển
sang chế độ 300ms bằng cách gán LedMode bằng LED300MS.
 Nếu LedMode không phải là LED100MS, nghĩa là đang ở chế độ 300ms,
chúng ta chuyển sang chế độ 100ms bằng cách gán LedMode bằng
LED100MS.

Mô phỏng mạch như hình.

You might also like