STM32F103单片机之IO口操作

在对GPIO端口操作时首先是编写一个初始化函数

void PC_13_Init(void)

这是STM32F103C8T6的PC13引脚的初始化函数

void PC_13_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
  GPIO_Init(GPIOC, &GPIO_InitStructure);  
	//GPIO_SetBits(GPIOC,GPIO_Pin_13);
	
}

下面开始详细解释这个函数

首先是结构体的定义,这个结构体就在标准库里面。


	GPIO_InitTypeDef GPIO_InitStructure;
typedef struct
{
  uint16_t GPIO_Pin;
  GPIOSpeed_TypeDef GPIO_Speed;
  GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;

下面就是GPIO时钟的使能。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

再就是对GPIO结构体的配置,包括引脚号、引脚的模式、以及速率;

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /* Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /* Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /* Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /* Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /* Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /* Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /* Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /* Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /* Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /* Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /* Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /* Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /* Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /* Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /* Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /* Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /* All pins selected */
  GPIO_Mode_AIN = 0x0,             // 模拟输入
  GPIO_Mode_IN_FLOATING = 0x04,		 // 浮空输入
  GPIO_Mode_IPD = 0x28,						 // 下拉输入
  GPIO_Mode_IPU = 0x48,						 // 上拉输入
  GPIO_Mode_Out_OD = 0x14,				 // 开漏输出
  GPIO_Mode_Out_PP = 0x10,				 // 推免输出
  GPIO_Mode_AF_OD = 0x1C,					 // 复用开漏输出
  GPIO_Mode_AF_PP = 0x18					 // 复用推免输出
  GPIO_Speed_10MHz = 1,
  GPIO_Speed_2MHz, 
  GPIO_Speed_50MHz

通过上述的引脚GPIO初始化函数就可以知道GPIO怎么进行初始化,这样就可以将引脚运用起来,将引脚设置为不同的模式就实现不同的功能,下面讲解几个GPIO操作的函数。

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这两个在GPIO输出模式下GPIO口输出是高电平还是低电平的函数。

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

这个是在GPIO为输入模式下GPIO读取引脚的电平函数。

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

这个是将GPIOA-E的0-15引脚直接赋值的函数

上述就是一些GPIO的基本操作,当然在实际操作的时候还有很多的问题需要注意,请看持续的更新......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值