GPIO功能描述每個GPI/O端口有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位數(shù)據(jù)寄存器(GPIOx_IDR和GPIOx_ODR),一個32位置位/復位寄存器(GPIOx_BSRR),一個16位復位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。根據(jù)數(shù)據(jù)手冊中列出的每個I/O端口的特定硬件特征, GPIO端口的每個位可以由軟件分別配置成多種模式。 ─ 輸入浮空 ─ 輸入上拉 ─ 輸入下拉 ─ 模擬輸入 ─ 開漏輸出 ─ 推挽式輸出 ─ 推挽式復用功能 ─ 開漏復用功能每個I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問)。GPIOx_BSRR和GPIOx_BRR寄存器允許對任何GPIO寄存器的讀/更改的獨立訪問;這樣,在讀和更改訪問之間產生IRQ時不會發(fā)生危險。
本文引用地址:http://www.ex-cimer.com/article/201611/321705.htm
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
#ifdef USE_STM3210C_EVAL
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#elif defined USE_STM3210B_EVAL
GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);
#endif
GPIO_InitStructure.GPIO_Pin = USARTy_RxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = USARTz_RxPin;
GPIO_Init(USARTz_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = USARTy_TxPin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(USARTy_GPIO, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = USARTz_TxPin;
GPIO_Init(USARTz_GPIO, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//GPIO_Init(GPIOB, &GPIO_InitStructure);
}
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
#define LED1On()GPIOA->BSRR = GPIO_Pin_4
#define LED1Off()GPIOA->BRR = GPIO_Pin_4
#define LED2On()GPIOA->BSRR = GPIO_Pin_5
#define LED2Off()GPIOA->BRR = GPIO_Pin_5
#define LED3On()GPIOA->BSRR = GPIO_Pin_6
#define LED3Off()GPIOA->BRR = GPIO_Pin_6
#define LED4On()GPIOA->BSRR = GPIO_Pin_7
#define LED4Off()GPIOA->BRR = GPIO_Pin_7
#endif
PS:在使用GPIO前必須進行配置,注意復用功能,使能GPIO時鐘等。
評論