GPIO:
- GPIO(General Purpose Input Output)通用输入输出口,可配置为8种输入输出模式
- 引脚电平:0V~3.3V,部分引脚可容忍5V
- 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
- 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
1.1 点亮一个LED
接线图:
低电平点亮
主函数:
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitLED;
GPIO_InitLED.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitLED.GPIO_Pin=GPIO_Pin_0;
GPIO_InitLED.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitLED);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
while(1)
{
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
Delay_ms(500);
GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
Delay_ms(500);
}
}
备注:
- RCC_APB2PeriphClockCmd:打开GPIOA的时钟
- GPIO_InitTypeDef:宏定义的GPIO_Init结构体
- GPIO_InitLED.GPIO_Mode=GPIO_Mode_Out_PP:
输出模式推挽输出
GPIO_InitLED.GPIO_Pin=GPIO_Pin_0:
开启引脚A0
GPIO_InitLED.GPIO_Speed=GPIO_Speed_50MHz:
速度50MHz - GPIO_Init:初始化
-
GPIO_WriteBit:对单个IO口置0或1,Bit_SET即高电平
GPIO_SetBits:对多个IO口置0或1
1.2流水灯
接线图类似,3个LED分别接A0、A1、A6
主函数:
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitTypeDef GPIO_InitLED;
GPIO_InitLED.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitLED.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6;
GPIO_InitLED.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitLED);
GPIO_Write(GPIOA,0xffff);
while(1)
{
GPIO_Write(GPIOA,~0x0001);//0000 0000 0000 0001
Delay_ms(500);
GPIO_Write(GPIOA,~0x0002);//0000 0000 0000 0010
Delay_ms(500);
GPIO_Write(GPIOA,~0x0040);//0000 0000 0100 0000
Delay_ms(500);
}
}
库函数配置寄存器采用枚举enum方式,所以可以用 | 设置IO口
1.3蜂鸣器
原理
低电平点亮
接线图
主函数
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitTypeDef GPIO_InitBuzzer;
GPIO_InitBuzzer.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitBuzzer.GPIO_Pin=GPIO_Pin_12;
GPIO_InitBuzzer.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitBuzzer);
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
Delay_s(1);
GPIO_SetBits(GPIOB,GPIO_Pin_12);
Delay_s(3);
}
}