GPIO

本文详细介绍了GPIO的相关寄存器,包括配置寄存器、输入数据寄存器、输出数据寄存器等,并阐述了如何打开GPIO端口时钟、设置工作模式以及进行IO操作。还探讨了IO复用和重映射的概念,以及AFIO寄存器在事件控制、复用重映射和中断配置中的作用。
摘要由CSDN通过智能技术生成

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的行为,每组GPIO有7个相关寄存器,它们都是32位的,在该外设基地址上顺序排列,寄存器的位置可以用相对于该GPIO端口的偏移来描述。比如,对GPIOB来说:
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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值