笔记(5) —— GPIO 输出高低电平




一、 适用功能

GPIO 翻转、LED 闪烁、无源蜂铃器、跑马灯等 GPIO 输出高低电平控制。


二、 硬件设计(参考)

在这里插入图片描述


三、 软件设计

① 使用到的固件库文件

#include stm32f10x_gpio.c/stm32f10x_gpio.h
#include stm32f10x_rcc.c/stm32f10x_rcc.h

② 代码整理

  • led.h
#ifndef _led_H
#define _led_H


#include "stm32f10x.h"


void LED_Init(void);
void LED0_Level(unsigned char Level);
void LED1_Level(unsigned char Level);


#endif


  • led.c
#include "led.h"


/*******************************************************************************
* 函 数 名         : LED_Init
* 函数功能		   : LED初始化函数
* 输    入         : 无
* 输    出         : 无
* 说	明		   :无
*******************************************************************************/
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 	// 使能PB端口时钟
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;					// LED0-->PB.5 端口配置
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;			// 推挽输出
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;			// IO口速度为50MHz
	GPIO_Init(GPIOB, &GPIO_InitStructure); 	   				// 根据设定参数初始化GPIOB.5
	GPIO_SetBits(GPIOB, GPIO_Pin_5);							// PB.5 输出高
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); 	// 使能PE端口时钟
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;					// LED1-->PE.5 端口配置
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;			// 推挽输出
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;			// IO口速度为50MHz
	GPIO_Init(GPIOE, &GPIO_InitStructure); 	   				// 根据设定参数初始化GPIOB.5
	GPIO_SetBits(GPIOE, GPIO_Pin_5);							// PE.5 输出高
}


/*******************************************************************************
* 函 数 名         : LED0_Level
* 函数功能		   : LED0——IO电平输出
* 输    入         : Level: 1 —— 输出高;	0 —— 输出低
* 输    出         : 无
* 说	明		   :无
*******************************************************************************/
void LED0_Level(unsigned char Level)
{
	if (Level == 1)
	{
		// PB.5 输出高
		GPIO_SetBits(GPIOB, GPIO_Pin_5);
	}
	else if (Level == 0)
	{
		// PB.5 输出低
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);
	}
}


/*******************************************************************************
* 函 数 名         : LED1_Level
* 函数功能		   : LED1——IO电平输出
* 输    入         : Level: 1 —— 输出高;	0 —— 输出低
* 输    出         : 无
* 说	明		   :无
*******************************************************************************/
void LED1_Level(unsigned char Level)
{
	if (Level == 1)
	{
		// PE.5 输出高
		GPIO_SetBits(GPIOE, GPIO_Pin_5);
	}
	else if (Level == 0)
	{
		// PE.5 输出低
		GPIO_ResetBits(GPIOE, GPIO_Pin_5);
	}
}


  • main.c
#include "stm32f10x.h"
#include "led.h"


void Delay(__IO uint32_t nCount)	 //简单的延时函数
{
	for(; nCount != 0; nCount--);
}


/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main(void)
{
	LED_Init();
	
	while(1)
	{
		LED0_Level(1);
		LED1_Level(0);
		Delay(0x0FFFFF);
		LED0_Level(0);
		LED1_Level(1);
		Delay(0x0FFFFF);
	}
}


LED0_Level 与 LED1_Level 输入参数,考虑到有些编译器不能识别 bit 关键字,所以写成 unsigned char 关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值