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

91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32開發(fā)中的位運(yùn)算以及位帶操作

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2024-02-02 14:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

STM32開發(fā)中的位運(yùn)算以及位帶操作

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

1. 位運(yùn)算

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

以GPIO寄存器為例,每個(gè)GPIO口都有一個(gè)對應(yīng)的寄存器,用于控制該GPIO口的輸入、輸出狀態(tài)。設(shè)置或清除寄存器中某一位的方法如下:

- 設(shè)置寄存器中某一位為1:先將寄存器中對應(yīng)的位設(shè)置為0,然后再將該位設(shè)置為1。
- 清除寄存器中某一位為0:先將寄存器中對應(yīng)的位設(shè)置為1,然后再將該位設(shè)置為0。

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

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

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

2. 位帶操作

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

在STM32中,每個(gè)位的地址都可以通過位帶區(qū)域的地址計(jì)算得到。位帶操作通過STM32提供的特殊地址將位操作轉(zhuǎn)換為對特定地址的讀寫操作,從而實(shí)現(xiàn)對單個(gè)位的直接讀寫。這種方式可以大大簡化對單個(gè)位的操作,提高代碼可讀性和代碼執(zhí)行效率。

以位帶操作設(shè)置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);

// 設(shè)置GPIOA的第5位為1
*GPIOA_PIN5 = 1;
```

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

3. 位運(yùn)算與位帶操作的比較

位運(yùn)算和位帶操作都可以用于對單個(gè)位進(jìn)行操作,但是在一些情況下,位帶操作比位運(yùn)算更加高效:

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

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

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

因此,在實(shí)際開發(fā)中,根據(jù)需要選擇合適的方法進(jìn)行位操作。

結(jié)論:

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5609

    瀏覽量

    130016
  • STM32
    +關(guān)注

    關(guān)注

    2310

    文章

    11162

    瀏覽量

    373535
  • 位運(yùn)算
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8674
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    音叉液開關(guān)的故障解決辦法!

    開關(guān)
    華泰天科
    發(fā)布于 :2026年01月26日 14:35:48

    arm單片機(jī)位帶操作的原理

    單片機(jī)單片機(jī)的帶操作(Bit-Banding)是一種特殊的內(nèi)存映射技術(shù),允許開發(fā)者以原子操作的方式對特定的內(nèi)存進(jìn)行讀寫,從而提高了對GP
    發(fā)表于 11-25 08:24

    操作的常見錯(cuò)誤與應(yīng)對策略

    的,可能會(huì)導(dǎo)致數(shù)據(jù)溢出或丟失。 (三)數(shù)據(jù)類型表示的理解要點(diǎn) 在嵌入式系統(tǒng),不同的數(shù)據(jù)類型有著不同的表示方式,這一點(diǎn)在進(jìn)行操作
    發(fā)表于 11-24 07:50

    使用操作精準(zhǔn)配置單片機(jī)寄存器

    項(xiàng)目對效率要求高,推薦使用掩碼操作;如果需要可讀性和維護(hù)性,推薦結(jié)構(gòu)體映射寄存器;如果使用Cortex-M架構(gòu),帶操作是個(gè)不錯(cuò)的選擇。 1、使用
    發(fā)表于 11-24 07:22

    單片機(jī)位數(shù)的思考(8、16、32

    8、16、32是指單片機(jī)的“字長”,也就是一次運(yùn)算參與運(yùn)算的數(shù)據(jù)長度,這個(gè)位是指二進(jìn)制
    發(fā)表于 11-21 08:31

    C語言操作

    效果,而當(dāng)兩個(gè)位相同時(shí),結(jié)果為 0。以 5 ^ 3 為例,0000 0101 ^ 0000 0011 = 0000 0110,結(jié)果是 6。按異或操作在數(shù)據(jù)加密、校驗(yàn)和數(shù)據(jù)交換等場景應(yīng)用較多
    發(fā)表于 11-21 07:52

    映射的操作

    Bit-banding 簡稱帶、段 支持帶操作后,可以使用普通的加載/存儲(chǔ)指令來對單一的比特進(jìn)行讀寫 對于硬件 I/O 密集型的底層程序最有用處 優(yōu)點(diǎn) 使代碼更簡潔 在多任務(wù)
    發(fā)表于 11-18 07:03

    帶操作的分析

    的值置1: 五、帶操作編程實(shí)現(xiàn) 在C編譯器并沒有直接支持帶操作,比如,C編譯器并不知道同一塊內(nèi)存可以用不同的地址來訪問,也不知
    發(fā)表于 11-18 07:01

    GPIO輸出操作的幾種方法分享

    權(quán)威指南》第五章,第5小節(jié) 帶操作(87頁~92頁)。   為簡化帶操作,可以定義一些宏。比如,我們可以建立一個(gè)把“帶地址+
    發(fā)表于 11-13 07:50

    定點(diǎn)數(shù)表示實(shí)數(shù)的方法以及定點(diǎn)數(shù)在硬件上的運(yùn)算驗(yàn)證

    本篇主要介紹定點(diǎn)數(shù)表示實(shí)數(shù)的方法以及定點(diǎn)數(shù)在硬件上的運(yùn)算驗(yàn)證 為什么選定點(diǎn)數(shù) 32單精度浮點(diǎn)數(shù): 32的單精度浮點(diǎn)數(shù)為例,IEE754標(biāo)準(zhǔn)規(guī)定,一個(gè)flaot類型的
    發(fā)表于 10-28 08:13

    值得關(guān)注的電極液開關(guān)作用!

    開關(guān)
    jzyb
    發(fā)布于 :2025年10月22日 17:24:00

    值得學(xué)習(xí)的電極液開關(guān)作用!

    開關(guān)
    jzyb
    發(fā)布于 :2025年07月18日 15:31:42

    基于瑞薩64MPU RZ/G2L進(jìn)行32應(yīng)用軟件開發(fā)

    本文主要介紹基于瑞薩64MPU RZ/G2L進(jìn)行32應(yīng)用軟件開發(fā)的介紹,用于解決客戶32軟件移植相關(guān)問題,供客戶參考。
    的頭像 發(fā)表于 06-26 15:48 ?2007次閱讀
    基于瑞薩64<b class='flag-5'>位</b>MPU RZ/G2L進(jìn)行32<b class='flag-5'>位</b>應(yīng)用軟件<b class='flag-5'>開發(fā)</b>

    音叉液開關(guān)的作用!

    開關(guān)
    華泰天科
    發(fā)布于 :2025年04月29日 16:28:04

    儀表包括哪些?

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