文章目录
以下内容都是来自这个大佬对江科大做的的笔记,我只是整理一下初始化的程序方便整理思路
一、GPIO初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO x ,ENABLE/DISABLE); //开启时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选择输出通道
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //选择输出频率
GPIO_Init(GPIOA,&GPIO_InitStructure); //GPIO配置初始化
GPIO引脚归为外设类,所示在APB2上。
有八种输出模式
浮空输入 | 可读取引脚电平,若引脚悬空,则电平不确定 |
---|---|
上拉输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
下拉输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 |
模拟输入 | GPIO无效,引脚直接接入内部ADC |
开漏输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
推挽输出 | 可输出引脚电平,高电平接VDD,低电平接VSS |
复用开漏输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
复用推挽输出 | 由片上外设控制,高电平接VDD,低电平接VSS |
蜂鸣器和LED灯只需要更改引脚就可以
二、中断配置
第一步,时钟配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //开启RCC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //开启AFIO时钟
//EXTI和NVIC两个外设的时钟是一直开的 ,NVIC内核外设都是不需要开启时钟
第二步,配置GPIO
GPIO_initstruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_initstruct.GPIO_Pin = GPIO_Pin_14;
GPIO_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_initstruct);
第三步,配置AFIO外设中断引脚选择,AFIO的库函数是和GPIO在一个文件里
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource14);
每个GPIO都有16个引脚,选择一个进入中断。
AFIO主要是俩个功能,复用功能引脚重映射,中断引脚选择。
第四步,配置EXTI,
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line14; //选择中断公道
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //选择中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //选择触发方式
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能开关
EXTI_Init(&EXTI_InitStructure