🌱 STM32 - 6. GPIO Examples - Blinked LED
Ví dụ kinh điển khi thực hành GPIO ở bất cứ dòng vi điều khiển nào đó là nút bấm điều khiển led, giúp người học hiểu về các cấu hình input và output trong một vi điều khiển. Với STM32 chúng ta còn 2 chế độ: Alternate Function sẽ được giới thiệu trong các ngoại vi khác, Analog sẽ được giới thiệu trong bài về ADC. Vì vậy, bài viết này mình sẽ lấy ví dụ với User Button (GPIOC.13) và User Led (GPIOA.5) trên Board NUCLEO STM32F401.
Trước khi cấu hình cho ngoại vi GPIO, cần định nghĩa các thanh ghi & quan trọng nhất là cấu hình cấp xung Clock cho ngoại vi, ở đây là GPIOA, và GPIOC. Cần cấu hình bằng thanh ghi AHB1_ENR. (Ở đây mình mặc định dùng nguồn cấp clock là HSI). Để học tốt bài học này, các bạn cần nắm được kỹ thuật Bitwise.
👉 Define địa chỉ các thanh ghi cần thiết:
👉 Tiếp theo, cấu hình các thanh ghi, các bạn có nhiều các, nhưng phổ biến nhất vẫn là sử dụng Struct để quản lý. Dưới đây là các thanh ghi RCC, các bạn cũng có thể làm tương tự với 2 thanh ghi PA và PC (Cái này tự làm cho biết 😂😂😂).
👉 Cấu hình Clock cho GPIOA và GPIOC
Tham khảo RM - thanh ghi AHB1_ENR để cấu hình cấp clock cho 2 ngoại vi này.
👉 Cấu hình User Led (GPIOA.5) = OUTPUT
Để cấu hình được GPIO 2 chế độ INPUT và OUTPUT, các bạn cần xem lại bài STM 5. GPIO Registers và STM 4. GPIO Overview để nắm được các thanh ghi và chế độ của ngoại vi GPIO trong STM32.
Với việc điều khiển LED, ta thường sử dụng mode Push Pull. Với chế độ output thì cần cài đặt thêm tốc độ bằng thanh ghi Speed = Medium Speed.
👉 Cấu hình User Button (GPIOC.13) = INPUT-PULLUP
Các bit của thanh ghi GPIOx_MODER mặc định là 0 nên GPIOC mặc định ở chế độ Input. Để cấu hình Pullup cho chân PC13, ta cần tác động vào bit[26] và bit [27] của thanh ghi GPIOx_PUPDR.
👉 Chương trình chính "Bấm nút đảo Led"
Để kiểm tra nút bấm, chúng ta kiểm tra bit tương ứng trên thanh ghi GPIOx_IDR (Ở đây là bit thứ 13 trên thanh ghi IDR). Nếu bit này bằng 0 tức là nút bấm được bấm.
Để điều khiển Led, chúng ta sử dụng bit tương ứng trên thanh ghi GPIOx_ODR. Ở đây, để đảo Led, chúng ta dùng phép XOR.
Trên đây là ví dụ cơ bản về Led và Button để các bạn nắm được nguyên lý Input/Output cơ bản của ngoại vi GPIO, các bạn nên luyện tập thêm để hiểu rõ hơn về chúng.
Tuyệt vời quá anh ơi.Chi tiết quá
Trả lờiXóaThank em, nhớ thực hành nha :D
Xóahay quá anh, code từ tầng dưới này code lên mới ngộ ra nhiều thứ anh ạ!
Trả lờiXóaThank em đã ủng hộ :D
XóaGiá như biết blog này của anh sớm hơn
Trả lờiXóaGiờ học vẫn chưa muộn mà em ơi 😂😂😂
Xóa