开始配置前需要声明一个结构体:GPIO_InitTypeDef GPIO_InitStructure,结构体的变量名是GPIO_InitTypeDef,我们设置的结构体名称是GPIO_InitStructure。
齐次是写入RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOX,ENABLE)为某个GPIO分配时钟。
结构体如下图所示:
结构体内有三个元素,分别为:GPIO_Pin(GPIO引脚)、GPIO_Speed(引脚速度)以及GPIO_Mode(GPIO模式)。
GPIO_Pin(GPIO引脚):
一般当我们写入引脚时会这样写:GPIO_InitStructus.GPIO_Pin=GPIO_Pin_x(x代表某个数字);
GPIO_Pin_x代表的是我们将要使用的引脚,比如我在以上RCC_APB2Periph_GPIOX中X填的是B,GPIO_Pin_x中x填的是3,那么单片机便会开启GPIOB3的引脚。
引脚的序号和具体数量要看对应单片机的手册才知道。如果最大数量是8,那么就可以在Pin_0~7当中挑选。
GPIO_Speed(引脚速度):
一般当我们写入引脚速度是会这么写:GPIO_InitStructus.GPIO_Speed=GPIO_Speed_XMHz;一般我们会将X写入50,这是大部分人的写法。
GPIO_Speed一共只有3种:
GPIO_Speed_10MHz 最高输出速率10MHz 。
GPIO_Speed_2MHz 最高输出速率2MHz 。
GPIO_Speed_50MHz 最高输出速率50MHz。
这个速率表示的是引脚信号的刷新频率,频率越高,信号的质量越好。
GPIO_Mode(GPIO模式):
GPIO的模式共有以下几个:
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入
GPIO_Mode_IPD 下拉输入
GPIO_Mode_IPU 上拉输入
GPIO_Mode_Out_OD 开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出
GPIO_Mode_AIN 模拟输入:一般要进行ADC采样时会用到该项配置。其实就是接收输入的模拟信号的意思。
GPIO_Mode_IN_FLOATING 浮空输入:当外界输入的是高电平时,引脚则表现为高电平,当是低电平时则引脚表示为低电平。当无信号输入时电压不确定。负责扫描按钮的引脚有时会配置为浮空输入。
GPIO_Mode_IPD 下拉输入 :就是当接入的信号线没信号时,引脚会保持低电平,有输入信号时端口读取输入信号。
GPIO_Mode_IPU 上拉输入 :上拉输入与下拉输入类似,只是无输入信号时,端口被拉至高电平。
GPIO_Mode_Out_OD 开漏输出:
当内部输出为高电平时,场效应管导通,上拉电阻接地,所以输出低电平,内部输出为低电平时场效应管阻断,输出为高电平。可用于点亮led。
GPIO_Mode_Out_PP 推挽输出
上面的三极管是N型三极管,下面的三极管是P型三极管,当vin有电流输出时Q3导通,输出为1。当Vin为负数时,Q4导通,电流从地经过reload流入V-,输出为0。可用于点亮led。
借鉴(53条消息) 推挽输出_opera321的博客-优快云博客_推挽输出https://blog.youkuaiyun.com/dyzhen/article/details/50419629
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出:
复用输出用于DAC、定时器等的外设。复用模式输出的是外设的数据而不再是数据输出寄存器的数据了。
那么根据以上的知识便可以用gpio配置个led了:
总结来说:
1,先声明一个结构体:GPIO_InitTypeDef GPIO_InitStructure(结构体名称可以随便取,不过大部分是这种写法)
2,而后配置时钟:RCC_APB2xPeriphClockCmd(RCC_APBxPeriph_GPIOX,ENABLE),各外设和端口所对应的APBx,需要查看数据手册得知。
3,然后就是为结构体的各个变量赋值:
GPIO_InitStructus.GPIO_Pin = XX;
GPIO_InitStructus.GPIO_Mode = XX;
GPIO_InitStructus.GPIO_Speed=XX;
4,完成初始化:GPIO_Init(GPIOX,&GPIO_InitStructure);填入GPIOX以及结构体的地址。