这篇的目的主要是介绍GPIO,以便后续相关编程好理解各种寄存器以及数值的意义
总目录:目录
GPIO功能描述
- 每个GPI/O端口都有 7 个寄存器,包括两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOX_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)
- 通过软件,GPIO端口每个位可以配置成多种模式:
- 输入浮空
- 输入上拉
- 输入下拉
- 模拟输入
- 开漏输出
- 推挽式输出
- 推挽式复用功能
- 开漏式复用功能
推挽输出可以输出强高低电平,连接数字器件
开漏输出只能输出强低电平,高电平需外部上拉电阻,输出端相当于三极管集电极,适合于做电流型驱动
- 每个I/O位可以自由编程,但必须按32位字被访问(不允许字节或半字),GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO的读/更改独立访问,这样在读和更改访问之间产生IRQ是不会发生危险
IRQ为 Interrupt ReQuest的缩写,中文可译为中断请求.
“紧急事件”须向处理器提出申请(发一个电脉冲信号),要求“中断”,即要求处理器先停下“自己手头的工作”先去处理“我的急件”,这一“申请”过程,称——中断请求。
GPIO寄存器描述
关于MODE和CNF,MODE配置输入/输出及其速度,CNF选择八种模式
端口配置低寄存器(GPIOx_CRL)
端口配置高寄存器(GPIOx_CRH)
端口输入数据寄存器(GPIOx_IDR)
端口输出数据寄存器(GPIOx_ODR)
端口置位/复位寄存器(GPIOx_BSRR)
端口复位寄存器(GPIOx_BRR)
端口配置锁定寄存器(GPIOx_LCKR)
GPIO点灯参考代码
#define LED_REG (*(volatile unsigned int *)(0x40011C00|0x10))//(基地址|偏移地址)具体数值看数据手册,0x10是BSRR寄存器
int main()
{
while(1)
{//这里11值得11引脚,可根据实际需要进行调换
LED_REG |= 1<<11;//位或,将第11位置1
//根据数据手册,位15:0为1时,设置对应ODRy位位1
Delay(100);
LED_REG &= ~(1<<11);//与或,~表示取反,将第11位置0,位15:0为0时,对对应ODRy位无影响
//其实上句可以不要,置位之后硬件会自动设置BSRR清零
LED_REG |= 1<<(11+16);//位11移16位,对应的是BRy,为1时,清楚对应ODRy位为0
Delay(100);
}
}