gpioc->odr |=(0<<2); // 匯流排操作,即操作整個暫存器.
在51微控制器中
p0=0xfe; //匯流排操作.
sbit led1=p0^0; //位操作,即操作暫存器中的某一位.
led1 =0;
在stm32中並沒有sbit這樣的關鍵字.但是我們可以用位帶操作實現位操作.
位帶操作
在 stm32 中,有兩個地方實現了位帶,乙個是 sram 區(存放**)的最低 1mb 空間,令乙個是外設區最低 1mb 空間。這兩個 1mb 的空間除了可以像正常的 ram 一樣操作外,他們還有自己的位帶別名區,位帶別名區把這 1mb 的空間的每
乙個位膨脹成乙個 32 位的字(4個位元組),當訪問位帶別名區的這些字時,就可以達到訪問位帶區某個位元位的目的.
位帶操作的公式
外設位帶區與外設位帶別名區的位址轉換: alisaaddr=0x42000000+(a-0x40000000)*8*4+n*4
sram位帶區與sram位帶別名區位址轉換: alisaaddr=0x22000000+(a-0x20000000)*8*4+n*4
其中:a:表示操作的那個位暫存器所在的暫存器位址
n:位號(第幾位)
對上面式子的解釋:
alisaaddr=位帶別名區基位址+(暫存器位址-暫存器基位址)[偏移多少個位元組]*8[乙個位元組8位]*4[每個位膨脹4個位元組] [這是第0位]+n*4[第n個位膨脹的位元組說]
理解要點:位帶區的乙個位在位帶別名區膨脹位4個位元組
位帶操作的總公式
alisaaddr =((addr&0xf0000000)+0x02000000+((addr&0x00ffffff)<<5)+(bitnum<<2))
其中:addr:要操作的暫存器位址.(暫存器對映表中,每個外設位址+偏移位址)
bitnum:位號,即暫存器的第幾位
對上面式子的解釋: addr&0xf0000000:為了取出4和2,用來區分是外設還是sram.然後+0x20000000就等於外設/sram位帶別名區的起始位址
add&0x00ffffff0x00ffffff:遮蔽掉高2位,外設位帶區的高位址位0x4010 0000,sram的位帶區高位址為0x2010 0000, (0x4010 0000 –0x40000000) 和(0x2010 0000-0x200000)在求偏移位址相減的時候只要第四位有效,所以就把剩下的高兩位遮蔽掉,剩下的6位與f相與即可.
點亮led的原始碼
我們在上次的**中繼續新增:
main為:
#include "stm32f10x.h" // 相當於51微控制器中的 #include#include "bsp_led.h"
#include "bsp_key.h"
#define soft_delay delay(0x0fffff);
//void delay(__io u32 ncount);
#define gpioc_odr_addr (gpioc_base+0x0c)
#define pcout(bitnum) *(unsigned
int *)((gpioc_odr_addr&0xf0000000)+0x02000000+((gpioc_odr_addr &0x00ffffff)<<5)+(bitnum<<2))
#define gpioc_idr_addr (gpioc_base+0x08)
#define pcin(bitnum) *(unsigned
int *)((gpioc_idr_addr&0xf0000000)+0x02000000+((gpioc_idr_addr &0x00ffffff)<<5)+(bitnum<<2))
void delay( uint32_t count)
int main(void)
}}
GPIO 位帶操作
gpio 位帶操作 本章參考資料 stm32f4xx 中文參考手冊 儲存器和匯流排構架章節 gpio 章節,cortex m4 核心程式設計手冊 2.2.5 bit banding。學習本章時,配套這些參考資料學習效果 會更佳。位操作就是可以單獨的對乙個位元位讀和寫,這個在 51 微控制器中非常常見...
F3不能用位帶操作GPIO之原由
最近用到stm32f303,在修改io的時候,覺得用庫操作太麻煩了,要自己乙個乙個修改,用巨集定義也不解決,自然就會想到用位帶操作。查m4的手冊知道m4也是支援位帶操作,f3系列也是屬於m4核心,而且在405也是用位帶操作,覺得f303也是一樣可以做位帶操作。直接先修改乙個io,除錯卻發現在,io電...
推挽輸出和開漏輸出 GPIO輸入與輸出設定
gpio 也稱為通用輸入 輸出 是控制器中最簡單也是最重要的配置。但即便如此,io也有各種各樣的型別和配置選項,有輸入,輸出,上拉,下拉,推挽等。雖然我們天天都和它打交道,但是你真的了解其中的配置嗎?通常,gpio輸入主要通過以下三種方式之一進行配置 高阻抗 hi z,也稱為浮動floating 上...