首页 > 其他 > 详细

CRL,CRH寄存器

时间:2020-08-13 09:14:46      阅读:152      评论:0      收藏:0      [点我收藏+]

在移植ds18b20时看到这样一段代码

#define DS18B20_IO_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define DS18B20_IO_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

什么意思呢,然后查了一下手册

技术分享图片

发现CRL和CRH寄存器使用是基本相同的:都是配置端口工作模式,以CRH为例,一共有4个字节,从左往右依次配置PIN15---->PIN8,比如我要配置PIN8,那么我就需要关注

CRH的最右边的4个比特,0xFFFF FFF0(0所代表的4个比特就是需要配置的)


如果你的端口号小于8,就配置CRL,比如PA2;大于等于8就配置CRH

然后回到上面那两行代码:先看第一行

GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;

配置的CRH寄存器从又往左第4个,依次数过来,pin8,pin9,pin10,pin11,配置的是PB11脚,0代表什么呢,按照上图的定义,表示复位后的模拟输入模式

然后  GPIOB->CRH|=8<<12;   把8变成二进制就表示0100,01,表示浮空输入,00表示输入模式,<<12表示配置的PIN11引脚。

再看这一行:

{GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;}

同样先复位,然后3变成二进制就是0011,00,通用推挽输出,11表示50mhz输出模式

 

那么如果我们要配置PB2分别为模拟输入和推挽输出应该怎么做呢,

首先pb2应该配置CRL寄存器,其他和上面讲的就一样了

#define DS18B20_IO_IN()  {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=8<<8;}
#define DS18B20_IO_OUT() {GPIOB->CRL&=0XFFFFF0FF;GPIOB->CRL|=3<<8;}

 

CRL,CRH寄存器

原文:https://www.cnblogs.com/zs-uestc/p/13493825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!