stm32点亮LED的有关寄存器配置CRL、CRH、IDR、ODR
1、先了解io口
32的io口可以由軟件配置寄存器為8種模式:
單io口寄存器必須按32位字被訪問(wèn)
32 的每個(gè) io端口 都有 7 個(gè)寄存器控制:
兩個(gè)32位 端口配置 寄存器-- CRL和CRH 兩個(gè)32位 數(shù)據(jù) 寄存器-- IDR和ODR 一個(gè)32位 置位/復(fù)位 寄存器-- BSRR 一個(gè)16位 復(fù)位 寄存器-- BRR 一個(gè)32位 鎖存 寄存器-- LCKR常用的4個(gè)寄存器-- CRL、CRH、IDR、ODR
2、來(lái)看CRL和CEH:
CRL 和 CRH 控制著每個(gè) IO 口的模式及輸出速率
io口配置表:
輸出模式配置:
端口低配置寄存器 CRL 的描述:
此寄存器的復(fù)位值:0x4444 4444
CRL 控制著那幾個(gè)IO端口(A–G)的低 8 位端口的模式,
例如:A0—A7由CRL控制,A8—A15由CRH控制
每個(gè)IO口占用CRL的4個(gè)位,高兩位為CNFy[1:0],低兩位為MODE
下面有幾個(gè)配置模式常用的值:
- 0X0 表示模擬輸入模式(ADC 用) - 0X3 表示推挽輸出模式(做輸出口用,50M 速率) - 0X8 表示上/下拉輸入模式(做輸入口用) - 0XB 表示復(fù)用輸出(使用 IO 口的第二功能,50M 速率)舉例:將A端口的第11位設(shè)置為上拉輸入,12位設(shè)置為推挽輸出
11位和12位屬于高8位,由CRH控制,然后一個(gè)引腳占4位 11=1000 12=1110 根據(jù)上表來(lái)配置的
代碼的寫法:
GPIOC->CRH &= 0XFFF00FFF; //清除原來(lái)的設(shè)置 GPIOC->CRH |= 0X00038000; //配置11輸入 12輸出 GPIOC->ODR = 1<<11; //11上拉3、下面到 IDR 寄存器
IDR 是一個(gè)端口輸入 數(shù)據(jù)寄存器,只用了低 16 位。該寄存器為 只讀 寄存器,并且只能以 16 位的形式讀出
4、ODR 是一個(gè)端口輸出數(shù)據(jù)寄存器
也只用了低 16 位。該寄存器為可 讀寫,從該寄存器讀出來(lái)的數(shù)據(jù)可以用于判斷當(dāng)前 IO 口的輸出狀態(tài)。而向該寄存器寫數(shù)據(jù),則可以控制某個(gè) IO 口的輸出電平。該寄存器的各位描述如下圖所示
配置好這幾個(gè)寄存器,就可以讓32的IO口來(lái)控制LED燈了
總結(jié)
以上是生活随笔為你收集整理的stm32点亮LED的有关寄存器配置CRL、CRH、IDR、ODR的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。