Stm32点灯代码分析

代码

#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); // 置低电平
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值