STM32中操作寄存器GPIOB_CRL &= ~( 0x0F<< (4*0))与GPIOB_CRL &=~(0x0F)之间有什么区别吗?

在一本书上看到的,它说GPIOB_CRL &= ~( 0x0F<< (4*0))只会改变PB0的引脚寄存器,不会改变其他引脚的状态,可是~(0x0F<<(4*0))=0xF0,不还有其他4位被置一了吗?所以有些疑惑,还有~(0x0F<<(4*0))和~0x0F有什么区别吗?

没有区别,在这个代码中用到4*0的作用是因为是用的是作用于PB0,而4是对应GPIO设置的最小位数,将4*0中的0改为1后就可以对PB1进行操作,这种写法是为了后续操作的快捷。所以对于只用到PB0的程序~(0x0F<<(4*0))和~0x0F是没有区别的,而若是使程序以后的修改更加的便利,还是推荐书上的那种写法,希望采纳。
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-10
#include "stm32f10x.h"
#include "GPIO_Config.h"
/*********************************************************************************/
/***GPIO_Config***/
void GPIO_Config(void)
{
RCC -> APB2ENR |= 1<<0; //开启AFIO IO口辅助功能时钟使能

// RCC -> APB2ENR |= 0x1c; //开启GPIO——A,B ,C
RCC -> APB2ENR |= 0x7c; //开启GPIO——A,B ,C,D,E 103VET6

// AFIO -> MAPR &= ~(0x0f<<24);AFIO -> MAPR |= 2<<24; //配置前先清除;关闭JTAG-DP +SW-DP功能

RCC -> APB2RSTR |= 0x7c;RCC -> APB2RSTR &= ~0x7c; //复位GPIO——A-B-C-D-E,并清除复位

// GPIOA -> CRL = 0x33333333;GPIOA -> CRH = 0x33333333; //推挽 输出 50MHZ
// GPIOB -> CRL = 0x33333333;GPIOB -> CRH = 0x33333333;
// GPIOC -> CRL = 0x33333333;GPIOC -> CRH = 0x33333333;
// GPIOD -> CRL = 0x33333333;GPIOD -> CRH = 0x33333333;
// GPIOE -> CRL = 0x33333333;GPIOE -> CRH = 0x33333333;
}
/*********************************************************************************/
/***GPIO_Port_Enable***/
void GPIO_Port_Mode(GPIO_TypeDef *GPIO_Numtemp,unsigned char GPIO_PortNum,unsigned char GPIO_PortMode)
{
GPIO_PortMode &= 0x0f;GPIO_PortNum &= 0x0f;
if(GPIO_PortNum < 8)
{
GPIO_PortNum *= 4;
GPIO_Numtemp -> CRL &= ~(0x0f <<GPIO_PortNum); //配置前先清除
GPIO_Numtemp -> CRL |= GPIO_PortMode <<GPIO_PortNum; //重新配置 GPIO XX 端口 功能
}
else
{
GPIO_PortNum -= 8;
GPIO_PortNum *= 4;
GPIO_Numtemp -> CRH &= ~(0x0f <<GPIO_PortNum);
GPIO_Numtemp -> CRH |= GPIO_PortMode <<GPIO_PortNum;
}

}
/**********************************************************************************/本回答被网友采纳
第2个回答  2019-08-23
本人小白,对于=0xf0,寄存器与0xf0,低四位正好至0
第3个回答  2022-09-25
我回答一下其他没有回答的那个问题,和1相与是其本身所以不影响

...&= ~( 0x0F<< (4*0))与GPIOB_CRL &=~(0x0F)之间有什么区别吗?_百度...
没有区别,在这个代码中用到4*0的作用是因为是用的是作用于PB0,而4是对应GPIO设置的最小位数,将4*0中的0改为1后就可以对PB1进行操作,这种写法是为了后续操作的快捷。所以对于只用到PB0的程序~(0x0F<<(4*0))和~0x0F是没有区别的,而若是使程序以后的修改更加的便利,还是推荐书上的那...

嵌入式STM32,请问这条语句GPIOB->CRL &= 0xFF0FFFFF是什么意思?求大神...
端口GPIOB有16个输出端引脚,CRL寄存器则配置 GPIOB的低8位引脚,如下图示,采用了寄存器的每4位数据来配置一个引脚;GPIOB->CRL &= 0xFF0FFFFF,就是置低8位的第6个引脚(PIN5)为模拟输入模式,其余引脚则保留原有配置值不变;

STM32中{GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}为什么会报错_百度...
由于编译器默认signed int即32位有符号整数类型,而1<<31实际为0x80000000,这样就有可能改写了符号位(最高位)依此类推,(2<<30),(3<<29)...等都会出现编译警告问题.解决办法为: ((unsigned int)1<<31),((unsigned int)2<<30),...你的问题和上述问题类似 ...

GPIOB->CRL&=0XFFFFFFF0;这是什么意思,特别是&=。。。这里不能理解_百...
&=等价于GPIOB->CRL = GPIOB->CRL & 0xFFFFFFF0,GPIO口B的低8个端口控制寄存器CRL的低4个bits清为0,其余bits不变。学好编程:1、明确学习目的,学习编程对大多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自...

关于stm32中的宏定义
stm32是32位机寄存器都是32位,这两句是对GPIOB->CRL寄存器的操作!运行步骤:8<<28,就是把8左移28位 然后与上面的寄存器 或运算,并赋值给寄存器。前面的&=就是先清0,不懂追问!直接跟你说了GPIOB->CRL |= 0x1000F FF FF FF;第二句:GPIOB->CRL |= 0011 F FF FF FF;

GPIOB->CRL|=0X00300000 后面的数值怎么来的啊,什么意思额?随便再解释...
CRL对应的是低8位数据,0X00300000对应的是第6个(从0位开始计数,从右往左数过去,第几位就是对应PB0 -PB7的哪个引脚)GPIO引脚,也就是要操作的是PB5口,数值为3,那么转换成二进制就是:0011,查看数据手册上的CRL寄存器相关数据,可以找到对应的数值含义11:就是配置:输出模式,速度50MHz,00...

求高手指导下,怎样理解STM32中的这两句宏定义?
应该是8!stm32是32位机寄存器都是32位,这两句是对GPIOB->CRL寄存器的操作!运行步骤:8<<28,就是把8左移28位 然后与上面的寄存器 或运算,并赋值给寄存器。前面的&=就是先清0,不懂追问!直接跟你说了GPIOB->CRL |= 0x1000F FF FF FF;第二句:GPIOB->CRL |= 0011 F FF FF FF;

单片机STM32,寄存器编程控制PB0输出为0,需要使用哪些寄存器?
首先开时钟,PB0的话要开PB端口时钟,RCC->APB2ENR |= 1<<2;然后就是配置GPIO端口的模式 这里配置成通用推挽10MHz,GPIOB->CRL &= 0xF<<0;GPIOB->CRL |= 1<<0;然后就是控制了,GPIOB->BSRR |= 1<<0; \/\/PB0输出1 GPIOB->BRR |= 1<<0; \/\/PB0输出0 寄存器编程一定要...

...比如说PB1,GPIOB_ODR &= ~(1<<0);按照C语言怎么理解
GPIOB_CRL &= ~( (0x0f) << (4*0) );GPIOB_CRL |= ( (1) << (4*0) );同样的道理,去查看寄存器GPIOB_CRL 的定义,不过技术手册中应该是GPIOx_CRL,因为所有的io port的格式是一样的 如果你要操作PB1,应该修改后两步,GPIOB_CRL &= ~( (0x0f) << (4*1) );GPIOB_...

stm32的GPIOA有16个引脚,但是GPIOA也是寄存器吗有多少位
stm32是32位的,其中的所有寄存器都是32位的,但是不同寄存器中,有效的位数相应改变。GPIO有 端口配置低寄存器GPIOx_CRL:配置0-7引脚的模式,每个引脚配4bit,两位用于配置输入模式,两位用于配置输出模式 端口配置高寄存器GPIOx_CRH:配置8-15引脚的模式(同上)端口输入数据寄存器GPIOx_IDR(低16位...

相似回答