首页 > 其他分享 >二进制基础和STM32的常用位运算

二进制基础和STM32的常用位运算

时间:2024-09-02 14:24:52浏览次数:6  
标签:运算 二进制 STM32 按位 寄存器 操作 reg

目录

一、引言

二、二进制基础

1.二进制的表示

2.二进制的优势 

3.二进制与十进制的转换

三、位运算基础

1.按位与(&)

2.按位或(|)

3.按位异或(^)

4.按位取反(~)

5.左移(<<)

6.右移(>>)

四、STM32的常用位运算

1.清 0 操作

2.置 1 操作

五、实际应用场景

六、注意事项


一、引言

        在计算机科学中,二进制和位运算是非常基础且重要的概念。它们在底层编程、优化算法、数据压缩等方面都有着广泛的应用。本文将深入介绍二进制的基本概念以及常用的位运算操作。

二、二进制基础

1.二进制的表示

二进制是一种计数系统,只使用两个数字:0 和 1。每一位(bit)的值代表 2 的幂次方。例如,二进制数 1010 可以表示为:

 

2.二进制的优势 

计算机内部使用二进制来存储和处理数据,主要是因为二进制在物理实现上更加简单可靠。电子元件可以很容易地表示两种状态(如高电平和低电平、导通和截止等),对应于二进制的 0 和 1。

3.二进制与十进制的转换

十进制转换为二进制可以通过不断除以 2 取余数的方法得到。例如,将十进制数 13 转换为二进制:

13÷2=6 余1        6÷2=3 余0        3÷2=1 余1        1÷2=0 余1

从下往上读取余数得到二进制数 1101

二进制转换为十进制则是将每一位的数字乘以对应的 2 的幂次方后相加。

三、位运算基础

1.按位与(&)

  • 按位与操作对两个操作数的每一位进行逻辑与运算。只有当两个相应位都为 1 时,结果位才为 1,否则为 0。
  • 例如,二进制数 1010 & 1100 = 1000。
  • 应用场景:可以用于提取特定的位、判断奇偶性等。例如,判断一个数是否为偶数,可以使用与运算判断最低位是否为 0。

2.按位或(|)

  • 按位或操作对两个操作数的每一位进行逻辑或运算。只要两个相应位中有一个为 1,结果位就为 1。
  • 例如,二进制数 1010 | 1100 = 1110。
  • 应用场景:可以用于设置特定的位、合并标志位等。

3.按位异或(^)

  • 按位异或操作对两个操作数的每一位进行逻辑异或运算。当两个相应位不同时,结果位为 1,否则为 0。
  • 例如,二进制数 1010 ^ 1100 = 0110。
  • 应用场景:可以用于简单的加密、交换两个变量的值而无需使用临时变量等。

4.按位取反(~)

  • 按位取反操作对一个操作数的每一位进行逻辑取反。将 0 变为 1,将 1 变为 0。
  • 例如,~1010 = 0101。

5.左移(<<)

  • 左移操作将一个二进制数的所有位向左移动指定的位数。左边移出的位被丢弃,右边用 0 填充。
  • 例如,1010 << 2 = 101000。
  • 应用场景:可以用于快速乘以 2 的幂次方。

6.右移(>>)

  • 右移操作将一个二进制数的所有位向右移动指定的位数。对于无符号数,左边用 0 填充;对于有符号数,根据符号位进行填充(正数用 0 填充,负数用 1 填充)。
  • 例如,1010 >> 2 = 0010。
  • 应用场景:可以用于快速除以 2 的幂次方。

四、STM32的常用位运算

1.清 0 操作

假设我们有一个寄存器,其中某些位需要被清零。可以使用按位与操作结合特定的掩码来实现。

例如,有一个 32 位的寄存器变量 reg,要将其第 5 位清零,可以这样做:

reg &= ~(1 << 5);

解释:

  • 1 << 5 将数字 1 左移 5 位,得到一个只有第 5 位为 1,其他位为 0 的数。
  • ~(1 << 5) 对这个数取反,得到一个只有第 5 位为 0,其他位为 1 的掩码。
  • reg &= ~(1 << 5) 让 reg 与这个掩码进行按位与操作,这样就将 reg 的第 5 位清零,而其他位保持不变。

2.置 1 操作

如果要将寄存器的某些位设置为 1,可以使用按位或操作。

例如,要将 reg 的第 3 位置 1,可以这样做:

reg |= (1 << 3);

解释:

  • 1 << 3 将数字 1 左移 3 位,得到一个只有第 3 位为 1,其他位为 0 的数。
  • reg |= (1 << 3) 让 reg 与这个数进行按位或操作,这样就将 reg 的第 3 位置为 1,而其他位保持不变。

五、实际应用场景

1.配置 GPIO 引脚:

  • 在 STM32 中,配置 GPIO 引脚的模式、速度等属性时,常常需要对特定的寄存器位进行操作。
  • 例如,设置某个 GPIO 引脚为输出模式,可以通过设置相应寄存器的特定位来实现。

2.控制外设功能:

  • 对于一些外设寄存器,通过位运算可以方便地开启或关闭特定的功能。
  • 比如,使能或禁用某个定时器的特定功能,可以通过设置相应寄存器的特定位来完成。

六、注意事项

1.理解寄存器的位定义:

  • 在进行位运算操作之前,必须清楚了解所操作的寄存器的每一位的含义和作用。
  • 参考 STM32 的参考手册,确保正确地操作寄存器的特定位。

2.避免意外影响其他位:

  • 在进行位运算时,要小心操作,确保只影响目标位,而不会意外改变其他不需要改变的位。
  • 可以先读取寄存器的值,进行位运算后再写回寄存器,以确保其他位不受影响。

标签:运算,二进制,STM32,按位,寄存器,操作,reg
From: https://blog.csdn.net/qq_38072731/article/details/141813381

相关文章

  • 51c嵌入式~STM32合集1
    #STM32的启动模式配置与应用三种BOOT模式    所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式,相关文章:详解STM32启动文件。MainFlashmemory是STM32内置的Flash,一......
  • 土壤湿度传感器详解(STM32)
    目录一、介绍二、传感器原理1.原理图2.引脚描述三、程序设计main.c文件TS.h文件TS.c文件四、实验效果 五、资料获取项目分享一、介绍        传感器适用于土壤的湿度检测,模块中蓝色的电位器是用于土壤湿度的阈值调节,数字量输出DO可以与单片机直接相连,通......
  • 搭建嵌入式开发环境STM32 Keil 超详尽版
     需要准备的安装包目录一、Keil开发环境构建1、MDK531.exe2、注册机keygen3、ST-Link驱动程序4、芯片软件支持包Kel.STM32F1xx_DFP.2.4pack二、STM32CubeMX软件配置芯片1、JRE(根据自己的电脑的操作系统选择安装适合的版本)2、安装STM32CubeMX 资源链接:https://pan.......
  • stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)
    理论1.输出比较简介OC(OutputCompare)输出比较输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功......
  • STM32 TIM输入捕获(输入捕获模式测频率&&PWMI模式测频率占空比)
    理论1.输入捕获简介IC(InputCapture)输入捕获输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式,同时测量频率和......
  • 详细认识指针(一) --指针的概念、指针的变量和地址、const修饰指针、指针的运算、野指
    前言:一提到指针,大家的第一反应是什么?很难理解,No,No,No。其实指针这个知识还是很贴近生活的,接下来我把我的感悟分享给大家。指针的概念指针的定义 首先,我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是从内存中读取的,处理后的数据也会放回到内存中。这个......
  • STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!
    STM32F1+HAL库+FreeTOTS学习8——第一个任务,启动!开启任务调度器1.函数vTaskStartScheduler()2.函数xPortStartScheduler()启动第一个任务1.函数prvStartFirstTask()2.函数vPortSVCHandler()上一期我们学习了列表和列表项的相关内容和API函数实验,接下来我们......
  • 【STM32 Blue Pill编程】-UART数据发送与接收(DMA模式)
    UART数据发送与接收(DMA模式)文章目录UART数据发送与接收(DMA模式)1、DMA介绍2、STM32的UART端口3、硬件准备及接线4、UART配置5、代码实现在本文中,我们将展示如何使用STM32BluePillUART通过直接内存访问(DMA)来发送和接收数据。这一过程而无需涉及CPU。......
  • 【STM32 Blue Pill编程】-UAR数据接收与发送(中断模式)
    UAR数据接收与发送(中断模式)文章目录UAR数据接收与发送(中断模式)1、UART的中断模式与轮询模式比较2、STM32的UART端口3、硬件准备及接线4、串口配置5、代码实现在本文中,我们将展示如何在中断模式下使用STM32BluePillUART来发送和接收数据。我们将使用S......
  • 【STM32 Blue Pill编程】-UART数据接收与发送(轮询模式)
    UART数据接收与发送(轮询模式)文章目录UART数据接收与发送(轮询模式)1、STM32的UART端口2、串口数据发送2.1硬件准备及接线2.2串口配置2.3串口数据发送实现3、串口数据接收4、printf函数重定向每当我们进行嵌入式系统应用程序开发时,我们都需要使用串......