首先,寄存器是什么?
寄存器,是集成電路中非常重要的一種存儲(chǔ)單元,通常由觸發(fā)器組成。在集成電路設(shè)計(jì)中,寄存器可分為電路內(nèi)部使用的寄存器和充當(dāng)內(nèi)外部接口的寄存器這兩類。內(nèi)部寄存器不能被外部電路或軟件訪問,只是為內(nèi)部電路的實(shí)現(xiàn)存儲(chǔ)功能或滿足電路的時(shí)序要求。而接口寄存器可以同時(shí)被內(nèi)部電路和外部電路或軟件訪問,CPU中的寄存器就是其中一種,作為軟硬件的接口,為廣泛的通用編程用戶所熟知。
今天在昨天建好的工程基礎(chǔ)上,簡(jiǎn)單介紹下怎么操作寄存器點(diǎn)亮LED燈。
新建兩個(gè)文件文件,分別命名為led.h和led.c并添加到工程項(xiàng)目中。
進(jìn)行操作的板子中LED1和LED2分別對(duì)應(yīng)PF9和PF10,想控制LED,就要先初始化對(duì)應(yīng)的端口。要初始化就要配置相應(yīng)的寄存器。配置寄存器需要一個(gè)STM32F4xx的參考手冊(cè),我比較菜,只能看中文文檔,看得懂英文的可以直接用英文版,畢竟英文版的是第一手資料。
以第一個(gè)GPIOx_MODER端口模式寄存器為例,要操作的端口分別為9、10,對(duì)應(yīng)18、20位。從電路圖可以知道只要控制輸出的高低電平就可以實(shí)現(xiàn)LED燈的亮滅。所以這里選擇通用輸出模式10。
在輸出類型中中,輸出使能,推挽模式時(shí)雙 MOS 管以方式工作,輸出數(shù)據(jù)寄存器GPIOx_ODR 可控制 I/O輸出高低電平。開漏模式時(shí),只有 N-MOS 管工作,輸出數(shù)據(jù)寄存器可控制 I/O輸出高阻態(tài)或低電平。所以輸出類型應(yīng)選推挽輸出。
端口的輸出速度是端口支持高低電平切換的最高頻率,控制LED燈可以隨便設(shè)置。
端口用于輸入時(shí),端口的上/下拉模式可以控制端口的默認(rèn)狀態(tài)。但現(xiàn)在端口用于輸出,端口受 ODR寄存器影響,ODR寄存器對(duì)應(yīng)端口位初始初始化后默認(rèn)值為 0,端口輸出低電平,所以這時(shí)我們配置無上/下拉模式。
在輸出模式時(shí),操作BSRR和ODR寄存器即可控制端口的電平。這里用ODR寄存器控制。輸入為0時(shí),LED燈亮;輸入為1時(shí),LED燈滅。
這時(shí),GPIO端口的寄存器已經(jīng)配置完成,但是還是點(diǎn)不亮燈。這是為什么捏?
STM32為了降低功耗,每個(gè)外設(shè)都對(duì)應(yīng)一個(gè)時(shí)鐘,這些時(shí)鐘的初始狀態(tài)都是關(guān)閉的,如果外設(shè)想要工作,必須打開相應(yīng)的時(shí)鐘。所有外設(shè)的時(shí)鐘由一個(gè)專門的外設(shè)來管理,叫 RCC。所以最后還要通過RCC_AHB1ENR開啟時(shí)鐘。
主程序
LED源文件
LED頭文件
編譯文件,將程序燒入開發(fā)板,LED燈亮,實(shí)驗(yàn)成功。
-
led燈
+關(guān)注
關(guān)注
22文章
1592瀏覽量
107950 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
MOS管
+關(guān)注
關(guān)注
108文章
2410瀏覽量
66758 -
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355729 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61132
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論