CRL |= (0b01 ``` 在上述代碼中,`G" />

在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

STM32開發中的位運算以及位帶操作

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2024-02-02 14:38 ? 次閱讀

STM32開發中的位運算以及位帶操作

位運算是計算機中常用的一種操作方式,特別適用于對數據的單個或多個位進行操作。在STM32開發中,位運算常被用于對寄存器的位進行設置或清除,以及對數據的位進行操作。同時,STM32還提供了位帶操作,使得對單個位進行操作更加方便。本文將詳細介紹STM32開發中的位運算和位帶操作。

1. 位運算

位運算是一種通過位的邏輯操作對二進制數據進行操作的方法,它包括與(&)、或(|)、異或(^)、取反(~)等操作。在STM32開發中,位運算常被用于對寄存器的位進行設置或清除,以控制硬件設備的工作狀態。

以GPIO寄存器為例,每個GPIO口都有一個對應的寄存器,用于控制該GPIO口的輸入、輸出狀態。設置或清除寄存器中某一位的方法如下:

- 設置寄存器中某一位為1:先將寄存器中對應的位設置為0,然后再將該位設置為1。
- 清除寄存器中某一位為0:先將寄存器中對應的位設置為1,然后再將該位設置為0。

以設置GPIOA的第5位為1為例,代碼如下:

```c
GPIOA->CRL &= ~(0b11 << 20); // 先將第5位設置為0
GPIOA->CRL |= (0b01 << 20); // 再將第5位設置為1
```

在上述代碼中,`GPIOA->CRL`表示GPIOA寄存器的低8位,通過與運算 `&` 和或運算 `|` 將對應的位設置為0或1。

2. 位帶操作

位帶操作是指將某一位映射到一個特定的內存地址上,以方便對該位進行直接的讀寫操作。STM32提供了位帶操作的相關特性。

在STM32中,每個位的地址都可以通過位帶區域的地址計算得到。位帶操作通過STM32提供的特殊地址將位操作轉換為對特定地址的讀寫操作,從而實現對單個位的直接讀寫。這種方式可以大大簡化對單個位的操作,提高代碼可讀性和代碼執行效率。

以位帶操作設置GPIOA的第5位為1為例,代碼如下:

```c
#define BITBAND_SRAM(address, bit) ((uint32_t*)((BITBAND_SRAM_BASE + ((address) - SRAM_BASE) * 32 + (bit) * 4)))
#define BITBAND_PERIPH(address, bit) ((uint32_t*)((BITBAND_PERIPH_BASE + ((address) - PERIPH_BASE) * 32 + (bit) * 4)))

volatile uint32_t* GPIOA_PIN5 = BITBAND_PERIPH(&GPIOA->ODR, 5);

// 設置GPIOA的第5位為1
*GPIOA_PIN5 = 1;
```

在上述代碼中,`BITBAND_PERIPH` 定義了位帶操作的宏,通過計算得到對應位的地址。`GPIOA_PIN5` 即為第5位的地址,通過給該地址賦值為1,即可將第5位設置為1。

3. 位運算與位帶操作的比較

位運算和位帶操作都可以用于對單個位進行操作,但是在一些情況下,位帶操作比位運算更加高效:

- 可讀性:位帶操作使得代碼更加直觀和易讀,能夠清晰地看出對哪個位進行操作。
- 代碼量:位帶操作可以通過宏定義簡化代碼,減少了位運算的操作和代碼量。
- 高效性:位帶操作直接對位進行操作,避免了對整個寄存器的讀取和寫入,提高了代碼執行效率。

然而,位帶操作也存在一些限制:

- 只能對每個字節(byte)的某個位進行操作。
- 位帶區域的內存資源有限,一般情況下只能直接對GPIO寄存器的每個位進行位帶操作,對其他寄存器的位進行位帶操作可能無效。

因此,在實際開發中,根據需要選擇合適的方法進行位操作。

結論:

本文詳細介紹了STM32開發中的位運算和位帶操作。位運算通過與運算和或運算對寄存器的位進行設置和清除,用于控制硬件設備的工作狀態。位帶操作通過將位映射到特定的地址上,實現對單個位的直接讀寫操作,提高了代碼的可讀性和執行效率。在選擇位操作方法時,需要考慮可讀性、代碼量和效率等因素。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5411

    瀏覽量

    123101
  • STM32
    +關注

    關注

    2288

    文章

    10997

    瀏覽量

    361912
  • 位運算
    +關注

    關注

    0

    文章

    17

    瀏覽量

    8526
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    音叉液開關的作用!

    開關
    華泰天科
    發布于 :2025年04月29日 16:28:04

    音叉液開關的重要作用!

    開關
    jzyb
    發布于 :2025年04月23日 15:34:42

    儀表包括哪些?

    儀表
    jzyb
    發布于 :2025年03月18日 20:06:55

    電極液開關在污水處理的作用!

    開關
    華泰天科
    發布于 :2025年01月21日 18:09:45

    4G模組Air780E的LuatOS開發運算(bit)示例

    本文我要說的是低功耗4G模組Air780E的LuatOS開發,關于運算(bit)示例,我將詳細解析分享給大家。
    的頭像 發表于 12-02 14:33 ?438次閱讀
    4G模組Air780E的LuatOS<b class='flag-5'>開發</b>之<b class='flag-5'>位</b><b class='flag-5'>運算</b>(bit)示例

    Air780E模組LuatOS開發運算(bit)教程篇!

    本次我們要學習的是4G模組Air780E的LuatOS開發,關于運算(bit)教程分享給大家。
    的頭像 發表于 11-26 11:58 ?422次閱讀
    Air780E模組LuatOS<b class='flag-5'>開發</b>的<b class='flag-5'>位</b><b class='flag-5'>運算</b>(bit)教程篇!

    RISC-V的指令集寬的幾點學習心得

    指令集RV128I,以及支持浮點運算的指令集(如RV32F、RV64F等)。這也為未來相當長的時間里面發展預留了很大的空間。 RV 32和64指令集的特點 32
    發表于 10-31 22:05

    技術干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析運算符與優先級

    在C語言的學習過程運算符的使用是不可忽視的重要環節。本文將繼續深入探討C語言中的運算符,重點介紹運算符、賦值
    的頭像 發表于 10-13 08:09 ?503次閱讀
    技術干貨驛站 ▏解鎖C語言高效編程秘訣:深入解析<b class='flag-5'>運算</b>符與優先級

    MCU前沿市場趨勢:8單片機和32單片機

    工具和庫方面所需的一切。 這些32單片機的許多都是基于非常成功的ARM內核。因此,開發人員對獲得第二種源設備以及市場上可用的一套全面的開發
    發表于 09-24 17:47

    電容液測量阻抗多少正常

    在電容液測量,阻抗值的正常范圍并不是一個固定的數值,而是與多種因素有關,包括液高度、電極間距、液體性質以及傳感器的具體設計等。因此,無法給出一個統一的“正常”阻抗值范圍。 然而,
    的頭像 發表于 09-19 09:42 ?602次閱讀

    8數碼管在Proteus的使用技巧

    在Proteus中使用8數碼管,首先需要了解8數碼管的基本概念和工作原理,然后熟悉Proteus軟件的操作界面和使用方法,最后通過具體的實例來掌握8數碼管在Proteus
    的頭像 發表于 08-28 16:31 ?6817次閱讀

    plc的置和復位有什么區別

    在PLC(可編程邏輯控制器),置(Set)和復位(Reset)是兩個極其重要的操作,它們對控制PLC的輸出信號、執行特定邏輯操作以及管理
    的頭像 發表于 08-16 18:21 ?1.5w次閱讀

    STM32G4系列到底支不支持帶操作

    印象不止一次有人詢問STM32G4系列到底支不支持帶操作
    的頭像 發表于 07-29 09:45 ?2061次閱讀
    <b class='flag-5'>STM32</b>G4系列到底支不支持<b class='flag-5'>位</b><b class='flag-5'>帶操作</b>

    STM32H743系列支持帶操作嗎?

    //IO口操作宏定義 define BITBAND(addr, bitnum) ((addr0xF0000000)+0x2000000+((addr0xFFFFF)<<5
    發表于 07-23 08:13

    請問一下ESP8266有沒有操作或者帶的功能?

    請問一下ESP8266有沒有操作或者帶的功能,我們需要對一塊連續內存區域(相當于顯存)進行操作,如果不用
    發表于 07-22 06:42
    主站蜘蛛池模板: 在线观看黄日本高清视频 | 国产精品免费久久久久影院 | 九色欧美 | 久久免费福利视频 | 97影院理论片在线观看 | 美女网站色在线观看 | 视频高清正版在线观看 | 狼狼色丁香久久女婷婷综合 | 天天做天天爱夜夜大爽完整 | 亚洲黄色三级 | 久久久久综合 | 操碰视频在线观看 | 国内精品免费视频自在线 | 亚洲一区二区三区免费视频 | 四虎在线观看免费永久 | 加勒比在线免费视频 | kkkbo色综合| 久久99精品久久久久久久野外 | 九色视频在线看 | 成视频年人黄网站免费视频 | 黄色三级视频网站 | 久久这里精品青草免费 | 欧美大片xxxxbbbb | 亚洲不卡在线播放 | 9久久99久久久精品齐齐综合色圆 | 午夜免费成人 | 免费观看欧美成人1314w色 | 天堂-bt种子| h视频欧美 | 久久夜色精品国产噜噜小说 | 色综合天天综合网国产国产人 | 黑人一区二区三区中文字幕 | aa视频免费 | 黄 色 大 片 网站 | 亚洲午夜久久久久影院 | 天天躁狠狠躁夜躁2021 | 97爱爱| 免费无码看av的网站 | 久久综合色播 | 啪啪午夜视频 | 四虎免费大片aⅴ入口 |