您的位置 首页 电路

STM32单片机GPIO寄存器

每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO

每个GPIO端口有两个32位装备寄存器(GPIOx_CRL,GPIOx_CRH)别离操控每个端口的高八位和低八位,假如IO口是0-7号的话,则写CRL寄存器,假如IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32方位位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位确定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只要四个:CRH,CRL,IDR,ODR。

数据手册中列出的每个I/O端口的特定硬件特征, GPIO端口的每个位能够由软件别离装备成多种方式。每个I/O端口位能够自在编程,但是I/0端口寄存器有必要按32位字被拜访(不允许半字或字节拜访)。

其他,STM32的每个端口运用前都要将其时钟使能,STM32的GPIO的时钟一致挂接在APB2上,详细的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位别离操控GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值,如翻开PORTA时钟:

RCC->APB2ENR|=1<<2; //使能PORTA时钟

使能外设时钟后,GPIOA的十六位就能够依照设定的状况工作了,之后便是详细设置哪一位了以第八位为例即高位的首位,在GPIOx_CRH寄存器中进行设置,GPIOA的每一位都有该寄存器的四位来设定相应的参数,这四位中的高两位(CNF0,CNF1)设置GPIO的输入输出方式,低两位(MODE0,MODE1)是设置GPIO的输出频率,详细能够参阅STM32参阅手册。

GPIOA->CRH&=0XFFFFFFF0; //清掉PA8本来的设置,一起屏蔽其它端口,不影响其它端口的设置

GPIOA->CRH|=0X00000003;//PA8 推挽输出
十六进制中的3 换成二进制 00 11 前两位00表明推挽输出,11代表输出频率50Mhz,若CRH|=0x4,表明模仿输入方式(ADC用),0x3表明推挽输出方式(作输出口用,50M速率),0x8表明上/下拉输入方式(做输进口用),0xB表明复用输出(运用IO口的第二功用,50M速率)。
这是对一位的操作,当然也能够多位操作,由于STM32对GPIO操作有必要是32位全字操作,设置完成后GPIOA的第8位就能够运用了之后给GPIOA->ODR=0x xxxx xxxx送数据就行了

STM32单片机,有了端口才干和外界联络,学会了端口操控,才干更好地使用外设。树立和外界的联络,发挥本身的长处。
首要介绍一下根本的GPIO相关的寄存器:
1, GPIOX_CRL 低8位端口装备寄存器
这个寄存器主要是对装备管脚是输入仍是输出:
其间1)MODEy[1:0]主要是装备是输入端口仍是输出端口的。装备为输出得时分还能够装备输出的管脚速度等级。
2)CNFy[1:0] 主要是两种方式,在端口装备输入的时分,即MODEy[1:0]位00(输入),用来装备输入的方式,主要是模仿输入,浮空输入,上拉方式和下拉方式。
3)CNFy[1:0]在端口装备为输出的时分,用来操控输入的方式。详细看手册吧。
总得来说,便是MODEy[1:0] 先装备管脚是输入仍是输出,是输入就持续装备CNFy[1:0]来装备输出管脚的衔接方式。要是输出的话,就持续装备MODEy[1:0]的管脚速度速度等级,之后再装备管脚的衔接方式。上拉,下拉,推免,开漏等等。详细运用的时分看看手册就理解了。
2, GPIOX_CRH 高8位端口装备寄存器
和GPIOX_CRH 彻底相同,仅仅端口换成高8位了。不说了,看看就理解了!
3, GPIOX_ODR 端口输出数据寄存器
学过AVR的都知道,输出的时分有输出数据寄存器,STM32也相同。思维COPY过来,就天然知道了GPIOX_ODR是做什么的了。不过要注意的是,这个玩意不能一个位一个位的去操作,仍是51的简略啊,不过原子大哥现已把那个端口映射可操作位段,不理解,仍是看自己的吧。一个GPIOA端口就16位,天然的32位的GPIOX_ODR 就只要低16位有用了,想输出什么就给这个寄存器赋值就OK了。
或许用GPIOA->ODR |=(1<ODR &=(0<
完成了这一步,咱们就能够软件延时,操控输出流水灯了。条件是敞开设备时钟哦。
4, GPIOX_IDR 端口输入数据寄存器
这个寄存器用到的条件是端口装备为输入方式时分。什么时分想读取值,就什么时分读取吧。我们都理解。
5, GPIOX_BSRR 端口位设置/铲除寄存器
这个寄存器我用了一些,其他也不会。就感觉超级好用。用起来很便利。比方你端口装备好了。想PA5输出“1”。就GPIOA->BSRR |=(1<<5);5是对应的哦。输出“0”,相同的
GPIO->BSRR |=(1<<(5+16));为什么加16,你理解的。
6, GPIOX_BRR 端口位铲除寄存器
晚上百度了一下,有了GPIOX_BSRR 为什么还要有GPIOX_BRR ,没看理解。有了拿来就用就对了。相同的和GPIOx_BSRR相同的用法。专门铲除的。GPIOA->BRR |= (1<
7, 端口装备确定寄存器GPIOX_LCKR,确定了当然就不能修改了。维护了。防止不小心形成的失误。今后用到了在揣摩吧。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/256669.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部