STM32中操作寄存器GPIOB_CRL &= ~( 0x0F<< (4*0))与GPIOB_CRL &=~(0x0F)之间有什么区别吗?
发布网友
发布时间:2022-04-26 19:03
我来回答
共4个回答
热心网友
时间:2023-10-22 14:23
没有区别,在这个代码中用到4*0的作用是因为是用的是作用于PB0,而4是对应GPIO设置的最小位数,将4*0中的0改为1后就可以对PB1进行操作,这种写法是为了后续操作的快捷。所以对于只用到PB0的程序~(0x0F<<(4*0))和~0x0F是没有区别的,而若是使程序以后的修改更加的便利,还是推荐书上的那种写法,希望采纳。
热心网友
时间:2023-10-22 14:23
#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;
}
}
/**********************************************************************************/
热心网友
时间:2023-10-22 14:24
本人小白,对于=0xf0,寄存器与0xf0,低四位正好至0
热心网友
时间:2023-10-22 14:24
我回答一下其他没有回答的那个问题,和1相与是其本身所以不影响