STM32位帶操作公式詳解
#define BITBAND(addr, bitnum) ((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))
支援位帶操作的兩個記憶體區的範圍是:
0x2000_0000-0x200F_FFFF(SRAM區中的最低1MB )0x4000_0000-0x400F_FFFF(片上外設區中的最低1MB )
位帶操作簡單地說,就是把每個位元膨脹成一個 32位的字。當訪問這些字時,就可以達到訪問原始位元的目的(這種說法比較繞,我覺著其實就是給每一位都有一個對應的地址,想訪問這一位,就直接訪問這個地址就行了,上面那個巨集恰好就是計算這個地址的公式) ,比如BSRR暫存器有32個位,那麼可以對映到32個地址上,我們去訪問這32個地址就可以達到訪問32個位元的目的。
從CM3權威指南我們知道:
對於SRAM位帶區的某個位元,記它所在位元組地址為 A,位序號為n(0<=n<=7),則
該位元在別名區的地址為:
AliasAddr = 0x22000000+((A-0x20000000)*8+n)*4=0x22000000+(A-0x20000000)*32+n*4
對於片上外設位帶區的某個位元,記它所在位元組的地址為 A,位序號為 n(0<=n<=7),則
該位元在別名區的地址為:
AliasAddr = 0x42000000+((A-0x40000000)*8+n)*4=0x42000000+(A-0x40000000)*32+n*4
上式中,“*4”表示一個字為 4 個位元組,“*8”表示一個位元組中有 8 個位元。
這個巨集定義後面的算式(addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2)
addr&0xF0000000取出最高的四位,其實就是用於區別SRAM(0x20000000)還是片上外設(0x40000000)的。
+0x2000000對於SRAM位帶區則得到 0x22000000,對於片上外設位帶區則得到0x42000000
(addr&0xFFFFF)等效於(addr&0x000FFFFF),就是遮蔽掉高12位(個人認為遮蔽高12位和遮蔽高4位效果是一樣的,
地址範圍是0x2000_0000-0x200F_FFFF和0x4000_0000-0x400F_FFFF,他無非就是不要那個“2”和“4”)
相關推薦
STM32位帶操作公式詳解
位帶操作公式:#define BITBAND(addr, bitnum) ((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2)) 支援位帶操作的兩個記憶體區的範
15、STM32位帶操作
alt ati 定義 long alias col .com 映射 簡潔 本講主要內容 1.位帶介紹 2.位帶區與位帶別名區地址轉換 3.位帶操作的優點 4.GPIO位帶操作 1.位帶介紹(1)位帶操作在學習51單片機時就已經使用過位操作,比如使用sbi
STM32:簡單位帶操作
2018/4/1STM321.說在前面1.最近剛剛在學stm32,第一個問題就是配置檔案(HARDWARE)的問題,在HARDWARE中只儲存著.c檔案,然而以前因為不正確的設定方式,雖然程式碼邏輯沒錯但是還是跑不出來,所以,一定要使用標準的配置方式2.位帶操作1.以前使用5
POI操作Excel詳解,讀取xls和xlsx格式的文件
shee xss split 類型 後綴 .sh lan xls lin package org.ian.webutil; import java.io.File; import java.io.FileInputStream; import java.io.FileN
安裝MACOS操作步驟詳解
中文 相同 sudo 否則 一次 install -1 感謝 重啟 安裝MACOS操作步驟詳解 作者:尹正傑 版權聲明:原創作品,
C文件操作基礎詳解·········關於fopen,fwrite,,fseek,fgetc的使用。
基礎 user fseek fse app c2c etc 基礎詳解 open 05Y1L7j蝕3UKAhttp://huiyi.docin.com/sina_6355806917 Q托9MCS南9善EU晃喲http://huiyi.docin.com/qfptt159
數學、計算幾何、位運算常見問題詳解
splay nsf let pen ide ont display you size ? 矩陣上的問題(3題) Search a 2D Matrix II public int searchMatrix(int[][] matrix, int target) {
Linux操作系統的安裝以及基本的操作命令詳解
tomcat7 replicat rem 命令詳解 onf 日誌文件 out 橋接 ati 背景:使用的虛擬機安裝Linux 虛擬機使用的是VMware Linux版本:CentOS-6.7-X86 自行下載:CentOS-6.7-x86_64-bin-DVD1.
安卓編程資源文件string中對占位符的使用詳解
cnblogs ava 留言 舉例 image 獲取字符串 取字符 _for 技術 這裏將為你詳細介紹占位符的使用,將其學以致用,可以達到簡化布局文件,減少字符串資源量。 1、在資源文件中的使用。 打開資源文件中的strings.xml文件,進行編輯。如下圖
ubuntu操作命令詳解
ctrl note 箭頭 class 末尾 tail 行數 bsp pos 1.tail tail -f filename :可以動態查看文件的寫入,按ctrl+c結束查看. 要顯示 notes 文件的最後十行,輸入: tail -n -10 notes
Elasticsearch增、刪、改、查操作深入詳解
理解 依據 host aml pri lin mysql 數據信息 src 引言: 對於剛接觸ES的童鞋,經常搞不明白ES的各個概念的含義。尤其對“索引”二字更是與關系型數據庫混淆的不行。本文通過對比關系型數據庫,將ES中常見的增、刪、改、查操作進行圖文呈現。能加深你對ES
SQL Server 表的管理_關於表的操作增刪查改的操作的詳解(案例代碼)
har table 詳解 增刪 .com ble tab SQ eat SQL Server 表的管理_關於表的操作增刪查改的操作的詳解(案例代碼) 概述: 表由行和列組成,每個表都必須有個表名。 SQL CREATE TABLE 語法 CREATE T
玩轉X-CTR100 | 位帶操作-GPIO
宋體 www AC str #define *** io口初始化 art 訪問 更多塔克創新資訊歡迎登陸【塔克社區www.xtark.cn 】【塔克博客www.cnblogs.com/xtark/ 】 STM32F4位帶概念,及位帶的GPIO操作實踐應用。
數據結構 - 從二叉搜索樹說到AVL樹(一)之二叉搜索樹的操作與詳解(Java)
判斷 right 不為 exist avl 輸入 位置 bubuko get 二叉搜索樹(Binary Search Tree),簡稱BST,顧名思義,一顆可以用於搜索的二叉樹。BST在數據結構中占有很重要的地位,一些高級樹結構都是其的變種,例如AVL樹、紅黑樹等,因此
Linux下fdisk命令操作磁碟詳解--新增、刪除、轉換分割槽等
linux下fdisk命令操作磁碟詳解--新增、刪除、轉換分割槽等 fdisk 操作硬碟的命令格式如下: [[email protected] beinan]# fdisk 裝置 比如我們通過 fdisk -l 得知 /dev/hda 或者 /dev/sda 裝置;我們如果想再
位運算及其應用詳解
轉自:http://blog.chinaunix.net/uid-21411227-id-1826986.html 一.邏輯運算子 1.& 位與運算 1) 運算規則 位與運算的實質是將參與運算的兩個資料,按對
QT---之QByteArray關於十六進位制賦值詳解
本文章主要總結QByteArray類的用法,主要是總結如何給QByteArray的物件賦值十六進位制數和顯示該十六進位制數以及十六進位制數在QByteArray中的儲存形式,具體的例項如下所述:(字元表示的十六進位制數:'\xFF') (Qt中QByteArray儲存的十六進位制數是0xff,實
ES Mapping、欄位型別Field type詳解
欄位型別概述 一級分類 二級分類 具體型別 核心型別 字串型別 string,text,keyword 整數型別 integer,long,short,byte 浮點型別 double,float,half_float,scaled_float 邏輯型別 boolean 日期型
Linux常用操作命令+詳解
系統資訊 arch 顯示機器的處理器架構(1) uname -m 顯示機器的處理器架構(2) uname -r 顯示正在使用的核心版本 dmidecode -q 顯示硬體系統部件 - (SMBIOS / DMI) hdparm -i /dev/hda 羅列一個磁碟的架構特性
MySQL檢視操作命令詳解
MySQL檢視操作命令詳解 建立檢視 在MySQL中,建立檢視的完整語法如下: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_l