GPIO、LED以及蜂鸣器的介绍及用法
GPIO:
-
GPIO(General Purpose Input Output)通用输入输出口
-
可配置为八种输入输出模式

-
引脚电平:(低电平)0 - 3.3v(高电平) ,部分引脚可容忍5v
-
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等(只要是可以用高低电平来控制的地方,都可以用GPIO,控制功率较大的设备,加上驱动电路就行)
-
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。
GPIO基本结构:

1、寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,只负责存储数据
2、输出寄存器写1 对应引脚输出高电平,写0输出低电平
3、输入寄存器读取1,对应端口是高电平,写0是低电平
4、上图寄存器只有低16位对应有端口,高16位没有
5、驱动器是用来增加信号的驱动能力的
结构图:

LED和蜂鸣器介绍
•LED:发光二级管,正向通带内点亮,反向通电不亮(长脚是正极,短脚是负极,内部较小的一半是正极,较大的一半是负极)
•有源蜂鸣器:内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定(接低电平,蜂鸣器触发,高电平关闭)
•无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音

点亮LED
接线图

调用外设时针控制函数

三个的区别在于它们控制的供电总线不同:
-
用第一个(AHB):当你要用高速核心模块时
-
用第二个(APB2):当你要用常用IO和外设时(最常用)
-
用第三个(APB1):当你要用低速省电模块时
常用的GPIO函数

控制引脚工作方式有:

GPIO初始化

点亮LED的完整代码
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
//调用APB2外设时针控制函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//定义结构体
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//调用GPIO_Init函数
GPIO_Init(GPIOA,&GPIO_InitStruct);
//GPIO写入,设置高电平
// GPIO_SetBits(GPIOA,GPIO_Pin_0);
//GPIO写入,设置低电平
// GPIO_ResetBits(GPIOA,GPIO_Pin_0);
// GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
while(1){
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);
}
}
LED流水灯的接线图

完整代码
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
//调用APB2外设时针控制函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//定义结构体
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//调用GPIO_Init函数
GPIO_Init(GPIOA,&GPIO_InitStruct);
while(1){
GPIO_Write(GPIOA,~0x0001);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0004);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0008);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0010);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0020);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040);
Delay_ms(500);
GPIO_Write(GPIOA,~0x0080);
Delay_ms(500);
}
}
蜂鸣器接线图

完整代码
#include "stm32f10x.h" // Device header
#include "delay.h"
int main(void)
{
//调用APB2外设时针控制函数
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//定义结构体
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
//调用GPIO_Init函数
GPIO_Init(GPIOB,&GPIO_InitStruct);
while(1){
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_ms(500);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_ms(500);
}
}
按键介绍
常见的输入设备,按下导通,松手断开
按键抖动:由于按键内部使用的是机械式弹簧片来进行通断的,所以在按下和松手的瞬间会伴随有一连串的抖动
传感器模块简介
传感器模块:传感器元件(光敏电阻/热敏电阻/红外接收管等)的电阻会随外键模拟量的变化而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化可得到数字电压输出


浙公网安备 33010602011771号