3-1 ~ 3-3 GPIO输出

视频选集(6/50)[3-2] LED闪烁&LED流水灯&蜂鸣器

0. GPIO输出-库函数

/**
  * @brief  将指定端口置位
  * @param  GPIOx: 选择GPIO
  * @param  GPIO_Pin: 指定端口
  * @retval None
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

/**
  * @brief  将指定端口复位
  * @param  GPIOx: 选择GPIO
  * @param  GPIO_Pin: 指定端口
  * @retval None
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/**
  * @brief  将指定端口复位/置位
  * @param  GPIOx: 选择GPIO
  * @param  GPIO_Pin: 指定端口
  * @param  BitVal: 指定操作。该参数可以是以下值
  *     @arg Bit_RESET: 复位
  *     @arg Bit_SET: 置位
  * @retval None
  */
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
/**
  * @brief  向指定GPIO写数据
  * @param  GPIOx: 选择GPIO
  * @param  PortVal: 写入的数据(16进制形式)
  * @retval None
  */
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)

1. LED闪烁

1.1器件

  • STM32最小系统板
  • ST-LINK V2下载器
  • LED*1

1.2 实现目标

上电后,LED不断闪烁

1.3 配置工程文件

注1.工程文件的创建和文件夹的添加方法在前面的文章中提过,这里不再赘述

注2.延时函数已经封装好,直接使用即可

  • 创建System文件夹,用来存放系统资源,将Delay.h和Delay.c复制到该文件夹下(Delay.c内含延时函数的定义)

1.4 接线图

如图,本电路是主机供电。供电通过ST-LINK接到最小系统板上,再从最小系统板接到上下4排

3-1 LED闪烁

1.5 程序

main.c文件如下:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

/*------------------------------主函数------------------------------*/
int main(void)
{
	/*-----变量声明-----*/
	GPIO_InitTypeDef GPIO_InitStruct; // 定义包含配置参数的结构体变量
	
	/*-----时钟使能-----*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIOA的时钟
	
	/*-----端口配置-----*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化A0端口
	
	/*-----输出设置-----*/
	while(1){
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET); // 【开灯】
		Delay_ms(800); // 延时800ms
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET); // 【关灯】
		Delay_ms(800); // 延时800ms
	}
}

2. 流水灯

2.1 器件

  • STM32最小系统板
  • ST-LINK V2下载器
  • LED*8

2.2 实现目标

上电后,8个LED从右往左,循环闪烁

2.3 接线图

3-2 LED流水灯

2.4 程序

main.c文件如下:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

/*------------------------------主函数------------------------------*/
int main(void)
{
	/*-----变量声明-----*/
	GPIO_InitTypeDef GPIO_InitStruct; // 定义包含配置参数的结构体变量
	uint8_t i;
	
	/*-----时钟使能-----*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIOA的时钟
	
	/*-----端口配置-----*/
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 通用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的所有端口
	
	/*-----输出设置-----*/
	while(1){
		GPIO_Write(GPIOA, ~0x1); // A0端口输出低电平,A1~A7输出高电平
		Delay_ms(800); // 延时800ms
		
		for(i=1; i<8; i++){
			GPIO_Write(GPIOA, ~(0x1<<i)); // 左移i位
			Delay_ms(800); // 延时800ms
		}
	}
}

3. 蜂鸣器报警

3.1 器件

  • STM32最小系统板
  • ST-LINK V2下载器
  • 蜂鸣器

3.2 实现目标

上电后,蜂鸣器反复报警

3.3 接线图

我这里没有按照图中的IO口接蜂鸣器的控制脚,而是将其接到了A0

3-3 蜂鸣器

3.4 程序

直接用“LED闪烁”的程序,改一下延时时间即可

posted @ 2025-08-02 21:09  LI,Yi-han  阅读(27)  评论(0)    收藏  举报