那曲檬骨新材料有限公司

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

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

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

快速理解STM32位帶操作原理

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-09-03 15:40 ? 次閱讀
作者:strongerHuang

說到位帶操作,可能很多人比較陌生,但說到控制IO,你肯定不會陌生。有的項目為了最大效率控制IO,使用位帶操作。下面就來簡單說說未帶操作的內(nèi)容。

一、初識位帶操作

Bit-banding簡稱位帶,有人也叫位段。支持位帶操作后,可以使用普通的加載/存儲指令來對單一的比特進(jìn)行讀寫。很多朋友是從學(xué)習(xí)51單片機(jī)過來的,都知道P1.1這個引腳可以單獨(dú)控制,我們操作的這個引腳就是一個Bit位。我們都知道在STM32中不能直接操作寄存器的某一個Bit位,比如單獨(dú)控制PA端口輸出數(shù)據(jù)寄存器中的ODR1,如下圖:

STM32F1內(nèi)核Cortex-M3早就考慮到了這個問題,為了能達(dá)到直接操作ODR1這類Bit位,就在內(nèi)核中開辟了一塊地址區(qū)域(位帶別名):可以將ODR1這類Bit位(位帶區(qū))映射到位帶別名區(qū)域?qū)?yīng)的地址,只需要操作映射后的地址,就可以實(shí)現(xiàn)操作這個ODR1位了。簡單來說就是映射操作,只是這個映射操作有許多約定要遵循。二、位帶操作中的映射關(guān)系在Cortex-M3中有兩個區(qū)實(shí)現(xiàn)了位帶操作,其中一個是SRAM區(qū)的最低 1MB 范圍,第二個則是片內(nèi)外設(shè)區(qū)的最低 1MB 范圍。這兩個區(qū)域如下圖紅色標(biāo)注的區(qū)域:

這兩個1MB將分別映射到另外兩個地址區(qū)域:

1.SRAM區(qū)的最低1MB(0x2000 0000 --- 0x200F FFFF) 映射到(0x2200 0000 --- 0x23FF FFFF)。

2.片內(nèi)外設(shè)區(qū)的最低1MB(0x4000 0000 --- 0x400F FFFF)映射到(0x4200 0000 --- 0x43FF FFFF)。

其實(shí)就是映射到偏移(距離自身)0x0200 0000外的32MB空間(位帶別名區(qū)),如下圖SRAM區(qū)映射關(guān)系:

提示:看圖中的有顏色的8Bit,它是映射到偏移0x0200 0000外的32Bit(4Byte)空間上。我們讀寫0x2200 0000這個地址,其實(shí)就是操作0x2000 0000中的Bit0位。

這就是所謂的“比特的膨脹對應(yīng)關(guān)系”,1Bit膨脹到32Bit(4字節(jié))。4字節(jié)對應(yīng)的就是那1Bit位的地址,而這個地址中的數(shù)據(jù)只有最低一位才有效(LSB)。

解釋上面多處出現(xiàn)的關(guān)鍵詞

位帶區(qū):支持位帶操作的地址區(qū);

位帶別名:對別名地址的訪問最終作用到位帶區(qū)的訪問上;

三、位帶區(qū)->別名區(qū)計算公式

位帶操作的主要目的:通過Bit位地址(A)計算得到別名區(qū)地址(AliasAddr)。

1.SARM區(qū)計算公式

AliasAddr= 0x22000000 + ((A‐0x20000000)*8+n)*4 =0x22000000+(A-0x20000000)*32 + n*4

2.片上外設(shè)區(qū)計算公式

AliasAddr= 0x42000000 + ((A-0x40000000)*8+n)*4 =0x42000000+(A-0x40000000)*32 + n*4

由于映射關(guān)系一樣,所以公式原理也一樣,只是地址不一樣。計算公式需要結(jié)合上圖比特的膨脹對應(yīng)關(guān)系來理解。

*8:1個字4個字節(jié);

*4:1個字節(jié)8Bit;

四、代碼實(shí)現(xiàn)

利用上面計算公式,代碼實(shí)現(xiàn)的過程就很簡單,我們的目的就是對“AliasAddr”這個地址進(jìn)行讀寫操作。

1.RAM位帶操作宏定義

#defineBITBAND_RAM(RAM, BIT) (*((uint32_t volatile*)(0x22000000u + (((uint32_t)&(RAM) - (uint32_t)0x20000000u)<<5) + (((uint32_t)(BIT))<<2))))

2.外設(shè)寄存器位帶宏定義

#defineBITBAND_REG(REG, BIT) (*((uint32_t volatile*)(0x42000000u + (((uint32_t)&(REG) - (uint32_t)0x40000000u)<<5) + (((uint32_t)(BIT))<<2))))

方便大家對比,給一個截圖:

A.RAM地址0x20001000的Bit1位寫0

BITBAND_RAM(*(uint32_t *)0x20001000, 1) = 0;

B.讀取RAM地址0x20001000的Bit1位

uint8_t Val;

Val=BITBAND_RAM(*(uint32_t *)0x20001000, 1);

C.對PA1數(shù)據(jù)輸出寄存器輸出1

BITBAND_REG(GPIOA->ODR, 1) = 1;

D.讀取PA1數(shù)據(jù)輸出寄存器

uint8_t Val;

Val=BITBAND_REG(GPIOA->ODR, 1);

這里就是操作某一個地址,類似于操作指針一樣;

五、位帶操作優(yōu)缺點(diǎn)

1.優(yōu)點(diǎn)

相比直接操作寄存器代碼更簡潔,運(yùn)行效率更高。避免在多任務(wù),或中斷時出現(xiàn)紊亂等。

2.缺點(diǎn)

操作不當(dāng)(傳入地址參數(shù)不對),容易出現(xiàn)總線Fault。

六、說明

關(guān)于Cortex-M3的位帶操作,詳情可以參看Cortex-M3技術(shù)參考手冊(權(quán)威指南)。 我了解Cortex-M處理器中,Cortex-M3、Cortex-M4都具有位帶操作,Cortex-M0,Cortex-M+好像不支持。具體可以下載相關(guān)的技術(shù)參考手冊查看。 原文標(biāo)題:快速理解STM32位帶操作原理和用途

文章出處:【微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


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

    關(guān)注

    2272

    文章

    10923

    瀏覽量

    357544

原文標(biāo)題:快速理解STM32位帶操作原理和用途

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    STM32 OLED多菜單操作

    stm32 ?oled多菜單操作
    發(fā)表于 10-09 11:01 ?2次下載

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

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

    LM98725高性能1681 MSPS信號處理解決方案

    電子發(fā)燒友網(wǎng)站提供《LM98725高性能1681 MSPS信號處理解決方案.pdf》資料免費(fèi)下載
    發(fā)表于 07-26 10:51 ?0次下載
    LM98725高性能16<b class='flag-5'>位</b>81 MSPS信號處<b class='flag-5'>理解</b>決方案

    STM32H743系列支持帶操作嗎?

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

    大語言模型(LLM)快速理解

    自2022年,ChatGPT發(fā)布之后,大語言模型(LargeLanguageModel),簡稱LLM掀起了一波狂潮。作為學(xué)習(xí)理解LLM的開始,先來整體理解一下大語言模型。一、發(fā)展歷史大語言模型的發(fā)展
    的頭像 發(fā)表于 06-04 08:27 ?1131次閱讀
    大語言模型(LLM)<b class='flag-5'>快速</b><b class='flag-5'>理解</b>

    關(guān)于帶操作的疑問求解

    大家都知道,帶有對應(yīng)的帶別名區(qū),操作帶別名區(qū)就可以寫帶區(qū)的BIT,讀取帶BIT值到內(nèi)部
    發(fā)表于 05-17 07:33

    請問stm8s IO操作如何實(shí)現(xiàn)?

    請教各位了,stm8s IO操作如何實(shí)現(xiàn)像stm32類似的帶操作啊? #define LEDPAout(0), LED = 1; LED
    發(fā)表于 05-09 07:10

    stm32 HAL訪問一個PCIE_SW芯片,偏移地址寬怎么快速適配?

    現(xiàn)在想用stm32 HAL訪問一個PCIE_SW芯片,但是該芯片的偏移地址寬為32,HAL的i2c協(xié)議棧的偏移地址寬為8或者16
    發(fā)表于 04-22 06:41

    STM32F103RGT6帶操作不成功的原因?

    各位大神,我是一個入門級的超級菜鳥,遇到一個問題: 為啥子我同樣的帶操作STM32F103C8T6上操作成功,但是在STM32F103R
    發(fā)表于 04-19 06:32

    stm32F4 64變量操作異常怎么解決?

    stm32F4 64變量使用報錯解決
    發(fā)表于 04-02 07:16

    STM32關(guān)于FLASH的編程對齊錯誤標(biāo)志(PGAERR)的疑問求解

    描述:不允許針對 Flash 執(zhí)行跨越 128 行界限的數(shù)據(jù)編程操作。如果出現(xiàn)這種情況,寫操作將不會執(zhí)行,并且 FLASH_SR 寄存器中的編程對齊錯誤標(biāo)志 (PGAERR) 將置
    發(fā)表于 03-22 07:59

    對于STM32G4系列的MCU,其GPIO的操作是否還支持帶操作

    STM32G4的memory map。GPIO是掛在AHB2總線上的。 但是手冊里面沒有明確找到,其別名區(qū)的起始地址。
    發(fā)表于 03-21 07:34

    STM32G4XX不能夠像STM32F1XX STM32F4XX那樣對GPIO進(jìn)行帶操作呢?

    請教下,在STM32G4XX系列里面,GPIO掛載在AHB2總線上面,地址在0x4800 0000. 是不是也就意味著,STM32G4XX不能夠在像STM32F1XX STM32F4X
    發(fā)表于 03-21 07:16

    如何快速解決轉(zhuǎn)爐軸承磨損問題

    電子發(fā)燒友網(wǎng)站提供《如何快速解決轉(zhuǎn)爐軸承磨損問題.docx》資料免費(fèi)下載
    發(fā)表于 03-11 16:01 ?0次下載

    如何快速修復(fù)攪拌器軸承磨損

    電子發(fā)燒友網(wǎng)站提供《如何快速修復(fù)攪拌器軸承磨損.docx》資料免費(fèi)下載
    發(fā)表于 03-06 15:40 ?0次下載
    怎么玩百家乐官网呀| 菲利宾百家乐现场| 大发888真钱| 百家乐官网足球| 大发888真钱游戏玩法| 真人百家乐官网轮盘| 博彩百家乐五2013124预测| 百家乐官网博彩网排名| 新时代百家乐的玩法技巧和规则 | 人气最高棋牌游戏| 互博百家乐官网的玩法技巧和规则| 现金网开户| 做生意进门风水| 网络百家乐| 澳门百家乐官网娱乐网| 大发888游戏注册| 新濠峰百家乐官网的玩法技巧和规则 | 大发888娱乐城真人视讯服务| 百家乐官网娱乐送白菜| 斗地主百家乐的玩法技巧和规则 | 捷豹百家乐官网的玩法技巧和规则| bet365百家乐| 百家乐网站哪个好| 百家乐官网怎么推算| 乐享百家乐的玩法技巧和规则| 网上百家乐官网| 波克城市棋牌中心| 博E百百家乐娱乐城| 玩百家乐官网怎么才能赢| 大发888迅雷下载免费| 做生意选店铺位置| 镇远县| 欧洲百家乐的玩法技巧和规则| 老k百家乐官网游戏| 德州扑克发牌员| 澳门百家乐家用保险柜| 太阳城百家乐官网如何看路| 大发888wofacai官网| 百家乐龙虎规则| 网上百家乐官网网站导航| 金海岸百家乐娱乐城|