欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

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

1 定義

首先需要明確下,位段,位帶和別名區(qū)這三個(gè)名詞

名詞定義

位段

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

位帶

CortexM3參考手冊使用的

別名區(qū)

地址總線上用來位訪問地址區(qū)域,

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

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

2 位帶操作

2.1 范圍

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

支持位帶操作的兩個(gè)內(nèi)存區(qū)的范圍是:

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

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

2.2 位帶操作

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

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

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

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

上式中,“*4”表示一個(gè)字為 4 個(gè)字節(jié),“*8”表示一個(gè)字節(jié)中有 8 個(gè)比特。

圖片

圖片

2.3代碼實(shí)現(xiàn)

把“位帶地址+位序號”轉(zhuǎn)換別名地址宏為:

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

把該地址轉(zhuǎn)換成一個(gè)指針:

#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:

區(qū)分SRAM還是外設(shè),如果是外設(shè),結(jié)果為4,再加0x2000000就等于0x4200000,0x42000000就是外設(shè)別名位帶區(qū)。如果是SRAM,結(jié)果為2,再加上0x2000000就等于0x22000000,0x22000000就是SRAM別名位帶區(qū)。

addr & 0x00ffffff:

屏蔽了最高2位,相當(dāng)于減去0x20000000或者0x40000000。因?yàn)槲粠^(qū)的有效范圍是1M,即0x100000,這樣子就做到了低6位有效。

<< 5:

等價(jià)于乘以32

<< 2:

等價(jià)于乘以4

特別提醒

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

3 位段的優(yōu)點(diǎn)

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

位帶操作還能用來化簡跳轉(zhuǎn)的判斷。

當(dāng)跳轉(zhuǎn)依據(jù)是某個(gè)位時(shí),以前必須這樣做

1、讀取整個(gè)寄存器

2、掩蔽不需要的位

3、比較并跳轉(zhuǎn)

使用位帶操作后

1、從未帶別名區(qū)讀取狀態(tài)位

2、比較并跳轉(zhuǎn)

圖片

當(dāng)然,對于寫入操作也從4步精簡到3步

圖片

聲明:本文內(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)注

    38

    文章

    7531

    瀏覽量

    164420
  • STM32
    +關(guān)注

    關(guān)注

    2273

    文章

    10926

    瀏覽量

    357815
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1217

    瀏覽量

    52445
  • MCS51單片機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    14734
  • SRAM控制器
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    5922
收藏 人收藏

    評論

    相關(guān)推薦

    STM32學(xué)習(xí)筆記-GPIO做為輸出時(shí)操作方法

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

    AVR單片機(jī)的端口操作方法

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

    AVR單片機(jī)的端口操作方法解析

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

    C語言的操作方法

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

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

    硬件操作優(yōu)勢的是什么?硬件帶bitband操作方法有哪些?
    發(fā)表于 01-17 06:58

    GPIO引腳操作方法概述

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

    WinCE文件目錄定制及內(nèi)存調(diào)整的操作方法

    本文介紹了WinCE文件目錄定制及內(nèi)存調(diào)整的操作方法。WinCE的文件目錄結(jié)構(gòu)以及文件的位置都是在DAT文件中定義的。所有的da
    發(fā)表于 10-18 10:09 ?982次閱讀

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

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

    LED光電參數(shù)定義及其詳解

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

    詳細(xì)圖文剖析STM32單片機(jī)串口一鍵下載電路與操作方法

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

    寄存器操作方法_對寄存器操作的通用方法總結(jié)

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

    電子測力計(jì)的操作方法

    電子測力計(jì)正確操作方法
    發(fā)表于 04-17 15:57 ?2656次閱讀

    STM32操作

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

    AD18操作方法

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

    STM32F407入門開發(fā): 操作

    STM32F407的操作可以實(shí)現(xiàn)類似51單片機(jī)中寄存器的操作方法操作GPIO口代碼簡潔方便。 關(guān)于
    的頭像 發(fā)表于 05-28 13:50 ?3743次閱讀
    <b class='flag-5'>STM32</b>F407入門開發(fā): <b class='flag-5'>位</b>帶<b class='flag-5'>操作</b>