点亮LED灯的实验室利用的GPIO的输出配置来实现的,接下来写一个关于GPIO作为输入的程序,同时点亮和熄灭LED灯。由于程序简单,直接贴出代码,以供参考:
#include "stm32f10x.h"
/**
* @brief 初始化GPIO,默认速度为GPIO_Speed_50MHz;
*
* @param GPIO分组
* @param GPIO引脚
* @param GPIO引脚模式
* @retval None
*/
void GPIO_init(GPIO_TypeDef * GPIOx,u16 GPIO_Pin,GPIOMode_TypeDef Mode)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=Mode;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOx,&GPIO_InitStruct);
}
int main()
{
u8 value;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_init(GPIOA,GPIO_Pin_0,GPIO_Mode_Out_PP);
GPIO_init(GPIOB,GPIO_Pin_8,GPIO_Mode_IPU);
while(1)
{
value=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);
if(value)
GPIO_SetBits(GPIOA,GPIO_Pin_0);
else
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
}
}
和GPIO的输出不同的地方就是将PIN_Mode模式根据自己的硬件电路更改成相应的输入模式,上拉或者下拉。然后使用一个 GPIO_ReadInputDataBit()来获取指定IO组的指定管脚的电平。