娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

[課程-014位帶操作——GPIO的輸入和輸出控制]

發布者:BlissfulHeart最新更新時間:2025-02-25 來源: elecfans關鍵字:位帶操作  GPIO  采樣數據 手機看文章 掃描二維碼
隨時隨地手機看文章

一、概念性

什么是位帶操作

位帶操作就是可以單獨對一個比特位讀和寫。在51單片機中,通過sbit關鍵字來實現位定義。


對于STM32位帶區和位帶別名區的理解

STM32里沒有這樣的關鍵字,但可以通過位帶別名區來實現。


想要控制這些bit,就可以通過訪問和控制位帶別名區的一個32bit的字(因為stm32單片機以32bit為單位操作最為高效),來控制位帶區內的任意一位。


一個位帶區的位對應位帶別名區的四個字節(32bit)。


SRAM存儲代碼的區域。


二 、位帶區和位帶別名區的地址轉換

- 地址關系

image.png

(一) 外設位帶區和位帶別名區

AliasAddr = 0x4200 0000 + (Addr-0x4000 0000)*8*4 + n*4

公式的解釋


(Addr-0x4000 0000)得到的是相差幾個字節


*8是因為一個字節8個位


*4是因為一個位在位帶別名區內要膨脹成4個位


+ n*4 是因為某一個位號在位帶別名區內要膨脹成4個位


(二) SRAM位帶區和SRAM位帶別名區

AliasAddr = 0x2200 0000 + (Addr-0x2000 0000)*8*4 + n*4

(三) 外設和SRAM統一轉化處理公式

((addr & 0xF000 0000)+0X0200 0000 + ((addr&0x00FF FFFF)<<5)+(bitnum<<2))

addr 要操作的位所在寄存器地址


bit num 寄存器的第幾位


三、實操

(一) 代碼分析

#include 'stm32f10x.h'#include 'bsp_led.h'#include 'bsp_key.h'#define GPIOB_ODR_Addr      (GPIOB_BASE+0x0C)#define PBout(n)            *(unsigned int *)((GPIOB_ODR_Addr & 0xF0000000)+0X02000000+((GPIOB_ODR_Addr&0x00FFFFFF)<<5)+(n<<2))int main(void){

    LED_GPIO_Config(LED_R_GPIO_PIN);

    while(1)

    {

        PBout(5) = 1;

        //GPIO_ResetBits(LED_GPIO_PORT,LED_R_GPIO_PIN);

        Delay(0xFFFFF);

        

        PBout(5) = 0;

        //GPIO_SetBits(LED_GPIO_PORT,LED_R_GPIO_PIN);

        Delay(0xFFFFF);

    }}

位帶公式


((addr & 0xF000 0000)+0X0200 0000 + ((addr&0x00FF FFFF)<<5)+(bitnum<<2))

位帶宏定義


#define GPIOB_ODR_Addr      (GPIOB_BASE+0x0C)#define PBout(n)            *(unsigned int *)((GPIOB_ODR_Addr & 0xF0000000)+0X02000000+((GPIOB_ODR_Addr&0x00FFFFFF)<<5)+(n<<2))

位帶公式,經編譯后,運算得到的值只是一個數,芯片無法識別為地址。


要想識別為地址,需要將這個數強制類型轉換為地址,加(unsigned int *)


經過轉換后,要用一個指針指向此地址,需要加``*`


變量n在PBout(n)作為一個未知數的作用,#define很強啊。


綜上,實現位帶操作,需要兩個宏定義


一是某一外設地址=基地址+偏移地址


二是將Pxout(n)、Pxint(n)進行宏定義



關鍵字:位帶操作  GPIO  采樣數據 引用地址:[課程-014位帶操作——GPIO的輸入和輸出控制]

上一篇:GPIO8種模式的原理
下一篇:單片機位操作詳解

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 香格里拉县| 肇庆市| 海宁市| 康马县| 丁青县| 永丰县| 清涧县| 武夷山市| 包头市| 澄迈县| 扎兰屯市| 黄石市| 平度市| 财经| 潜山县| 小金县| 黄大仙区| 武陟县| 五峰| 嵊泗县| 竹山县| 莒南县| 岑巩县| 嘉义县| 和顺县| 广德县| 大余县| 勃利县| 庆元县| 扎兰屯市| 河北省| 汉沽区| 江孜县| 黔江区| 绥阳县| 定兴县| 东乡| 新宾| 米脂县| 博白县| 方城县|