pb的基位址0x40010c00
pe的基位址0x40011800
pb5設定:
• crl:位址0x4001 0c00 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x3,其他位保持不變。
• odr: 位址0x4001 0c00 + 0x0c。值:odr[5]=0亮或1滅,
其他位保持不變
pe5設定:
• crl:位址0x4001 1800 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x3,其他位保持不變。
• odr: 位址0x4001 1800 + 0x0c。值:odr[5]=0亮或1滅,
其他位保持不變
#include
"sys.h"
#include
"delay.h"
#define gpiob_base (0x40010c00);
#define gpiob_crl *(unsigned int*)(gpiob_base + 0x00);
#define gpiob_odr *(unsigned int*)(gpiob_base + 0x0c);
#define gpioe_base (0x40011800);
#define gpioe_crl *(unsigned int*)(gpioe_base + 0x00);
#define gpioe_odr *(unsigned int*)(gpioe_base + 0x0c);
intmain
(void
)}
2. bsrr寫方式:
pb的基位址0x4001 0c00
pe的基位址0x4001 1800
pb5設定:
• crl:位址0x4001 0c00 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x11,其他位保持不變。
• bsrr: 位址0x4001 0c00 + 0x10。值:bsrr[5]=1滅或
bsrr[21]=1亮 ,其他位為0
pe5設定:
• crl:位址0x4001 1800 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x11,其他位保持不變。
• bsrr: 位址0x4001 1800 + 0x10。值:bsrr[5]=1滅或
bsrr[21]=1 亮,其他位為0
#include
"sys.h"
#include
"delay.h"
#define gpiob_base (0x40010c00);
#define gpiob_crl *(unsigned int*)(gpiob_base + 0x00);
#define gpiob_bsrr *(unsigned int*)(gpiob_base + 0x10);
#define gpioe_base (0x40011800);
#define gpioe_crl *(unsigned int*)(gpioe_base + 0x00);
#define gpioe_bsrr *(unsigned int*)(gpioe_base + 0x10);
intmain
(void
)}
3. bsrr+brr寫方式:
pb的基位址0x40010c00
pe的基位址0x40011800
pb5設定:
• crl:位址0x4001 0c00 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x11,其他位保持不變。
• bsrr: 位址0x4001 0c00 + 0x10。值:bsrr[5]=1滅。brr:
位址0x4001 0c00 + 0x14.。值:brr[5]=1亮 ,其他位為0
pe5設定:
• crl:位址0x4001 1800 + 0x00。值:cnf5[1:0]=00、
mode5[1:0]=11,故crl[23:20]=0x11,其他位保持不變。
• bsrr: 位址0x4001 1800 + 0x10。值:bsrr[5]=1滅。brr:
位址0x4001 1800 + 0x14,brr[5]=1 亮,其他位為0
#include
"sys.h"
#include
"delay.h"
#define gpiob_base (0x40010c00);
#define gpiob_crl *(unsigned int*)(gpiob_base + 0x00);
#define gpiob_bsrr *(unsigned int*)(gpiob_base + 0x10);
#define gpioe_base (0x40011800);
#define gpioe_crl *(unsigned int*)(gpioe_base + 0x00);
#define gpioe_bsrr *(unsigned int*)(gpioe_base + 0x10);
intmain
(void
)}
4. 位帶操作方式:#include
"sys.h"
#include
"delay.h"
#define gpiob_base (0x40010c00);
#define gpiob_crl *(unsigned int*)(gpiob_base + 0x00);
#define gpiob_odr_address (gpiob_base + 0x0c);
#define gpioe_base (0x40011800);
#define gpioe_crl *(unsigned int*)(gpioe_base + 0x00);
#define gpioe_odr_address (gpioe_base + 0x0c);
#define bitband(addr, bitnum) ((addr & 0xf0000000)+0x2000000+((addr &0xfffff)<<5)+(bitnum<<2))
#define mem_addr(addr) *((volatile unsigned long *)(addr))
#define bit_addr(addr, bitnum) mem_addr(bitband(addr, bitnum))
#define pbout(n) bit_addr(gpiob_odr_address,n)
//輸出
#define peout(n) bit_addr(gpioe_odr_address,n)
//輸出
intmain
(void
)}
野火STM32暫存器配置GPIO
1 讀庫函式的一些巨集定義和結構體 define io voiatile typedef unsigned int uint32 t typedef unsigned shrot uint16 t 以結構體的形式定義好了外設暫存器後,使用結構體前還需要給結構體的首位址賦值,才能訪問到需要的暫存器 e...
stm32之GPIO暫存器學習
gpio即通用輸入 輸出 general purpose input output 包括 兩個32位的配置暫存器 gpiox crl,gpiox crh 兩個32位的資料暫存器 gpiox idr,gpiox odr 乙個32位的 set reset 暫存器 gpiox bsrr 一位16位的 re...
STM32總結之GPIO程式設計過程
用暫存器點亮led的過程 1 通過原理圖找到要點亮的led燈對應的gpio口 2.通過stm32手冊找到要操作的暫存器,找到這個gpio的基位址,基位址 位址偏移 目標暫存器的位址 3.編碼 1.開啟對應的gpio的時鐘。2.通過操作crl暫存器將對應的gpio口設定為推挽輸出模式,並設定一 個翻轉...