GPIO基本操作,如果更換IO口只需要更換端口設置即可
led.h文件
#ifndef __LED_H
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0_PIN GPIO_Pin_5
#define LED0_PORT GPIOB
#define LED1_PIN GPIO_Pin_5
#define LED1_PORT GPIOE
#define LED0_ON GPIO_ResetBits(LED0_PORT,LED0_PIN) //LED0對應引腳GPIOB.5拉低,亮
#define LED0_OFF GPIO_SetBits(LED0_PORT,LED0_PIN) //LED0對應引腳GPIOB.5拉高,滅
#define LED1_ON GPIO_ResetBits(LED1_PORT,LED1_PIN) //LED1對應引腳GPIOE.5拉低,亮
#define LED1_OFF GPIO_SetBits(LED1_PORT,LED1_PIN) //LED1對應引腳GPIOE.5拉高,滅
void led_init(void); //初始化led的GPIO端口
#endif
LED.C文件
#include"led.h"
#include"stm32f10x.h" //只要調用庫函數,就需要添加此頭文件
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PB,PE端口時鍾
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = LED0_PIN;
GPIO_Init(LED0_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = LED1_PIN;
GPIO_Init(LED1_PORT, &GPIO_InitStructure);
LED0_OFF; //端口初始化完成后,關閉兩個小燈
LED1_OFF;
}
main文件
#include "stm32f10x.h"
#include "delay.h"//從跑馬燈就需要使用該頭文件
#include "led.h" //跑馬燈需要的頭文件
int main(void)
{
delay_init(); //初始化延時函數
led_init(); //初始化LED端口
while(1)
{
LED0_OFF;
LED1_ON;
delay_ms(1500);
LED0_ON;
LED1_OFF;
delay_ms(1500);
}
}
這里是庫函數底層結構
RCC_APB2PeriphClockCmd():主要是用於打開端口時鍾的,主要有2個參數
RCC_APB2Periph_GPIOB;//對用端口需要打開的始終,如果是多個端口,可以使用" | "或符號一起使用
DISABLE ; DISABLE;//失能 或者使能
GPIO_InitTypeDef定義的gpio初始化的結構體主要有三個參數
GPIO_Pin; //GPIO的端口號
GPIO_Speed;//GPIO的速度,可選參數為
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz;
GPIO_Mode//GPIO的可選模式,可選參數
GPIO_Mode_AIN = 0x0, //模擬輸入,主要用於ADC
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 //復用推完輸出