首頁 >圖片 >
STM32單片機的GPIO端口設置 世界資訊
發布時間:2023-06-27 16:27:49 文章來源:Linux學習區
STM32單片機的GPIO端口設置-首先要了解什么是寄存器?寄存器是中央處理

1 寄存器問題


(資料圖片僅供參考)

首先要了解什么是寄存器?寄存器是中央處理器CPU內用來暫存指令、數據和地址的存儲器,在所有應用單片機來進行各種控制操作時,都是通過設置單片機的內部寄存器來操作單片機的,其思想就是根據每塊內存單元所具有功能的不同,給這些地址取一個別名,這個過程也叫作寄存器地址映射。在后面的發展過程中,為了減少直接操作寄存器,又增添了庫文件操作,以及后來的CubeMX中設置各種寄存器信息,但寄存器操作是單片機內部基礎操作的方式,因此寄存器的操作是很有必要了解一下的。

圖1.1 存儲結構圖

1.1 單片機中的寄存器

單片機中有眾多寄存器,在實際單片機操作中應熟練掌握的寄存器有程序狀態寄存器PSW,定時器方式控制寄存器TMOD,電源控制寄存器PCON,定時器控制寄存器TCOD,中斷允許寄存器IE,中斷優先級寄存器IP,以及串行口控制寄存器SCON。

1.2 寄存器配置的常用方式

(1) 先將待設置位清0,再設置相應的值(常用)。

(2) 先將寄存器的值讀出來,修改完成后,再寫進寄存器。

1.3 寄存器地址

寄存器地址:保存當前CPU所訪問的內存單元的地址。

基地址:Stm32的每個模塊都包含多個寄存器,這些寄存器地址通常是連續的,而第一個寄存器的地址(地址值最低的地址)就是基地址。

偏移地址:寄存器在本模塊中的地址偏移量。

絕對地址:絕對地址是寄存器的實際地址,它等于基地址+偏移地址。

圖1.2 GPIO寄存器地址

在寄存器設置中首先會用到結構體,將操作GPIO的7個寄存器封裝進一個結構體中,利用結構體的特性,結構體向內存申請連續存儲空間,結構體中的32位變量正好就占據4字節,如是16位的就占據2字節。

2 GPIO端口設置

GPIO:G:通用 P:端口即通用I/O(輸入/輸出)端口,是Stm32可控制的引腳。Stm32芯片的GPIO引腳與外部設備連接起來,可實現與外部通訊、控制外部硬件或者采集外部硬件數據的功能。

圖2.1 寄存器與GPIO口的關系圖

2.1 GPIO端口位基本結構

GPIO的內部電路主要由一對保護二極管、受開關控制的上下拉電阻、TTL施密特觸發器 、兩個MOS管、輸入輸出數據寄存器、復位/置位寄存器、及一些讀寫控制邏輯電路等組成。注:施密特觸發器具有電壓滯后的特性,利用它對脈沖波形進行整形,使波形的上升沿或下降沿變得陡直。

圖2.2 GPIO基本電路圖

2.2 GPIO端口位的工作模式

2.2.1 輸入模式

輸入模式IO引腳用于讀取外部狀態,如判斷外部按鍵的狀態,接收外部各種傳感器信號等。

(1)GPIO_Mode_IN_FLOATING 浮空輸入(即不連接內部上下拉電阻)

(2)GPIO_Mode_IPU 上拉輸入

(3)GPIO_Mode_IPD 下拉輸入

(4)GPIO_Mode_AIN 模擬輸入

圖2.3 輸入模式電路圖

2.2.2 輸出模式

輸出模式IO引腳用于控制外部電路工作,如外部的LED的閃爍,LCD1602的顯示等。

(5)GPIO_Mode_Out_OD 開漏輸出(帶上拉或者下拉)

(6)GPIO_Mode_AF_OD 復用開漏輸出(帶上拉或者下拉)

(7)GPIO_Mode_Out_PP 推挽輸出(帶上拉或者下拉)

(8)GPIO_Mode_AF_PP 復用推挽輸出(帶上拉或者下拉)

圖2.4 輸出模式電路圖

2.2.3 復用模式

復用模式IO引腳用于如定時器的PWM信號的輸入輸出引腳及串口的輸入輸出引腳等。

圖2.5 復用模式電路圖

2.2.4 AD/DA模擬信號輸入輸出模式

模擬信號輸出輸出模式IO引腳應用于輸入模擬信號便于進行模數轉換的電路。

圖2.6 高阻抗模擬輸入模式

3 GPIO端口工作模式設置

3.1 端口配置數據設置

IO引腳的工作模式的設置通過模式選擇寄存器GPIOx_MODER來完成,GPIO中的每一個引腳的功能都由兩個位控制,CNF0[1:0]與MODE0[1:0]配置序號為0的引腳,后面的引腳依次類推,一組IO口有16個引腳,故需要64bit來配置一組端口,在Stm32中利用兩個32位寄存器高位CRH與低位CRL寄存器控制GPIO。其中每一個IO口都是由7個寄存器來控制(CRH、CRL、IDR、ODR、BRR、BSRR、LCKR)[1]。

圖3.1GPIO寄存器簡介

圖3.2 GPIO端口配置低位寄存器表

通過軟件來設置相應的端口時,就需要參考GPIO配置寄存器表,如在輸入模式(MODE[1:0]=00), 輸出模式(MODE[1:0]>00),輸入輸出確定后在CNF[1:0]中確定輸出輸入的模式(8種)。

圖3.3 輸入輸出配置圖

例://使能PORTA時鐘RCC- >APB2ENR|=1< <2;    //將GPIOA的PA13位清零    GPIOA- >CRH&=0XFF0FFFFF;   //首先PA13位為8(二進制1000)MODE位為00,因此是輸入,//CNF位為10,即為上拉/下拉輸入    GPIOA- >CRH|=0X00800000; //PA13設置成上拉/下拉輸入 //PA13輸出為高        GPIOA- >ODR|=1< <13;

3.2 輸入輸出端口設置

控制GPIO的寄存器已經在3.1介紹過了,現主要介紹一下輸入輸出的端口寄存器。

(1)端口輸入寄存器IDR

圖3.4 寄存器IDR配置表

(2)端口輸出寄存器ODR

圖3.5 寄存器IDR配置表

4 推挽電路與開漏電路

4.1 推挽電路

推挽電路由輸入部分、輸出部分、NPN型三極管及PNP型三極管組成,通過輸入電壓的正負來控制電路中的三極管來達到推挽的效果[2]。

圖4.1 推挽電路原理

4.1.1 推電路

當Vin端電壓為V+時,上面的N型三極管Q3導通,下面的P型三極管阻塞,電流通過Q3給負載供電,這樣的電路就叫推push電路。

圖4.2 推電路原理圖

4.1.2 挽電路

挽電路同理,即當Vin端電壓為V-時,P型三極管Q4導通,電流通過負載從下往上流去,這就叫挽pull。

圖4.3 挽電路原理圖

推挽電路的優缺點:由于電路在工作時,兩個對稱開關三極管每次只有一個導通,所以導通時的損耗較小,且效率高。輸出即可以向負載灌電流,也可從負載抽取電流,推拉式輸出級即提高電路的負載能力,又提高開關速度。

4.2 開漏電路

場效應管是電壓控制型元器件,當對場效應管的柵極施加電壓時,漏極與源極會導通。結型場效應管有一個特性就是它的輸入阻抗非常大,這意味著:沒有電流從控制電路流出,也沒有電流進入控制電路。沒有電流流入或流出,就不會燒壞控制電路。

圖4.4 N型場效應管

開漏電路(Open-Drain)就是將圖4.5中的三極管換為場效應管,利用柵極的輸入來達到控制LED燈的亮滅,即當柵極有電流時,Q5導通及電流不會流入LED燈,所以LED燈滅,當柵極無電流時,Q5斷開,LED燈亮。

圖4.5 開漏電路原理圖

開漏電路可以利用外部電路的驅動能力,減少cpu內部的驅動,且開漏輸出提供了靈活的輸出方式,但當上升沿通過外接上拉無源電阻對負載充電,即當電阻選擇小時延時小,但功耗大,反之亦然。

5 GPIO端口輸出功能配置步驟及涉及的寄存器

在Stm32單片機由內核和各種電路模塊組成,如通用模塊中的GPIO模塊、串行外設接口SPI、同步/異步串口接口、定時器等電路模塊,Stm32單片機通過對各種外設的寄存器進行操作達到操作外設的目的。

5.1 GPIO的配置流程

使能端口時鐘,使用前先使能對應模塊的時鐘;

配置端口位的工作模式寄存器;

配置電路驅動類型寄存器,如推挽還是開漏;

配置引腳響應速度寄存器;

配置上下拉電阻設置寄存器;

配置輸出數據寄存器;

5.2 GPIO點亮LED燈的配置流程

void LED_init9(void){//我的stm32板中的兩個LED燈在GPIO的A和D組中,在USART1中.//首先先使能端口APB2,USART1掛載在APB2通道上  RCC- >APB2ENR|=1< <2;    //使能PORTA時鐘          RCC- >APB2ENR|=1< <5;    //使能PORTD時鐘  //設置GPIOA的8號引腳,8號引腳屬于高位因此對CRH寄存器進行操作//再設置ODR寄存器,對端口的輸出電壓高低進行設置  GPIOA- >CRH&=0XFFFFFFF0; //清除bit位  GPIOA- >CRH|=0X00000003;//PA8 推挽輸出  最大輸出速度        GPIOA- >ODR|=1< <8;      //PA8 輸出高,即將端口的輸出電平設置高電平//與GPIOA同理                          GPIOD- >CRL&=0XFFFFF0FF;  GPIOD- >CRL|=0X00000300;//PD.2推挽輸出  GPIOD- >ODR|=1< <2;      //PD.2輸出高 }

標簽:

精彩文檔: