3.1 Ngoại vi đa dụng
3.1.1 Các cổng I/O đa dụng
STM32 có 5 cổng I/O đa dụng với 80 chân điều khiển.
Mỗi chân điều khiển có thể cấu hình như là GPIO hoặc có chức năng thay thế khác. Hoặc mỗi chân có thể cùng lúc là nguồn ngắt ngoại.
Các cổng I/O được đánh số từ A->E và mức áp tiêu thụ ở 5V. Nhiều chân ngoại có thể được cấu hình như là Input/Output tương tác với các thiết bị ngoại vi riêng của người dùng như USART hay I2C. Thêm nữa có thể cấu hình các chân này như là nguồn ngắt ngoại kết hợp với cổng GPIO khác.
Mỗi cổng GPIO đều có 2 thanh ghi 32-bit điều khiển. Như vậy ta có 64- bit để cấu hình 16 chân của một cổng GPIO. Như vậy mỗi chân của cổng GPIO sẽ có 4 bit để điều khiển: 2 bit sẽ quy định hướng ra vào dữ liệu: input hay output, 2 bit cịn lại sẽ quy định đặc tính dữ liệu.
Configuration CNF1 CNF0 MOD1 MOD0
Analog Input 0 0
00 Input Floating(Reset state) 0 1
Input Pull-up 1 0
Input Pull-down 1 0
Output Push-Pull 0 0 00:Reserved
01:10Mhz 10:2Mhz 11:50Mhz Output Open-drain 0 1 AF Push-Pull 1 0 AF Open-drain 1 1
Hình 3.1 Cấu trúc cổng I/O
Sau khi cổng được cấu hình, ta có thể bảo vệ các thơng số cấu hình bằng cách kích hoạt thanh ghi bảo vệ. Trong thanh ghi này, mỗi chân trong cổng đều có một bit bảo vệ tương ứng để tránh các thay đổi vô ý ở các 4 bit cấu hình. Để kích hoạt chế độ bảo vệ, ta ghi lần lượt giá trị 1,0,1 vào bit 16:
Sau đó đọc lại bit 16 liên tục 2 lần, nếu giá trị trả về lần lượt là 0 và 1 thì thiết lập khóa đã hồn thành
Để dễ dàng đọc và ghi dữ liệu trên cổng GPIO, STM32 cung cấp 2 thanh ghi Input và Output data. Kỹ thuật bit banding được hỗ trợ nhằm thực hiện các thao tác bit trên thanh ghi dữ liệu. Thanh ghi 32-bit Set/Reset, với 16 bit cao ánh xạ tới mỗi chân của cổng điều khiển reset khi được thiết lập giá trị 1. Tương tự vậy 16 bit thấp điều khiển Set khi được gán giá trị 1.