代码
#include "stm32f10x.h" // Device header
#include "Delay.h"
int main()
{
// 初始化APB2中的GPIOA时钟总线 (因为Led插在了A0口)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
// 配置8种工作模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 使用推挽输出(高低电平均有驱动能力)
// 配置具体引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 使用A0引脚
// 配置速度
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 置高电平
Delay_ms(500);
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 置低电平
}
}
接线
Led灯负极接到 stm32 A0口,低电平点亮
打开时钟控制
由上图可知,GPIOA端口是由APB2总线控制,所以我们第一步先通过库函数RCC_APB2PeriphClockCmd()打开时钟控制
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
参数一:选择开启哪个外设端口
参数二:选择使能还是禁用
初始化GPIO
相关函数
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
参数一:GPIOA地址
参数二:结构体GPIO_InitTypeDef,用于GPIO配置寄存器
GPIO_InitTypeDef GPIO_InitStructure;
/*GPIO_Mode_AIN = 0x0, 模拟输入(Analog)
GPIO_Mode_IN_FLOATING = 0x04, 浮空输入(In Floating)
GPIO_Mode_IPD = 0x28, 下拉输入(In Pull Down)
GPIO_Mode_IPU = 0x48, 上拉输入(In Pull Up)
GPIO_Mode_Out_OD = 0x14, 开漏输出(Out Open Drain)
GPIO_Mode_Out_PP = 0x10, 推挽式输出(Out Push Pull)
GPIO_Mode_AF_OD = 0x1C, 开漏复用功能(Atl Open Drain)
GPIO_Mode_AF_PP = 0x18 推挽式复用功能(Atl Push Pull)*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 使用推挽输出(高低电平均有驱动能力)
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 使用A0引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 配置速度
GPIO_Mode,即工作模式,由下图可知有8种工作模式
由于我们要输出电平,同时要求高低电平都能驱动Led,所以我们采用推挽输出
GPIO_Pin 顾名思义就是配置具体的引脚,接线A0
调用GPIO初始化函数,传入结构体参数即可
GPIO_Init(GPIOA, &GPIO_InitStructure);
调用输入函数
最后即可调用输入函数向对应引脚输出高低电平即可点亮Led
GPIO_SetBits(GPIOA, GPIO_Pin_0); // 置高电平
Delay_ms(500)
GPIO_ResetBits(GPIOA, GPIO_Pin_0); // 置低电平