国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

快速理解STM32位帶操作原理

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2020-09-03 15:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:strongerHuang

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

一、初識位帶操作

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

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

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

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

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

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

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

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

解釋上面多處出現的關鍵詞

位帶區:支持位帶操作的地址區;

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

三、位帶區->別名區計算公式

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

1.SARM區計算公式

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

2.片上外設區計算公式

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

由于映射關系一樣,所以公式原理也一樣,只是地址不一樣。計算公式需要結合上圖比特的膨脹對應關系來理解。

*8:1個字4個字節;

*4:1個字節8Bit;

四、代碼實現

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

1.RAM位帶操作宏定義

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

2.外設寄存器位帶宏定義

#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數據輸出寄存器輸出1

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

D.讀取PA1數據輸出寄存器

uint8_t Val;

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

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

五、位帶操作優缺點

1.優點

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

2.缺點

操作不當(傳入地址參數不對),容易出現總線Fault。

六、說明

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

文章出處:【微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。


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

    關注

    2309

    文章

    11162

    瀏覽量

    373414

原文標題:快速理解STM32位帶操作原理和用途

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    STM32L072xx:超低功耗32MCU的卓越之選

    STM32L072xx:超低功耗32MCU的卓越之選 在當今的電子設備設計中,低功耗、高性能的微控制器(MCU)是眾多應用的核心需求。ST公司的STM32L072xx系列MCU憑借其出色的特性,在
    的頭像 發表于 03-03 17:35 ?1048次閱讀

    STM32L072xx:超低功耗32MCU的設計指南與應用潛力

    STM32L072xx:超低功耗32MCU的設計指南與應用潛力 在當今電子設備追求低功耗、高性能的時代,STM32L072xx系列微控制器憑借其卓越的特性脫穎而出,成為眾多應用領域的理想選擇。本文
    的頭像 發表于 03-02 17:15 ?535次閱讀

    STM32L062x8:超低功耗32MCU的卓越之選

    STM32L062x8:超低功耗32MCU的卓越之選 在當今的電子設計領域,低功耗、高性能的微控制器(MCU)是眾多應用的核心需求。STMicroelectronics推出的STM32
    的頭像 發表于 03-02 15:20 ?102次閱讀

    STM32L052x6/8:超低功耗32MCU的卓越之選

    STM32L052x6/8:超低功耗32MCU的卓越之選 在當今的電子設備設計中,低功耗、高性能的微控制器(MCU)是眾多應用的核心需求。STM32L052x6/8系列MCU憑借其出色的特性,成為
    的頭像 發表于 02-11 15:20 ?143次閱讀

    STM32L053x6/8:超低功耗32MCU的卓越之選

    STM32L053x6/8:超低功耗32MCU的卓越之選 在電子設計領域,對于高性能、低功耗微控制器的需求與日俱增。STMicroelectronics推出的STM32L053x6/8系列微控制器
    的頭像 發表于 02-10 11:25 ?194次閱讀

    用戶對變量或寄存器進行操作的方法

    嵌入式系統總是要用戶對變量或寄存器進行操作。給定一個整型變量a,寫兩段代碼,第一個設置a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它不變。 考察點:
    發表于 12-23 08:16

    arm單片機位帶操作的原理

    單片機單片機的帶操作(Bit-Banding)是一種特殊的內存映射技術,允許開發者以原子操作的方式對特定的內存進行讀寫,從而提高了對GPIO端口、寄存器以及其他外設單個位的
    發表于 11-25 08:24

    操作的常見錯誤與應對策略

    的,可能會導致數據溢出或丟失。 (三)數據類型表示的理解要點 在嵌入式系統中,不同的數據類型有著不同的表示方式,這一點在進行操作
    發表于 11-24 07:50

    使用操作精準配置單片機寄存器

    項目對效率要求高,推薦使用掩碼操作;如果需要可讀性和維護性,推薦結構體映射寄存器;如果使用Cortex-M架構,帶操作是個不錯的選擇。 1、使用
    發表于 11-24 07:22

    C語言操作

    C 語言操作符包括按與( )、按或(|)、按異或(^)、按取反(~)、左移(<&
    發表于 11-21 07:52

    映射的操作

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

    帶操作的分析

    8051單片機可以直接對某一IO進行讀寫操作,而Cortex-M3的帶操作是8051尋址區的加強版。使用
    發表于 11-18 07:01

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

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

    STM32C011開發(3)----Flash操作

    STM32C011 系列微控制器內置 Flash 存儲器,支持程序存儲與數據保存,具備頁面擦除、雙字寫入、讀寫保護等功能。本文將簡要介紹 STM32C011 的 Flash 結構與特性,并通過實際代碼示例,講解 Flash 的擦除、寫入與讀取等基本
    的頭像 發表于 09-18 16:48 ?4882次閱讀
    <b class='flag-5'>STM32</b>C011開發(3)----Flash<b class='flag-5'>操作</b>

    STM32N6 開箱實驗:如何快速上手最強大的STM32系列?

    STM32N6是有史以來功能最強大的STM32系列STM32N6嵌入了意法半導體專有的Neural-ART加速器和運行頻率為800MHz的ArmCortex-M55內核,提供了迄今為止最高
    的頭像 發表于 09-17 10:37 ?4268次閱讀
    <b class='flag-5'>STM32</b>N6 開箱實驗:如何<b class='flag-5'>快速</b>上手最強大的<b class='flag-5'>STM32</b>系列?