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排

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 接线图

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.4 程序
直接用“LED闪烁”的程序,改一下延时时间即可
本文来自博客园,作者:LI,Yi-han,转载请注明原文链接:https://www.cnblogs.com/LiYi-han/p/19019321

浙公网安备 33010602011771号