端口配置寄存器CRH
大家好,以下两句是设置端口的,谁给我解释一下,这两句到底是什么意思?我刚接触STM32,麻烦大家了。。。谢谢。。。#defineDHT11_IO_IN(){GPIOG->...
大家好,以下两句是设置端口的,谁给我解释一下,这两句到底是什么意思?我刚接触STM32,麻烦大家了。。。谢谢。。。
#define DHT11_IO_IN() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;} 展开
#define DHT11_IO_IN() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;} 展开
2个回答
展开全部
说一下我自己的理解吧,这个配置gpio的CRH与CRL分别对应的是GPIO16个引脚的高8位于低8位,上面的代码配置的是CRH,也就是高8位的引脚,具体是哪个引脚因看第一个语句,GPIOG->CRH&=0XFFFF0FFF;具体分析一下这个语句,
GPIOG->CRH=GPIOG->CRH&0XFFFF0FFF;也就是用CRH的第4位也就是GPIOG的第11引脚的CRH先清零,其他的位不变,然后再分析下面这个语句
GPIOG->CRH|=8<<12;把这个语句拆开可以这样理解
GPIOG->CRH=GPIOG->CRH|8<<12;也就是说需要GPIO->CRH或上8<<12(这里分析一下这个符号<<与>>该怎么记忆呢,其实可以这样箭头向左就是左移,箭头向右就是右移,这里的8<<12也就是8左移12位,怎么左移呢都用2进制表示一下就清楚了8用二进制的话是1000左移12位是1000 0000 0000 0000,也就是0x8000,对于的就是复用推挽输出模式)
GPIOG->CRH|=8<<12;这句话最终可以看成是这样的GPIOG->CRH|=0x0000 8000;因为前面的模式已经清空了,这里再重新配置
GPIOG->CRH=GPIOG->CRH&0XFFFF0FFF;也就是用CRH的第4位也就是GPIOG的第11引脚的CRH先清零,其他的位不变,然后再分析下面这个语句
GPIOG->CRH|=8<<12;把这个语句拆开可以这样理解
GPIOG->CRH=GPIOG->CRH|8<<12;也就是说需要GPIO->CRH或上8<<12(这里分析一下这个符号<<与>>该怎么记忆呢,其实可以这样箭头向左就是左移,箭头向右就是右移,这里的8<<12也就是8左移12位,怎么左移呢都用2进制表示一下就清楚了8用二进制的话是1000左移12位是1000 0000 0000 0000,也就是0x8000,对于的就是复用推挽输出模式)
GPIOG->CRH|=8<<12;这句话最终可以看成是这样的GPIOG->CRH|=0x0000 8000;因为前面的模式已经清空了,这里再重新配置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询