🌱 STM32 - 5. Ngoại vi GPIO - Registers Level
Ở bài viết STM 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 cho GPIO trong vi điều khiển STM32.
Đầu tiên là thanh ghi cấu hình Clock, như mình đã giới thiệu ở bài STM 3. RCC Configuration Examples. Trước khi muốn cấu hình các thanh ghi ngoại vi GPIO, cần phải cấu hình cấp clock cho ngoại vi tương ứng đó. Xem bài STM 3. RCC Configuration Examples.
👉 Trong Vi điều khiển STM32F401 hỗ trợ các ngoại vi GPIOA/B/C/D/E/H. Chúng đều được cấp xung clock từ bus AHB1. Mỗi port cung cấp cho người dùng 16 pins (0 đến 15).
List thanh ghi cấu hình GPIO có ở trong chương 8 của tài liệu RM:
👉 Về cơ bản, các thanh ghi cấu hình chế độ làm việc cho GPIO đều tổ chức giống nhau, nên mình sẽ chỉ nêu chức năng của từng thanh ghi, còn địa chỉ offset của từng thanh ghi sẽ được nêu trong từng phần, hoặc được tổng hợp lại trong phần 8.4.11. GPIO register map.
💬 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 pins từ 0 đến 15. Mỗi pin sẽ được đại diện bởi 2 bit đặt liền nhau như trong hình.
Bốn chế độ hoạt động của GPIO sẽ được cấu hình như trên. Các thanh ghi cấu hình chế độ khác đều được tổ chức giống như thanh ghi GPIOx_MODER.
💬 Thanh ghi GPIOx_OTYPER - Output Type Register
Thanh ghi này dùng để cấu hình chế độ đầu ra của pin tương ứng (trong chế độ output), đó là Push-Pull hay Open-Drain. Mỗi pin sẽ chỉ cần một bit để làm việc này.
💬 Thanh ghi GPIOx_OSPEEDR - Output Speed Register
Thanh ghi này dùng để cấu hình tốc độ cho các pin tương ứng (tổ chức thanh ghi này giống thanh ghi GPIOx_MODER.
💬 Thanh ghi GPIOx_PUPDR - Pull-up/Pull-down Register|
Thanh ghi này dùng để cấu hình Pull-up/Pull-down cho pin tương ứng.💬 Thanh ghi IDR - Input Data Register
💬 Thanh ghi ODR - Output Data Register
Thanh ghi này dùng để đọc/ghi giá trị logic tương ứng trên các pin (thường dùng để đọc/ghi giá trị tương ứng trên pin trong chế độ output).
💬 Thanh ghi GPIOx_BSRR - bit Set/Reset Register
Thanh ghi này dùng để ghi/xóa các bit tương ứng trên các pin (dùng cho chế độ Output). Chức năng của ODR có thể giống với thanh ghi này, tuy nhiên, GPIOx_BSRR thường được sử dụng hơn.
💬 Thanh ghi GPIOx_AFRL/GPIOx_AFRH - Alternate Function Low/High Register
Hai thanh ghi này sử dụng cho chế độ Alternate Function, tức là dùng các chân GPIO với chức năng khác như USART, TIMER, ADC, ... Thanh ghi này cũng như chế độ Alternate Function sẽ được giới thiệu sau, trong các bài về Peripheral tương ứng.
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