最近一段時(shí)間在學(xué)STM32,感覺(jué)都是在和寄存器打交道,首先先說(shuō)下什么是寄存器。寄存器是中央處理器內(nèi)的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來(lái)暫存指令、數(shù)據(jù)和地址。
STM32的每個(gè)IO口有7個(gè)寄存器控制(1個(gè)IO口應(yīng)該就是一組),分別是兩個(gè)32位的端口配置寄存器,CRL和CRH。兩個(gè)32位的數(shù)據(jù)寄存器IDR和ODR(這上面四個(gè)是重點(diǎn)),一個(gè)32位置位復(fù)位寄存器,一個(gè)16位復(fù)位寄存器,一個(gè)鎖存寄存器LCKR.
________________________________________________________________________________________________________________
端口配置寄存器
端口配置寄存器CRL和CRH有兩部分組成 CNFX和MODEX
通過(guò)設(shè)置這兩個(gè)來(lái)確定模式 (1)GPIO_Mode_AIN 模擬輸入
(2)GPIO_Mode_IN_FLOATING 浮空輸入
(3)GPIO_Mode_IPD 下拉輸入
(4)GPIO_Mode_IPU 上拉輸入
(5)GPIO_Mode_Out_OD 開(kāi)漏輸出
(6)GPIO_Mode_Out_PP 推挽輸出
(7)GPIO_Mode_AF_OD 復(fù)用開(kāi)漏輸出
(8)GPIO_Mode_AF_PP 復(fù)用推挽輸出
如果IO口是0-7的話用CRL寄存器,如果是8-15的話用CRH寄存器
使用說(shuō)明: MODE 模式
00 輸入模式
01 輸出模式 10MHZ
10 輸出模式 2MHZ
11 輸出模式 50MHZ
CNF 所處模式 表達(dá)含義
00 輸入 模擬輸入模式
01 輸入 浮空輸入模式
10 輸入 上拉\下拉輸入模式
11 輸入 保留
00 輸出 推挽輸出模式
01 輸出 開(kāi)漏輸出模式
10 輸出 復(fù)用功能 推挽輸出模式
11 輸出 復(fù)用功能開(kāi)漏輸出模式
使用方法:
首先是APB2總線上的外設(shè)始能寄存器,只要加外設(shè)就要將這個(gè)使能
RCC->APB2ENR |= 1<<幾位 根據(jù)表來(lái)說(shuō)
然后開(kāi)始配置
GPIOB->CRH &= 0XFFFFFFF0; 通過(guò)與將要寫(xiě)數(shù)據(jù)的位進(jìn)行清空
GPIOB->CRH |= 0X03; 在要寫(xiě)的為寫(xiě)內(nèi)容
GPIOB->ODR = 1<<8; 在第幾位寫(xiě)入數(shù)據(jù)
ODR是輸出數(shù)據(jù)寄存器
GPIO端口使用舉例
__________________________________________________________________________________________________________________
流水燈的.c文件
void LED_Init (void)
{
//兩個(gè)RCC是使能時(shí)鐘
RCC->APB2ENR |= 1<<3;
RCC->APB2ENR |= 1<<6;
GPIOB->CRL &= 0XFF0FFFFF;
GPIOB->CRL |= 0X00300000;
GPIOB->ODR = 1 << 5;
GPIOE->CRL &= 0XFF0FFFFF;
GPIOE->CRL|=0X00300000; //PE.5
GPIOE->ODR|=1<<5; //PE.5
}
.h文件
# define LED0 PBout (5)
# define LED1 PEout (5)
因?yàn)槭禽敵觯杂肞Xout (引腳號(hào))
——————————————————————————————————————————————
按鍵的初始化
void KEY_Init (void)
{
RCC->APB2ENR |= 1<<2;
RCC->APB2ENR |= 1<<6;
GPIOA->CRL &= 0XFFFFFF0;
GPIOA->CRL |= 0X0000008;
// GPIOA->ODR |= 1<<1; GPIOE->CRL &= 0XFFF000FF;
GPIOE->CRL |= 0X00088800;
GPIOE->ODR |= 7<<2; //7<<2 從7的位置右移5位
}
注意.h文件
#define KEY0 PEin(4) //PE4
#define KEY1 PEin(3) //PE3
#define KEY2 PEin(2) //PE2
#define KEY3 PAin(0) //PA0 WK_UP
因?yàn)槭禽斎耄杂玫氖荘Xin (引腳號(hào))