GPIO即通用输入/输出 (General Purpose Input Output)
包括:
两个32位的配置寄存器 GPIOx->CRL,GPIOx->CRH
两个32位的数据寄存器 GPIOx->IDR,GPIOx->ODR
一个32位的 set/reset 寄存器 GPIOx->BSRR
一位16位的 reset 寄存器 GPIOx->BRR
一位32位的锁定寄存器 GPIOx->LCKR
端口的模式包括:
浮空输入(Input floating)—— 即没有上拉电阻和下拉电阻,电压呈不确定性,一般用来做ADC输入用,这样可以减少上下拉电阻对结果的影响
上拉输入(Input pull-up)
下拉输入(Input-pull-down)
开漏输出(Output open-drain)—— 输出逻辑0,则N-MOS激活; 输出逻辑1,端口处于高阻(电阻非常大,但不是断路,此外,P-MOS从未激活)
推挽输出(Output push-pull)—— 输出逻辑0,则N-MOS激活;输出逻辑1,P-MOS激活
复用功能推挽输出(Alternate function push-pull)——片内外设功能(I2C的SCL,SDA)
复用功能开漏输出(Alternate function open-drain)——片内外设功能(USART的TX1,SPI的MOSI,MISO,SCK,SS)
复用开漏输出、复用推挽输出:可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)
注意:I / O端口寄存器被访问为32位字(半字或字节存取是不允许的)
其余具体的可以查看stm3210x 手册
GPIOx->CRL 低位(0-7)端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x00):
GPIOx->CRH 高位(8-15)端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x04):
GPIOx->IDR 端口数据输入寄存器(x = A~ G,该寄存器偏移地址为:0x08):只读,可以读取IO口输入的值
GPIOx->ODR 端口数据输出寄存器(x = A~ G,该寄存器偏移地址为:0x0C):可写可读,可以设置IO口输出的值
GPIOx->BSRR 低位端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x10):0-15位——为1时,可以使ODRx相应的位置1,为0时,无变化 。15-31位——为1时,可以使ODRx相应的位清零,为0时,无变化(注:当set和reset都设置了,则set优先级高)
GPIOx->BSR 低位端口配置寄存器(x = A~ G,该寄存器偏移地址为:0x14): 0-15位——为1时,可以使ODRx相应的位清零,为0时,无变化
注:用BSRR和BRR去改变管脚状态的时候,没有被中断打断的风险,也就不需要关闭中断
GPIOx->LCKR 端口配置锁定寄存器(x = A~ G,该寄存器偏移地址为:0x18):用来锁定对应位的端口位配置,当端口被锁定时,不再有可能修改它的值,直到系统复位。每一个锁都冻结相应的4位控制寄存器(CRL,CRH)
例子:
/*根据高8位的输入电平来决定低8位的输出电平*/
GPIOA->CRL = 0x33333333; //GPIOA.0-GPIO0.7 output push-pull 50MHzGPIOA->CRH = 0x44444444; //GPIOA.8-GPIOA.15 input floating
while(1){if(GPIOA->IDR & 0xff00)GPIOA->ODR = (GPIOA->IDR >> 8) & 0xff;elseGPIOA->ODR = 0;}
-
寄存器
+关注
关注
31文章
5372浏览量
121330 -
STM32
+关注
关注
2273文章
10927浏览量
357844 -
GPIO
+关注
关注
16文章
1217浏览量
52454
原文标题:stm32之GPIO寄存器学习
文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
STM32 BSRR BRR ODR寄存器详情解析
STM32使用BSRR和BRR寄存器快速操作GPIO端口
STM32F4寄存器与IO输入输出学习
![<b class='flag-5'>STM32</b>F4<b class='flag-5'>寄存器</b>与IO输入输出<b class='flag-5'>学习</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化
![<b class='flag-5'>STM32</b>F103系列芯片的地址映射和<b class='flag-5'>寄存器</b>映射原理,<b class='flag-5'>GPIO</b>端口的初始化](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
GPIO寄存器
![<b class='flag-5'>GPIO</b><b class='flag-5'>寄存器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32寄存器点灯
![<b class='flag-5'>STM32</b><b class='flag-5'>寄存器</b>点灯](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
stm32是如何将寄存器值通过标准库写入寄存器的?
![<b class='flag-5'>stm32</b>是如何将<b class='flag-5'>寄存器</b>值通过标准库写入<b class='flag-5'>寄存器</b>的?](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32-GPIO_寄存器版(1)
![<b class='flag-5'>STM32-GPIO</b>_<b class='flag-5'>寄存器</b>版(1)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 GPIO学习
![<b class='flag-5'>STM32</b> <b class='flag-5'>GPIO</b><b class='flag-5'>学习</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
配置STM32寄存器控制GPIO点亮LED
![配置<b class='flag-5'>STM32</b><b class='flag-5'>寄存器</b>控制<b class='flag-5'>GPIO</b>点亮LED](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32F103寄存器配置相关学习 —— GPIO
![<b class='flag-5'>STM32</b>F103<b class='flag-5'>寄存器</b>配置相关<b class='flag-5'>学习</b> —— <b class='flag-5'>GPIO</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论