<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32F10x芯片GPIO/AFIO端口配置總結(jié)

          STM32F10x芯片GPIO/AFIO端口配置總結(jié)

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏

          1、介紹

          STM32F10x芯片GPIO/AFIO配置主要包括以下幾方面知識(shí):在時(shí)鐘控制模塊中配置好相應(yīng)總線時(shí)鐘,并在總線上使能對(duì)應(yīng)的GPIO口(AFIO口,需要的話)時(shí)鐘后:根據(jù)需求配置相應(yīng)GPIO端口為對(duì)應(yīng)的輸入/輸出模式,按需求更改/讀取端口的數(shù)據(jù);端口功能重映射;若用外部中斷,則將中斷線與對(duì)應(yīng)引腳鏈接起來。

          本文引用地址:http://www.ex-cimer.com/article/201611/316902.htm

          STM32F10x芯片的每個(gè)GPIO端口都有7個(gè)相關(guān)的寄存器:2個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個(gè)32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR),一個(gè)32位置位/復(fù)位寄存器(GPIOx_BSRR),一個(gè)16位復(fù)位寄存器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。每個(gè)I/O端口都可以設(shè)置成如下模式:

          ?輸入浮空:GPIO_Mode_IN_FLOATING

          ?輸入上拉:GPIO_Mode_IPU

          ?輸入下拉:GPIO_Mode_IPD

          ?模擬輸入:GPIO_Mode_AIN

          ?開漏輸出:GPIO_Mode_Out_OD

          ?推免式輸出:GPIO_Mode_Out_PP

          ?推免式復(fù)用功能:GPIO_Mode_AF_PP

          ?開漏復(fù)用功能:GPIO_Mode_AF_OD

          2、GPIO寄存器描述

          l端口配置低寄存器(GPIOx_CRL)(x=A…E)

          l端口配置高寄存器(GPIOx_CRH)(x=A…E)

          l端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x=A…E)

          l端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x=A…E)

          l端口位設(shè)置/清除寄存器(GPIOx_BSRR)(x=A…E)

          l端口位清除寄存器(GPIOx_BRR)(x=A…E)

          l端口配置鎖定寄存器(GPIOx_LCKR)(x=A…E)

          2、AFIO寄存器描述

          l事件控制寄存器(AFIO_EVCR):控制內(nèi)部時(shí)間輸出到相應(yīng)引腳

          l復(fù)用重映射和調(diào)試I/O配置寄存器(AFIO_MAPR)

          l外部中斷配置寄存器(AFIO_EXTICRx)(x=1…4):設(shè)置端口為中斷線(將端口與中端線連接)

          注意:對(duì)寄存器AFIO_EVCR、AFIO_MAPR、AFIO_EXTICRX進(jìn)行讀寫操作前,應(yīng)當(dāng)首先打開AFIO的時(shí)鐘。

          3、GPIO操作流程

          l首先定義GPIO_InitTypeDef類型變量;

          l然后調(diào)用RCC_APB2PeriphClockCmd()函數(shù)使能相應(yīng)的GPIOx端口(所有GPIO端口都掛載到APB2總線上的)時(shí)鐘。注意使能GPIOx端口時(shí)鐘的函數(shù)必須在GPIO端口配置函數(shù)之前調(diào)用,否則GPIO端口會(huì)初始化不成功:;

          l調(diào)用GPIO_DeInit()初始化要使用的GPIOx端口對(duì)應(yīng)寄存器為默認(rèn)值;

          l調(diào)用GPIO_StructInit()函數(shù)初始化前面定義的GPIO_InitTypeDef類型變量到缺省值;

          l按需求初始化GPIO_InitTypeDef類型變量,然后調(diào)用GPIO_Init()函數(shù)實(shí)現(xiàn)初始化;

          l然后就可以對(duì)相應(yīng)的端口進(jìn)行操作了:讀/寫,或配置為復(fù)用功能(相應(yīng)函數(shù)查看固件庫(kù))。

          注意:

          1、系統(tǒng)復(fù)位和剛復(fù)位后,復(fù)用功能未開啟,I/O端口被配置成浮空輸入模式(CNFx[1:0]=01b,MODEx[1:0]=00b)。復(fù)位后,JTAG引腳被置于輸入上拉或下拉模式:

          PA15:JTDI置于上拉模式;

          PA14:JTCK置于下拉模式;

          PA13:JTMS置于上拉模式;

          PB4:JNTRST置于上拉模式;

          因此要使用JTAG調(diào)試接口作為通用GPIO口使用,則必須屏蔽JTAG復(fù)用功能。具體實(shí)現(xiàn)為先調(diào)用RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)使能AFIO時(shí)鐘,然后調(diào)用GPIO_PinRemapConfig(GPIO_Remap_SWJ_XXXX,ENABLE)關(guān)閉JTAG的調(diào)試復(fù)用功能;

          2、當(dāng)把端口配置成復(fù)用輸出功能時(shí),則引腳和輸出寄存器斷開,并和片上外設(shè)的輸出信號(hào)連接;但如果沒有激活對(duì)應(yīng)外設(shè),則其輸出將不確定;

          3、當(dāng)使用外部中斷或事件事,首先按照上面幾步配置GPIO端口(輸入),然后調(diào)用函數(shù):GPIO_EXTILineConfig()將引腳與對(duì)應(yīng)的中斷線鏈接起來,然后在配置NVIC使能對(duì)應(yīng)的中斷通道,最后編寫中斷處理函數(shù)。

          4、GPIO操作例子

          例子1:

          u16 Val = 1;

          GPIO_InitTypeDef GPIO_InitStructure;

          RCC_Configuration();

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

          GPIO_Init(GPIOB, &GPIO_InitStructure);

          GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);

          GPIO_Write(GPIOB,0xffff);

          while(1)

          {

          GPIO_Write(GPIOB, ~Val);

          Delay(0x2FFFFF);

          if(Val == 0x8000) Val = 1;

          else Val<<=1;

          }



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();