STM32——GPIO(1)
STM32——GPIO
宗旨:技術的學習是有限的,分享的精神是無限的。
【對單片機的操作就是控制IO口】
一、GPIO(通用輸入輸出口)
1、選定需要的引腳(對應哪一個IO口);
2、配置需要的功能(輸入還是輸出);
3、設置需要的高低電平;
?
二、GPIO寄存器
配置寄存器:輸入還是輸出
數據寄存器:保存輸入電平或將要輸出電平
位控制寄存器:控制電平的輸出
鎖定寄存器:設置某鎖定引腳后,不能修改配置
每4位控制一個引腳。寄存器都是32位的。
?
三、STM32地址映射
Cortex-M3 有 32 根地址線,所以它的尋址空間大小為 2^32 bit=4GB。 ARM 公司設計時,預先把這 4GB 的尋址空間大致地分配好了。地址從 0x4000 0000 至 0x5FFF FFFF( 512MB )的地址分配給片上外設。stm32f10x.h這個文件中重要的內容就是把STM32 的所有寄存器進行地址映射。
AHB總線:(0x4001 8000~0x4001 8000)
APB1總線:(0x4000 0000~0x4001 0000)I2C,UART,DAC,部分定時去等
APB2總線:(0x4001 0000~0x4001 3FFF)GPIO,串口1,ADC及部分定時器;
外設基地址:片上外設的首地址就是外設的基地址0x40000000。STM32 的地址是 32 位的。
總線基地址:總線基地址(AHB/APB1/APB2) = 外設基地址 + 偏移量
寄存器組基地址:寄存器組基地址(GPIOA~E) = 總線基地址 + 偏移量?
#define PERIPH_BASE ((uint32_t)0x40000000) /* 外設基地址 *//* 總線基地址 */ #define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)/*寄存器組基地址*/ #define GPIOA_BASE (APB2PERIPH_BASE + 0x0800) #define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00) #define GPIOC_BASE (APB2PERIPH_BASE + 0x1000) #define GPIOD_BASE (APB2PERIPH_BASE + 0x1400) #define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)typedef struct {__IO uint32_t CRL;__IO uint32_t CRH;__IO uint32_t IDR;__IO uint32_t ODR;__IO uint32_t BSRR;__IO uint32_t BRR;__IO uint32_t LCKR; } GPIO_TypeDef; /* GPIO7個寄存器封裝,寄存器圖中有相對總線的地址偏移*/總結
以上是生活随笔為你收集整理的STM32——GPIO(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于VS2015卸载后,重装无法修改路径
- 下一篇: java已知两坐标求直线长度_java计