🌱 STM32 - 5. Thanh Ghi Ngoại vi GPIO Vi Điều Khiển STM32

🌱 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.

STM32F401 NUCLEO Board

Hình 1: Board STM32F401 NUCLEO với các chân GPIO

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:

GPIO Registers

Hình 1: Danh sách các thanh ghi GPIO trong STM32F401

👉 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.

GPIO_MODER

Hình 2: Cấu trúc thanh ghi GPIOx_MODER

GPIO_MODER Modes

Hình 3: Các chế độ cấu hình trong GPIOx_MODER

    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.

GPIO_OTYPER

Hình 4: Cấu trúc thanh ghi GPIOx_OTYPER

💬 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.

GPIO_OSPEEDR

Hình 5: Các mức tốc độ trong GPIOx_OSPEEDR

💬 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.

GPIO_PUPDR

Hình 6: Các tùy chọn Pull-up/Pull-down trong GPIOx_PUPDR

💬 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).

GPIO_IDR

Hình 7: Cấu trúc thanh ghi GPIOx_IDR

💬 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).

GPIO_ODR

Hình 8: Cấu trúc thanh ghi GPIOx_ODR

💬 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.

GPIO_BSRR

Hình 9: Cấu trúc thanh ghi GPIOx_BSRR

💬 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 😊

7 Nhận xét

  1. 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
    Trả lời
    1. Đú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óa
  2. Trong 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óa
    Trả lời
    1. Mode 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óa
  3. Dạ vâng tuyệt vời anh ạ. Anh đá sâu vào thanh ghi ngoại là hiểu lắm ạ.

    Trả lờiXóa
Mới hơn Cũ hơn
//