[其他ST产品] 常用置位、清零解释及stm32f103寄存器点亮led

[复制链接]
1400|8
 楼主| liuqiangdong 发表于 2023-5-31 00:51 | 显示全部楼层 |阅读模式
置位:|= , 清0:&=~

清0例:*(unsigned int*)0x40010C0C &=~(1<<0)

先让1左移0位,即

927176476297ed40de.png

再全部取反,即


9463464762983afae2.png
再与之相与,即....

我们知道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起始地址
3113664762a319486f.png
 楼主| liuqiangdong 发表于 2023-5-31 00:54 | 显示全部楼层
控制ODR寄存器

459364762a43408b5.png
 楼主| liuqiangdong 发表于 2023-5-31 00:54 | 显示全部楼层
配置IO口为输出(控制CRL寄存器)

4777864762a50cd6f4.png

推挽输出主要目的为增强输出的负载能力。推挽既可以输出低电平也可以输出高电平;STM32的引脚一般是高阻态,但是推挽输出默认为低电平。
 楼主| liuqiangdong 发表于 2023-5-31 00:58 | 显示全部楼层
使能时钟(RCC_APB2ENR)

2713464762afe3ae4a.png
 楼主| liuqiangdong 发表于 2023-5-31 00:58 | 显示全部楼层
使能时钟(RCC_APB2ENR)

3549264762b32381b3.png
7392164762b3a1659a.png
代码:

    //打开GPIOB端口的时钟
    *(unsigned int * )0x40021018 |= ( (1)<<3 );
    //配置IO口为输出
    *(unsigned int * )0x40010C00 |= ( (1)<<(4*0) );
    //控制ODR寄存器
  *(unsigned int * )0x40010C00 &=~(1<<0);
geraldbetty 发表于 2023-6-7 13:42 | 显示全部楼层
如何手动置零               
MessageRing 发表于 2023-6-7 23:13 | 显示全部楼层
用寄存器开发的都是大佬啊
uytyu 发表于 2023-6-19 09:15 | 显示全部楼层
如何将stm32的一个管脚的输出置一和清零
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

97

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部