🌱 STM32 - 5. Thanh Ghi Ngoại vi GPIO Vi Điều Khiển STM32
Ở bài viết STM32 - 4. GPIO Overview, chúng ta đã tìm hiểu về các chế độ hoạt động của ngoại vi GPIO. Trong bài viết này, chúng ta sẽ tìm hiểu về các thanh ghi sử dụng để cấu hình GPIO trong vi điều khiển STM32.
Cấu hình Clock cho GPIO
Đầu tiên, như đã giới thiệu ở bài STM32 - 3. RCC Configuration Examples, trước khi cấu hình các thanh ghi ngoại vi GPIO, cần phải cấp clock cho ngoại vi tương ứng thông qua thanh ghi RCC.
👉 Trong vi điều khiển STM32F401, các ngoại vi GPIOA, GPIOB, GPIOC, GPIOD, GPIOE và GPIOH đều được cấp xung clock từ bus AHB1. Mỗi port cung cấp 16 pin (từ 0 đến 15).
Danh sách các thanh ghi GPIO
Các thanh ghi cấu hình GPIO được liệt kê trong chương 8 của tài liệu Reference Manual (RM) của STM32F401. Dưới đây là danh sách các thanh ghi chính:
👉 Về cơ bản, các thanh ghi cấu hình chế độ làm việc cho GPIO đều có tổ chức giống nhau. Mình sẽ giải thích chức năng của từng thanh ghi, còn địa chỉ offset cụ thể được liệt kê trong phần 8.4.11. GPIO register map của Reference Manual.
💬 Thanh ghi GPIOx_MODER (x = A...H)
Thanh ghi này dùng để cấu hình chế độ hoạt động cho GPIO, tương ứng với 16 pin từ 0 đến 15. Mỗi pin được đại diện bởi 2 bit liên tiếp.
Bốn chế độ hoạt động của GPIO (Input, Output, Alternate Function, Analog) được cấu hình như hình trên. Các thanh ghi khác cũng thường có cách tổ chức tương tự.
💬 Thanh ghi GPIOx_OTYPER - Output Type Register
Thanh ghi này dùng để cấu hình chế độ đầu ra của pin (trong chế độ Output), chọn giữa Push-Pull hoặc Open-Drain. Mỗi pin chỉ cần 1 bit để cấu hình.
💬 Thanh ghi GPIOx_OSPEEDR - Output Speed Register
Thanh ghi này dùng để cấu hình tốc độ đầu ra cho các pin (trong chế độ Output). Tổ chức của nó giống thanh ghi GPIOx_MODER, với 2 bit cho mỗi pin.
💬 Thanh ghi GPIOx_PUPDR - Pull-up/Pull-down Register
Thanh ghi này dùng để cấu hình Pull-up hoặc Pull-down cho các pin.
💬 Thanh ghi GPIOx_IDR - Input Data Register
Thanh ghi này dùng để đọc giá trị đầu vào của các pin (thường dùng trong chế độ Input).
💬 Thanh ghi GPIOx_ODR - Output Data Register
Thanh ghi này dùng để đọc/ghi giá trị logic trên các pin (thường dùng trong chế độ Output).
💬 Thanh ghi GPIOx_BSRR - Bit Set/Reset Register
Thanh ghi này dùng để ghi/xóa các bit trên các pin (dùng trong chế độ Output). Chức năng của nó tương tự ODR, nhưng GPIOx_BSRR thường được sử dụng hơn vì tính tiện lợi.
💬 Thanh ghi GPIOx_AFRL/GPIOx_AFRH - Alternate Function Low/High Register
Hai thanh ghi này dùng cho chế độ Alternate Function, tức là dùng các chân GPIO với các chức năng khác như USART, TIMER, ADC,... Thanh ghi này và chế độ Alternate Function sẽ được giới thiệu chi tiết trong các bài về các ngoại vi tương ứng sau.
>>>>>> Follow ngay <<<<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊
GPIOx_BSRR thường sử dụng hơn ODR có phải là do tốc độ tác động lên bit nhanh hơn ko anh?
Trả lờiXóaĐúng rồi, BSSR có thể cho tác động lên 32 bit độc lập nên tốc độ của nó nhanh hơn ODR
XóaTrong GPIO e thấy có 2 chế độ Mode là External Interrupt Mode và External Event Mode (sườn lên và sườn xuống) . Vậy sự khác nhau giữa 2 mode này là do đâu ạ?
Trả lờiXóaMode này là mode liên quan đến interrupt em nhé, a sẽ giới thiệu trong bài interrupt, còn output thì chỉ có push pull và open drain thôi nhé
XóaDạ vâng tuyệt vời anh ạ. Anh đá sâu vào thanh ghi ngoại là hiểu lắm ạ.
Trả lờiXóangoại vi ạ, em viết thiếu =))
XóaThank em đã ủng hộ. Cố gắng học tập trên đây nha.
Xóa