找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2720|回復(fù): 0
收起左側(cè)

GPIO流水燈—基于Stm32CubeMX創(chuàng)建工程實(shí)現(xiàn)流水燈

[復(fù)制鏈接]
ID:320660 發(fā)表于 2020-7-8 15:51 | 顯示全部樓層 |閱讀模式

一、了解GPIO結(jié)構(gòu)

二、GPIO的工作模式

GPIO有8種工作模式

1.輸入浮空

當(dāng)GPIOx_ CRL 或GPIOx_CRH 寄存器的CNF[1:0]位設(shè)置為01,并且MODE[1:O]位設(shè)置為00時(shí),對(duì)應(yīng)引腳被設(shè)置為浮空輸入模式,該模式也是STM32復(fù)位之后默認(rèn)模式。浮空輸入模式是相對(duì)與上拉或者下拉輸入模式,浮空就是不上拉也不下拉。浮空輸入模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-2。

I/O引腳信號(hào)接入到施密特觸發(fā)器的輸入端,在每來一個(gè)APB2時(shí)鐘脈沖就把輸入端的信號(hào)傳輸?shù)接|發(fā)器的輸出端,施密特觸發(fā)器的輸出端又是與輸入數(shù)據(jù)寄存器(GPIOx_IDR)連通的,所以該數(shù)據(jù)就保存在輸入數(shù)據(jù)寄存器內(nèi),寄存器本身就是一個(gè)存儲(chǔ)單元(起到緩沖區(qū)效果),所以輸入數(shù)據(jù)寄存器保存著/0引腳電平。

2.輸入上拉模式

輸入上拉模式就是在浮空輸入模式基礎(chǔ)上使能輸入電路中的上拉開關(guān),該開關(guān)由輸出數(shù)據(jù)寄存器(GPIOx_ODR)引腳對(duì)應(yīng)位設(shè)置為1來使能。輸入上拉模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-3。

3.輸入下拉模式

輸入下拉模式也是在浮空輸入模式基礎(chǔ).上使能了輸入電路中的下拉開關(guān),該開關(guān)由輸出數(shù)據(jù)寄存器(GPIOx_ODR)引腳對(duì)應(yīng)位設(shè)置為0來使能。輸入下拉模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-4。

4.模擬輸入模式

當(dāng)STM32需要進(jìn)行AD(模數(shù))轉(zhuǎn)換時(shí),需要把引腳設(shè)置為模擬輸入模式,該模式需要配合ADC外設(shè)使用,否則沒有意義。模擬輸入模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-5。

此時(shí),GPIO 完全只是一個(gè)通路,最后信號(hào)流入到AD轉(zhuǎn)換電路中,更具體在AD轉(zhuǎn)換章節(jié)介紹。

5.開漏通用輸出模式

通用輸出模式就是做為普通用途的輸出模式,比如簡(jiǎn)單地控制引腳輸出高低電平。GPIO的輸出是由一個(gè)PMOS管和一個(gè)NMOS管組合形成的反相器驅(qū)動(dòng)。開漏電路概念中的“漏”是指MOS管的漏極(D),實(shí)際只是利用到NMOS管,PMOS管在開漏模式下是沒有用到的,開漏通用輸出模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-6。

目的:控制I/O引腳開漏輸出高電平。STM32實(shí)際流程: CPU把端口位設(shè)置/清除寄存器(GPIOx_ BSRR)引腳對(duì)應(yīng)外設(shè)置為1,然后驅(qū)動(dòng)端口輸出數(shù)據(jù)寄存器(GPIOx_ ODR)對(duì)應(yīng)位為1,實(shí)際上也可以讓CPU直接GPIOx_ ODR 寄存器引腳對(duì)應(yīng)位寫入1。GPIOx_ODR寄存器通過一個(gè)選擇電路(與復(fù)用功能輸出做選擇)后輸入到輸出控制電路,經(jīng)過輸出控制電路后在NMOS控制線輸出低電平,這時(shí)NMOS管截止(PMOS管不被激活),引腳呈高阻狀態(tài),不會(huì)有電流流動(dòng)。

目的:控制I/0引腳開漏輸出低電平。STM32實(shí)際流程:CPU把端口位設(shè)置/清除寄存器(GPIOx_BSRR)或者端口位清除寄存器(GPIOx_BRR)引腳對(duì)應(yīng)外設(shè)置為1,然后驅(qū)動(dòng)輸出數(shù)據(jù)寄存器(GPIOx_ODR)對(duì)應(yīng)位為0,實(shí)際上也可以讓CPU直接往GPIOx_ODR寄存器引腳對(duì)應(yīng)位寫入0。GPIOx_ODR寄存器通過一個(gè)選擇電路(與復(fù)用功能輸出做選擇)后輸入到輸出控制電路,經(jīng)過輸出控制電路后在NMOS控制線輸出高電平,這時(shí)NMOS管導(dǎo)通(PMOS管不被激活),引腳呈低電平狀態(tài),允許有電流從引腳流入。另外,整個(gè)過程施密特觸發(fā)輸入是被激活的,出現(xiàn)在I/O腳上的數(shù)據(jù)在每個(gè)APB2時(shí)鐘被采樣到輸入數(shù)據(jù)寄存器,對(duì)輸入數(shù)據(jù)寄存器的讀訪問可得到I/O狀態(tài)。

6.推挽通用輸出模式

推挽輸出與開漏輸出原理理解都是差不多的,不同的重點(diǎn)在于輸出控制電路驅(qū)動(dòng)反相器的不同,就是推挽輸出把PMOS管和NMOS管都用上了,開漏輸出只用了NMOS管,PMOS管完全不用。推挽通用輸出模式下GPIO結(jié)構(gòu)中信號(hào)流向見圖11-7。

對(duì)于推挽輸出模式,CPU對(duì)端口位設(shè)置/清除寄存器、端口輸出數(shù)據(jù)寄存器操作都是與開漏輸出一樣的過程,只有在輸出控制電路對(duì)反相器的控制不同。需要控制I/O引腳推挽模式輸出1。此時(shí)數(shù)據(jù)輸出寄存器(GPIOx_ODR)輸出1,該信號(hào)輸入到輸出控制電路,之后輸出控制電路在PMOS控制線輸出低電平,此時(shí)PMOS管導(dǎo)通,同時(shí)在NMOS控制器輸出低電平,此時(shí)NMOS管截止,最終I/O引腳呈高電平狀態(tài),如果構(gòu)成回路可以有電流從引腳流出。

需要控制I/O引腳推挽模式輸出0。此時(shí)數(shù)據(jù)輸出寄存器(GPIOx_ODR)輸出0,該信號(hào)輸入到輸出控制電路,之后輸出控制電路在PMOS控制線輸出高電平,此時(shí)PMOS管截止,同時(shí)在NMOS控制器輸出高電平,此時(shí)NMOS管導(dǎo)通,最終I/O引腳呈低電平狀態(tài),如果構(gòu)成回路可以有電流從引腳流入。在推挽輸出模式下,也是可以在端口輸入數(shù)據(jù)寄存器讀取到當(dāng)前I/O引腳狀態(tài)的。

7.推挽復(fù)用功能輸出模式

一個(gè)I/O引腳可以做為普通的IO接口,還可以做為其他外設(shè)的特殊功能引腳,有些引腳可能有4、5種不同功能,這種現(xiàn)象就叫做復(fù)用。引腳復(fù)用為特殊功能引腳,那引腳狀態(tài)就由該外設(shè)決定,在推挽復(fù)用功能輸出模式是引腳信號(hào)流向具體見圖11-8。

原理分析參考推挽輸出模式就好,此處不再啰嗦。

  • 開漏復(fù)用功能輸出模式

  • STM32CubeMX生成
  • 點(diǎn)擊File/New Project。

2.點(diǎn)開Core,選擇M3

3.點(diǎn)開Series,選擇STM32F1。

  • 以此類推,Line/STM32F1103

Package/LQFP144

5.雙擊選擇STMF103ZE

6.選擇RCC

  • 選擇LED燈引腳PB5、PE5,并分別設(shè)置為GPIO_Output模式。

8.點(diǎn)開System Core/GPIO,將引腳參數(shù)設(shè)置為下圖

9.時(shí)鐘樹設(shè)置

  • 命名工程,保存到對(duì)應(yīng)路徑。

10.點(diǎn)開Code Generator,將Generated files 欄中的第一欄打鉤,點(diǎn)擊右上方的GENERATE CODE,完成工程創(chuàng)建。

11.打開keil軟件,按照路徑打開GPIO_LED工程,在main.c文件寫程序


以上的Word格式文檔51黑下載地址:

文檔.doc (2.58 MB, 下載次數(shù): 23)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表