那曲檬骨新材料有限公司

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

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

3天內不再提示

STM32位段的定義及其操作方法詳解

冬至配餃子 ? 來源:知曉編程 ? 作者:Firefly ? 2023-07-11 16:40 ? 次閱讀

1 定義

首先需要明確下,位段,位帶和別名區這三個名詞

名詞定義

位段

STM32用戶參考手冊使用的名字

位帶

CortexM3參考手冊使用的

別名區

地址總線上用來位訪問地址區域,

所以說,位段和位帶是一個意思,是不同手冊的不同叫法。

由上述的名詞解釋得知,位帶功能并不是STM32獨有的,是CortexM3的功能(CortexM4也有這樣的功能)。MCS51有位操作,以一位(bit)為數據對象的操作,MCS51可以簡單的將P1口的第2位獨立操作:P1.2=0;P1.2=1 ;這樣就把P1口的第三個腳(bit2)置0置1。而STM32的位段、位帶別名區最重要的就為了實現這樣的功能。

2 位帶操作

2.1 范圍

位帶是有范圍的,并不是CortexM3全部地址空間都支持的。在 CM3中,有兩個區中實現了位帶。其中一個是 SRAM 區的最低 1MB 范圍,第二個則是片內外設區的最低 1MB 范圍。這兩個區中的地址除了可以像普通的 RAM 一樣使用外,它們還都有自己的“位帶別名區”,位帶別名區把每個比特膨脹成一個 32 位的字。當你通過位帶別名區訪問這些字時,就可以達到訪問原始比特的目的。

支持位帶操作的兩個內存區的范圍是:

0x2000_0000‐0x200F_FFFF (SRAM 區中最低1MB區域)

0x4000_0000‐0x400F_FFFF (片上外設區中的最低 1MB)

2.2 位帶操作

對 SRAM 位帶區的某個比特,記該比特所在字節的地址為A,位序號為 n (0<=n<=7),則它在別名區的地址為:

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

對于片上外設位帶區的某個比特,記該比特所在字節的地址為A,位序號為 n (0<=n<=7),則該比特在別名區的地址為:

AliasAddr0x42000000 + ((A‐0x40000000)*8+n)*4 = 0x42000000 + (A‐0x40000000)*32 + n*4

上式中,“*4”表示一個字為 4 個字節,“*8”表示一個字節中有 8 個比特。

圖片

圖片

2.3代碼實現

把“位帶地址+位序號”轉換別名地址宏為:

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000 + ((addr &0xFF FFF)< bitnum 

把該地址轉換成一個指針:

#define MEM_ADDR(addr, bitnum) *((volatile unsigned long *)((addr & 0xF0000000)+0x2000000 + ((addr &0xFF FFF)< 2)))

其中

addr的取值范圍:

0x2000_0000‐0x200F_FFFF

0x4000_0000‐0x400F_FFFF

注意:addr取值要32位對齊

bitnum的取值范圍:

0-31

解析:

(addr & 0xf0000000) + 0x02000000:

區分SRAM還是外設,如果是外設,結果為4,再加0x2000000就等于0x4200000,0x42000000就是外設別名位帶區。如果是SRAM,結果為2,再加上0x2000000就等于0x22000000,0x22000000就是SRAM別名位帶區。

addr & 0x00ffffff:

屏蔽了最高2位,相當于減去0x20000000或者0x40000000。因為位帶區的有效范圍是1M,即0x100000,這樣子就做到了低6位有效。

<< 5:

等價于乘以32

<< 2:

等價于乘以4

特別提醒

當你使用位帶功能時,要訪問的變量必須用 volatile 來定義。因為 C 編譯器并不知道同一個比特可以有兩個地址。所以就要通過 volatile,使得編譯器每次都如實地把新數值寫入存儲器,而不再會出于優化的考慮。

3 位段的優點

最容易想到的就是通過 GPIO 的管腳來單獨控制每盞 LED 的點亮與熄滅。另一方面,也對操作串行接口器件提供了很大的方便(典型如 74HC165,CD4094)。位帶操作可以把代碼縮小, 速度更快,效率更高,更安全。總之位帶操作對于硬件 I/O 密集型的底層程序最有用處了

位帶操作還能用來化簡跳轉的判斷。

當跳轉依據是某個位時,以前必須這樣做

1、讀取整個寄存器

2、掩蔽不需要的位

3、比較并跳轉

使用位帶操作后

1、從未帶別名區讀取狀態位

2、比較并跳轉

圖片

當然,對于寫入操作也從4步精簡到3步

圖片

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

    關注

    38

    文章

    7528

    瀏覽量

    164345
  • STM32
    +關注

    關注

    2272

    文章

    10924

    瀏覽量

    357582
  • GPIO
    +關注

    關注

    16

    文章

    1216

    瀏覽量

    52379
  • MCS51單片機
    +關注

    關注

    0

    文章

    24

    瀏覽量

    14728
  • SRAM控制器
    +關注

    關注

    0

    文章

    11

    瀏覽量

    5916
收藏 人收藏

    評論

    相關推薦

    STM32學習筆記-GPIO做為輸出時操作方法

    操作方法。GPIOx_ODR: 端口輸出數據寄存器,它的31:16保留不用,15:0對應x的相應引腳,他只能以16方式操作。GPIOx_BSRR:端口
    發表于 10-07 15:51

    AVR單片機的端口操作方法

    一、常規方法AVR單片機的各類教材或編程應用參考資料,對介紹的端口操作方法不外乎宏定義及整體和某個常量相或、相與來實現某一單個位狀態的改變。如:PORT&=-(1《1);等價于:PO
    發表于 07-13 08:11

    AVR單片機的端口操作方法解析

    的端口操作方法不外乎宏定義及整體和某個常量相或、相與來實現某一單個位狀態的改變。如:PORT&=-(1《1);等價于:PORTB&=oxfd;作用是PB1清零而其余不變。與之類似的
    發表于 11-23 08:35

    C語言的操作方法

    使用 C語言對寄存器賦值時,我們常常要求只修改該寄存器的某幾位的值,且其它的寄存器不變,這個時候我們就需要用到 C 語言的操作方法了。1. 把變量的某位清零此處我們以變量 a代表寄存器,并假設
    發表于 11-26 08:00

    硬件帶bitband操作方法有哪些?

    硬件操作優勢的是什么?硬件帶bitband操作方法有哪些?
    發表于 01-17 06:58

    GPIO引腳操作方法概述

    :原則 - 不能影響到其他三、STM32F103的GPIO操作方法1、看原理圖確定引腳2、再看芯片手冊(1)時鐘使能(2)設置GPIOB0為GPIO、用作輸出(3)怎么設置GPIOB0的輸出電平?四、
    發表于 01-20 07:38

    WinCE文件目錄定制及內存調整的操作方法

    本文介紹了WinCE文件目錄定制及內存調整的操作方法。WinCE的文件目錄結構以及文件的位置都是在DAT文件中定義的。所有的da
    發表于 10-18 10:09 ?979次閱讀

    新A8L加裝倒車影像和激活的操作方法詳解

    新A8L加裝倒車影像和激活的操作方法詳解,感興趣的小伙伴們可以看看。
    發表于 08-03 16:15 ?36次下載

    LED光電參數定義及其詳解

    LED光電參數定義及其詳解
    發表于 02-08 00:50 ?21次下載

    詳細圖文剖析STM32單片機串口一鍵下載電路與操作方法

    在此介紹STM32單片機串口一鍵下載電路與操作方法詳解
    的頭像 發表于 12-31 23:07 ?4.7w次閱讀
    詳細圖文剖析<b class='flag-5'>STM32</b>單片機串口一鍵下載電路與<b class='flag-5'>操作方法</b>

    寄存器操作方法_對寄存器操作的通用方法總結

    本文主要詳解寄存器操作方法以及對寄存器操作的通用方法總結,具體的跟隨小編來了解一下。
    的頭像 發表于 05-22 15:53 ?2.3w次閱讀

    電子測力計的操作方法

    電子測力計正確操作方法
    發表于 04-17 15:57 ?2648次閱讀

    STM32操作

    操作:將一個重新定義一個字的帶別名來操作
    發表于 11-26 18:06 ?12次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>

    AD18操作方法

    AD18操作方法
    發表于 03-28 15:04 ?0次下載

    STM32F407入門開發: 操作

    STM32F407的操作可以實現類似51單片機中寄存器的操作方法操作GPIO口代碼簡潔方便。 關于
    的頭像 發表于 05-28 13:50 ?3730次閱讀
    <b class='flag-5'>STM32</b>F407入門開發: <b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>
    战神国际娱乐城| 澳门百家乐官网走势图怎么看| 百家乐哪条路准| 百家乐官网凯时娱乐平台| 网上大发扑克| 黄金百家乐的玩法技巧和规则 | bet365体育在线下载| 菲律宾百家乐娱乐平台| 米其林百家乐官网的玩法技巧和规则| 百家乐官网游戏解密| 澳门赌场女| 大发888开户注册哪家好| 破战百家乐的玩法技巧和规则| 属蛇和属猪做生意| 百家乐官网发牌靴发牌盒| 大家赢娱乐城| 大发888官网e世博官方网站| 网上百家乐骗人的吗| 百家乐官网红桌布| 任我赢百家乐官网软件| 百家乐官网一直下注庄家| 皇冠网h| 大发888网站多少| 威尼斯人娱乐城位置| 百家乐破解仪| 百家乐开户导航| CEO百家乐现金网| 百家乐庄闲必赢| 网上百家乐官网赌博经历| 百家乐官网软件辅助器| 高级百家乐官网出千工具| 威尼斯人娱乐城平台| 威尼斯人娱乐城信誉好不好| 威尼斯人娱乐城--老品牌值得您信赖 | 百家乐在发牌技巧| 百家乐怎样做弊| 百家乐破解赌戏玩| 风水学24山看水法| 太阳城百家乐口诀| 玩百家乐怎么能赢呢| 大发888黄金版网址|