Tôi đã tìm thấy câu trả lời này từ STM32 Hiểu về Cài đặt GPIO
- GPIO_PuPd (Kéo lên / Kéo xuống)
Trong các mạch kỹ thuật số, điều quan trọng là các đường tín hiệu không bao giờ được phép "nổi". Đó là, họ cần phải luôn ở trạng thái cao hoặc trạng thái thấp. Khi nổi, trạng thái không xác định và gây ra một vài loại vấn đề khác nhau.
Cách để sửa lỗi này là thêm một điện trở từ đường tín hiệu vào Vcc hoặc Gnd. Theo cách đó, nếu đường dây không được tích cực điều khiển cao hay thấp, điện trở sẽ khiến điện thế bị trôi đến một mức đã biết.
ARM (và các bộ vi điều khiển khác) có mạch tích hợp để thực hiện việc này. Bằng cách đó, bạn không cần thêm một phần khác vào mạch của mình. Ví dụ: nếu bạn chọn "GPIO_PuPd_UP", thì việc thêm một điện trở giữa đường tín hiệu và Vcc là tương đương.
- GPIO_OType (Loại đầu ra):
Đẩy-kéo: Đây là loại đầu ra mà hầu hết mọi người nghĩ là "tiêu chuẩn". Khi đầu ra xuống thấp, nó sẽ chủ động "kéo" xuống đất. Ngược lại, khi đầu ra được đặt ở mức cao, nó sẽ chủ động "đẩy" về phía Vcc. Đơn giản hóa, nó trông như thế này:
Mặt khác, đầu ra Open-Drain chỉ hoạt động theo một hướng. Nó có thể kéo pin về phía mặt đất, nhưng nó không thể đẩy nó lên cao. Tưởng tượng hình ảnh trước đó, nhưng không có MOSFET phía trên. Khi nó không được kéo xuống đất, MOSFET (phía dưới) chỉ đơn giản là không dẫn điện, khiến đầu ra nổi.
Đối với loại đầu ra này, cần phải có một điện trở kéo lên được thêm vào mạch, điều này sẽ làm cho đường dây lên cao khi không được điều khiển thấp. Bạn có thể thực hiện việc này với một phần bên ngoài hoặc bằng cách đặt giá trị GPIO_PuPd thành GPIO_PuPd_UP.
Cái tên này xuất phát từ thực tế là cống của MOSFET không được kết nối nội bộ với bất cứ thứ gì. Loại đầu ra này còn được gọi là "collector mở" khi sử dụng BJT thay vì MOSFET.
Về cơ bản, điều này kiểm soát tốc độ xoay (thời gian tăng và thời gian rơi) của tín hiệu đầu ra. Tốc độ quay càng nhanh, tiếng ồn phát ra từ mạch càng nhiều. Đó là một thực hành tốt để giữ tốc độ quay chậm, và chỉ tăng nó nếu bạn có một lý do cụ thể.