打印
[其他ST产品]

常用置位、清零解释及stm32f103寄存器点亮led

[复制链接]
717|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
置位:|= , 清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

如此以来就达到了置位的效果。

使用特权

评论回复
沙发
liuqiangdong|  楼主 | 2023-5-31 00:54 | 只看该作者
PB0使能

GPIOB起始地址

使用特权

评论回复
板凳
liuqiangdong|  楼主 | 2023-5-31 00:54 | 只看该作者
控制ODR寄存器

使用特权

评论回复
地板
liuqiangdong|  楼主 | 2023-5-31 00:54 | 只看该作者
配置IO口为输出(控制CRL寄存器)



推挽输出主要目的为增强输出的负载能力。推挽既可以输出低电平也可以输出高电平;STM32的引脚一般是高阻态,但是推挽输出默认为低电平。

使用特权

评论回复
5
liuqiangdong|  楼主 | 2023-5-31 00:58 | 只看该作者
使能时钟(RCC_APB2ENR)

使用特权

评论回复
6
liuqiangdong|  楼主 | 2023-5-31 00:58 | 只看该作者
使能时钟(RCC_APB2ENR)



代码:

    //打开GPIOB端口的时钟
    *(unsigned int * )0x40021018 |= ( (1)<<3 );
    //配置IO口为输出
    *(unsigned int * )0x40010C00 |= ( (1)<<(4*0) );
    //控制ODR寄存器
  *(unsigned int * )0x40010C00 &=~(1<<0);

使用特权

评论回复
7
geraldbetty| | 2023-6-7 13:42 | 只看该作者
如何手动置零               

使用特权

评论回复
8
MessageRing| | 2023-6-7 23:13 | 只看该作者
用寄存器开发的都是大佬啊

使用特权

评论回复
9
uytyu| | 2023-6-19 09:15 | 只看该作者
如何将stm32的一个管脚的输出置一和清零

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

97

帖子

0

粉丝