void GPIO_Config(void)
{
//使能APB2總線外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
//GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); //關閉調試 端口重新映射 使用仿真器調試時,不能用此語
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 選擇腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //配置成上拉輸入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出模式下 I/O輸出速度 50M HZ
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 選擇腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //配置成推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出模式下 I/O輸出速度 50M HZ
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB口
}
int main(void)
{
RCC_Configuration(); //系統時鐘配置函數
NVIC_Configuration(); //NVIC配置函數
GPIO_Config();
// GPIO_Write(GPIOA,0XFFFF); //初始化PA端口讓 LED處於熄滅狀態
while (1)
{
if(!GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)) //檢測PB口的第1個管腳的電平
{
GPIO_SetBits(GPIOB,GPIO_Pin_1); //使第1個管腳爲 1
}
else
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //使第1個管腳爲 0
}
}
結論:
當需要從外部感應輸入狀態的時候,首先要做到如下幾點:
1、把相應IO口設置成爲輸入模式;
2、調用下面的函數,返回的值就是外部的高低電平的狀態。
GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)
當需要從控制外部元件的時候,首先要做到如下幾點:
1、把相應IO口設置成爲輸出模式;
2、調用下面的函數,輸出爲高電平:
GPIO_SetBits(GPIOB,GPIO_Pin_1); //使第1個管腳爲 1
3、調用下面的函數,輸出爲低電平:
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //使第1個管腳爲 0