GPIO
一.相关寄存器
片上外设挂载在三条总线上,它们是APB1、APB2(Advanced Peripheral Bus)和AHB(Advanced High-Speed Bus)。APB1挂载低速外设,APB2和AHB挂载高速外设。相应总线的最低地址我们成为总线的基地址,也就是挂载在该总线上的首个外设的基地址。下表列出了各总线地址。
GPIO属于高速外设,挂载到APB2上。GPIO有8组分为A、B、C、D、E、F、G、H,每组有16位。各组的基地址见下表:
为了控制GPIO的行为,每组GPIO有7个相关寄存器,它们都是32位的,在该外设基地址上顺序排列,寄存器的位置可以用相对于该GPIO端口的偏移来描述。比如,对GPIOB来说:
- CRL: 配置寄存器,32位,用于配置低八位引脚的工作模式和速度
- CRH: 配置寄存器,32位,用于配置高八位引脚的工作模式和速度
- IDR: 输入数据寄存器,32位低16位有效,只读,从这里可以读引脚电平
- ODR: 输出数据寄存器,32位低16位有效,可读可写,写这里可以直接控制输出状态
- BSRR: 位设置和清除寄存器,32位,只写,高16位写1清除相应的ODR位,低16位写1设置相应的ODR位。
- BRR: 位清除寄存器,32位低16位有效,只写,写1清除相应的ODR位。
- LCKR: 端口配置锁定寄存器,32位低17位有效,可读可写,位[15:0]用于锁定相应的GPIO端口配置;位[16],锁键,可随时读出,但只可以通过锁键写入序列修改。写入序列:写1->写0->写1->读0->读1。对bit16执行写入序列的操作后,LCKR被锁定,同时由其指定的引脚所对应的CRL,CRH中的设置也被锁定,直至系统复位才能修改。
GPIO端口中的每个位都可以分别设置为多种模式:
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟输入
- 开漏输出
- 推挽输出
- 推挽式复用功能
- 开漏复用功能
typedef enum{
GPIO_Mode_AIN = 0x0, //analog in
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD =