置位:|= , 清0:&=~
清0例:*(unsigned int*)0x40010C0C &=~(1<<0)
先让1左移0位,即
再全部取反,即
再与之相与,即....
我们知道1和1或0相与都为它自己本身,而0和0或1相与都为0,故达到了清0的作用
置位例:0xABC6|=((1)<<3)
0xABC6=
首先,1左移3位,得到0000 0000 0000 1000
|运算符 0|0=0,0|1=1,1|0=1,1|1=0;即相同为0,不同为1
即1010 1011 1100 1110
如此以来就达到了置位的效果。
************************************************************************************************************
PB0使能
GPIOB起始地址
控制ODR寄存器
配置IO口为输出(控制CRL寄存器)
推挽输出主要目的为增强输出的负载能力。推挽既可以输出低电平也可以输出高电平;STM32的引脚一般是高阻态,但是推挽输出默认为低电平。
使能时钟(RCC_APB2ENR)
代码:
//打开GPIOB端口的时钟
*(unsigned int * )0x40021018 |= ( (1)<<3 );
//配置IO口为输出
*(unsigned int * )0x40010C00 |= ( (1)<<(4*0) );
//控制ODR寄存器
*(unsigned int * )0x40010C00 &=~(1<<0);