一、 适用功能
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 关键字。