Author: Cong Neb
Alias: Dark Neb
Studied at: SET BKHN K57
Nếu copy tài liệu: Nhớ ghi nguồn tác giả..Tks
Các Register của GPIO
__IO uint32_t MODER
__IO uint32_t OTYPER
__IO uint32_t OSPEEDR
__IO uint32_t PUPDR
__IO uint32_t IDR
__IO uint32_t ODR
__IO uint16_t BSRRL
__IO uint16_t BSRRH
__IO uint32_t LCKR
__IO uint32_t AFR
Các steps để sử dụng GPIO Driver...
1. Enable the GPIO AHB clock (RCC: Reset Control Clock)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx,ENABLE);
GPIOx: Port mà bạn muốn sử dụng.... Eg : GPIOA/GPIOC...etc
Chia sẻ kiến thức Electronic,Coding,Network Security and Telecommunication
Hiển thị các bài đăng có nhãn gpio. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn gpio. Hiển thị tất cả bài đăng
Thứ Sáu, 15 tháng 3, 2019
Thứ Tư, 9 tháng 1, 2019
[Học ARM] Lập trình GPIO In/Out của vi điều khiển – STM32
General-purpose Input/Output (GPIO) rất phổ biến, là một chức năng ngoại vi cơ bản của mỗi loại vi điều khiển, bao gồm các chân đầu vào và chân đầu ra, có thể được điều khiển bởi người dùng. Nó tương tự với các dòng vi điều khiển 8bit như AVR hoặc PIC. Không giống như những dòng vi điều khiển 8bit, chỉ có 8 chân IO trên 1 port thì ở các vi điều khiển 32bit, có đến 16 chân IO trên 1 port. Cụ thể đối với chip STM32F103C8Tx gồm có 3 Port chính đó là GPIOA, GPIOB, GPIOC. Không phải tất cả các port đều có 16 chân, chỉ riêng GPIOA, GPIOB trên kit thì có đủ 16 chân GPIO.
Tiếp theo chúng ta đến phần cấu trúc 1 chân GPIO của chip:

Có 2 khối điều khiển khác nhau (khung hình nét đứt) như ở hình trên
– Output
– Input và các điều khiển đầu ra khác
Chức năng của GPIO bao gồm:

Bài viết này sẽ hướng dẫn về chức năng Output states: Output push-pull. Sau đây sẽ là sơ lược về cấu trúc phần cứng và khối điều khiển Output.
Tiếp theo chúng ta đến phần cấu trúc 1 chân GPIO của chip:

Có 2 khối điều khiển khác nhau (khung hình nét đứt) như ở hình trên
– Output
– Input và các điều khiển đầu ra khác
Chức năng của GPIO bao gồm:

Bài viết này sẽ hướng dẫn về chức năng Output states: Output push-pull. Sau đây sẽ là sơ lược về cấu trúc phần cứng và khối điều khiển Output.

1. Các thanh ghi dữ liệu:
Bit set/reset register:
Ở mỗi chân general-purpose I/O port đều có 2 thanh ghi cấu hình 32 bit (GPIOx_CRL, GPIO_CRH: Control Register High, Control Register Low):
– Thanh ghi 32 bit dùng để set/reset các bit ở các chân IO (GPIOx_BSRR: Bit Set Reset Register)
– Thanh ghi 16 bit reset các bit ở các chân IO (GPIOx_BRR: Bit Reset Register) với x là các port của vi điều khiển.
Output data register:
Dữ liệu sau khi các bit đã được set/reset ở thanh ghi trên sẽ được truyền sang thanh ghi dữ liệu đầu ra 32bit (GPIOx_ODR: Output data register) và truyền đến khối điều khiển để xuất mức tín hiệu cho chân IO. Ngoài ra đối với thanh ghi này, chúng ta có thể đọc dữ liệu để xem trạng thái hiện tại của các chân IO đang ở mức “1” hoặc mức “0”.
2.Cách xuất mức tín hiệu output thông qua khối CMOS:
Ở push-pull mode:
Cấu hình chân I/O là ngõ ra, khi output control = 0 thì P-MOS sẽ dẫn, chân I/O sẽ nối VDD, còn khi output control = 1 thì N-MOS dẫn, chân I/O được nối VSS.
Khi ghi các bit Reset vào thanh ghi GPIOx_BSRR hoặc GPIOx_BRR dữ liệu sẽ được truyền sang thanh ghi output và đẩy tới khối điều khiển. Đầu ra của P-MOS sẽ là mức 1 vì ở trước P-MOS có 1 cổng đảo tín hiệu và N-MOS sẽ là mức 0, thì lúc này P-MOS sẽ được kích và chân IO có tín hiệu mức “1”:

Ngược lại, khi ghi các bit Set vào thanh ghi GPIOx_BSRR dữ liệu sẽ được truyền sang thanh ghi output và đẩy tới khối điều khiển. Đầu ra của P-MOS sẽ là mức 0 vì ở trước P-MOS có 1 cổng đảo tín hiệu và N-MOS sẽ là mức 1, thì lúc này N-MOS sẽ được kích và chân IO có tín hiệu mức “0”:

Chúng ta sẽ sử dụng CubeMX để sinh code và lập trình trên môi trường KeilC-V5. Khi sinh code, chúng ta sẽ làm việc dựa trên lớp thư viện HAL-Hardware Abstraction Layerr. Thư viện này được xây dựng dựa trên các thư viện tiêu chuẩn (Std) của STM32, để tiếp cận được nhanh chóng dòng vi điều khiển này thì chúng ta sẽ không đi quá sâu vào việc set/reset các bit ở trong thanh ghi. Mà sử dụng phần mềm CubeMX để sinh code và sử dụng các hàm GPIO có sẵn trong thư viện HAL.
Bit set/reset register:
Ở mỗi chân general-purpose I/O port đều có 2 thanh ghi cấu hình 32 bit (GPIOx_CRL, GPIO_CRH: Control Register High, Control Register Low):
– Thanh ghi 32 bit dùng để set/reset các bit ở các chân IO (GPIOx_BSRR: Bit Set Reset Register)
– Thanh ghi 16 bit reset các bit ở các chân IO (GPIOx_BRR: Bit Reset Register) với x là các port của vi điều khiển.
Output data register:
Dữ liệu sau khi các bit đã được set/reset ở thanh ghi trên sẽ được truyền sang thanh ghi dữ liệu đầu ra 32bit (GPIOx_ODR: Output data register) và truyền đến khối điều khiển để xuất mức tín hiệu cho chân IO. Ngoài ra đối với thanh ghi này, chúng ta có thể đọc dữ liệu để xem trạng thái hiện tại của các chân IO đang ở mức “1” hoặc mức “0”.
2.Cách xuất mức tín hiệu output thông qua khối CMOS:
Ở push-pull mode:
Cấu hình chân I/O là ngõ ra, khi output control = 0 thì P-MOS sẽ dẫn, chân I/O sẽ nối VDD, còn khi output control = 1 thì N-MOS dẫn, chân I/O được nối VSS.
Khi ghi các bit Reset vào thanh ghi GPIOx_BSRR hoặc GPIOx_BRR dữ liệu sẽ được truyền sang thanh ghi output và đẩy tới khối điều khiển. Đầu ra của P-MOS sẽ là mức 1 vì ở trước P-MOS có 1 cổng đảo tín hiệu và N-MOS sẽ là mức 0, thì lúc này P-MOS sẽ được kích và chân IO có tín hiệu mức “1”:

Ngược lại, khi ghi các bit Set vào thanh ghi GPIOx_BSRR dữ liệu sẽ được truyền sang thanh ghi output và đẩy tới khối điều khiển. Đầu ra của P-MOS sẽ là mức 0 vì ở trước P-MOS có 1 cổng đảo tín hiệu và N-MOS sẽ là mức 1, thì lúc này N-MOS sẽ được kích và chân IO có tín hiệu mức “0”:

Chúng ta sẽ sử dụng CubeMX để sinh code và lập trình trên môi trường KeilC-V5. Khi sinh code, chúng ta sẽ làm việc dựa trên lớp thư viện HAL-Hardware Abstraction Layerr. Thư viện này được xây dựng dựa trên các thư viện tiêu chuẩn (Std) của STM32, để tiếp cận được nhanh chóng dòng vi điều khiển này thì chúng ta sẽ không đi quá sâu vào việc set/reset các bit ở trong thanh ghi. Mà sử dụng phần mềm CubeMX để sinh code và sử dụng các hàm GPIO có sẵn trong thư viện HAL.
Đăng ký:
Bài đăng (Atom)