GPIO

GPIO(General Purpose Input/Output), 代表通用输入/输出引脚,在微控制器的大部分引脚都可用于GPIO用途。

GPIO 引脚可配置为输入或输出功能,也可复用为其他外设的功能引脚。作为输入引脚时,单片机内部可读取引脚的外部电平,当作为输出引脚时,单片机可以配置寄存器来输出高/低电平。

如何控制寄存器

通过配置 GPIO 外设寄存器,将GPIO引脚配置成相应的功能。对于普通输入或输出引脚的来说,通常需要关注以下配置:

  • 上拉/下拉
  • 开漏/浮空模式
  • 速度
  • IO模式

当前外设支持库的 GPIO mod 提供了基本的API供使用:

#![allow(unused)]
fn main() {
//! General purpose input/output (GPIO) driver.
//!
//! Output
//!
//! ```rust, ignore
//! let p = hal::init(Default::default());
//! let gpioa = p.GPIOA.split();
//! let mut led = Output::new(gpioa.PA10, PinIoType::PullDown, PinSpeed::Low);
//! ```
//!
//! Input
//! ```rust, ignore
//! let p = hal::init(Default::default());
//! let gpioa = p.GPIOA.split();
//! let key = Input::new(gpioa.PA12, PinPullUpDown::PullUp, PinSpeed::Low);
//! ```
//!
//! AF
//! ```rust, ignore
//! let gpioa = p.GPIOA.split();
//! let _mco_pin = Af::new(
//!    gpioa.PA1,
//!    PinAF::AF15,
//!    PinSpeed::VeryHigh,
//!    PinIoType::PullUp,
//! );
//! Mco::select(clock::McoSelect::SysClk, clock::McoDIV::DIV1);
//! ```
}