STM32单片机(三)第二节:GPIO输出练习(LED闪烁、LED流水灯、蜂鸣器)

news2024/11/26 9:31:14

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本大节主要学习GPIO通用输入输出口,包含两部分,第一小节主要学习GPIO的输出,第二小节是写三个简单的程序进行练习,分别是LED闪烁、LED流水灯、蜂鸣器等;第三小节是学习GPIO输入,第四小节是写两个简单的程序进行练习,分别是按键控制LED和光敏传感器控制蜂鸣器;
本小节主要是对上一节学习的GPIO输出知识进行实战练习,编写三个程序进行练习,分别实现LED闪烁、LED流水灯、蜂鸣器等,并附上程序源码;

文章目录

  • 一、本节目标
    • 1.1 LED闪烁
    • 1.2 LED流水灯
    • 1.3 蜂鸣器
  • 二、搭建面包板电路
  • 三、程序源码
    • 3.1 相关库函数简介
      • 3.1.1 直接查看.h和.c文件
      • 3.1.2 查看用户手册
      • 3.1.3 网上搜索
    • 3.2 LED闪烁
    • 3.3 LED流水灯
    • 3.4 蜂鸣器

一、本节目标

1.1 LED闪烁

现象:面包板上的有一个LED在不断地闪烁,如下图所示:

在这里插入图片描述

1.2 LED流水灯

可以看到,这8个LED正在以流水灯的方式不断循环点亮,如下图所示:

在这里插入图片描述

1.3 蜂鸣器

现象是蜂鸣器正在滴答滴答鸣响;
在这里插入图片描述

二、搭建面包板电路

每个代码的接线图都放在了工程文件夹的第一个文件夹里,
在这里插入图片描述
比如LED闪烁的接线图如下所示:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

接线过程如下:
拿出面包板,把正极的红线朝上,注意别拿反了,然后拿出STM32最小系统板,按照上图的位置,上面和右边留两个孔,下面留三个孔,然后拿出跳线,将最小系统板的正负极引到面包板的供电引脚上,这样上下四排供电引脚就可以通过最小系统板获取电源了;G引到负极,3.3引到正极,如下图:

在这里插入图片描述

跳线连接完成后,我们把STLINK按照上面的引脚标识符连接到最小系统上,如下图:

在这里插入图片描述
我们这整个系统的供电是STLINK的3.3V接到最小系统,然后最小系统又通过跳线接到上下4排的供电孔的;最后拿出一个LED,长脚正极接到正极供电孔,短脚负极接到PA0端口上,如下图:

在这里插入图片描述

这样硬件电路就搭建完成了,然后把STLINK插到电脑上;可以发现最小系统板电源灯亮起,如下图:

在这里插入图片描述

三、程序源码

首先需要新建工程,新建工程的过程可以参考第二节:STM32单片机(二)STM32环境搭建

3.1 相关库函数简介

之前我们也介绍过,操作STM32的GPIO总共需要3个步骤:

  • 第一步,打开RCC开启GPIO的时钟
  • 第二步,使用GPIO_Init函数初始化GPIO
  • 第三步,使用输出或者输入的函数控制GPIO口

查看相关库函数的功能和参数的方法有三种:

3.1.1 直接查看.h和.c文件

这里总共涉及了RCC和GPIO两个外设,先来看下这两个外设都有哪些库函数;可以在Library中找到rcc.h文件:

在这里插入图片描述
该文件里有很多RCC的库文件,但是我们最常用的只有以下这三个函数:

在这里插入图片描述
RCC_AHB外设时钟控制;RCC_APB2外设时钟控制;RCC_APB1外设时钟控制;
对应的函数实现在对应的RCC.c文件里。

这个AHB外设时钟控制函数功能是使能或者失能AHB外设时钟的;

同理GPIO的库函数也是在gpio.h中定义,在gpio.c文件中实现的;

在这里插入图片描述
GPIO_DeInit函数的功能是复位指定的GPIO外设;
AFIODeInit用来复位AFIO外设;
GPIO_Init函数非常重要,使用结构体参数来初始化GPIO口;一般我们初始化外设都是用Init函数来完成的;

在这里插入图片描述

GPIO_SetBits负责将指定的端口设置为高电平;
GPIO_ResetBits负责将指定的端口设置为低电平;
GPIO_WriteBit负责对指定端口进行写入操作;
GPIO_Write可以对16个端口进行写入操作;

3.1.2 查看用户手册

除了在源文件中直接查看函数定义外,还可以通过查看《STM32F103xx固件函数库用户手册.pdf》来查看库函数的功能和参数。

在这里插入图片描述

3.1.3 网上搜索

最后一种方式就是百度搜索,参考一下别人的代码;搜索STM32 GPIO初始化程序,

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这里都由例子,直接拿过来用就行;

3.2 LED闪烁

代码路径:STM32入门教程资料\程序源码\STM32Project\3-1 LED闪烁\User\main.c

具体代码:

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_ResetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		GPIO_SetBits(GPIOA, GPIO_Pin_0);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
		Delay_ms(500);
		
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);
		Delay_ms(500);
	}
}

代码解释:
RCC_APB2PeriphClockCmd:打开GPIOA的时钟;

GPIO_Mode参数:选择模式;GPIO_Mode_Out_PP表示推挽模式;
GPIO_Pin:选择引脚;GPIO_Pin_0表示操作0号引脚;
GPIO_Speed:速度选择50MHz;

将这个参数设置给GPIO_Init后,这个GPIOA外设的0号引脚就自动被配置为推挽输出、50MHz的速度了;

GPIO初始化完成后,就可以使用GPIO的输入输出函数了;

3.3 LED流水灯

首先看一下接线图,并按照接线图进行硬件接线,

在这里插入图片描述
拿出8个LED,正极都查到正极的供电孔,负极都负极依次插到PA0~PA7的端口;实物接线如下所示:

在这里插入图片描述

代码路径:STM32入门教程资料\程序源码\STM32Project\3-2 LED流水灯\User\main.c

具体代码:

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000
		Delay_ms(100);
		GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000
		Delay_ms(100);
	}
}

3.4 蜂鸣器

先看一下接线图:

在这里插入图片描述

VCC正极接到正极供电孔,GND负极接到负极供电孔,然后I/O控制极就随便选择一个IO口接上就行;我们这里哦选择了PB12号口;

在这里插入图片描述
给PB12输出低电平,蜂鸣器就会响,输出高电平,蜂鸣器就不响。

代码路径:STM32入门教程资料\程序源码\STM32Project\3-3 蜂鸣器\User\main.c

具体代码:

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

int main(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
	while (1)
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_ResetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(100);
		GPIO_SetBits(GPIOB, GPIO_Pin_12);
		Delay_ms(700);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例挑战——MVVM框架理解和实践

MVVM框架理解和实践 一、背景介绍二、 什么是MVVM架构?1.架构示意图2.MVVM概念总结3.实现VM的框架 三、通过案例来理解MVVM框架1.没有使用MVVM架构的程序2.使用了MVVM架构的程序3.对比 四、总结 一、背景介绍 最近正在做新版项目的MVVM架构的结合业务的具体落地&am…

报表控件FastReport使用指南——如何打开WebP格式的图片

FastReport 是功能齐全的报表控件,可以帮助开发者可以快速并高效地为.NET,VCL,COM,ActiveX应用程序添加报表支持,由于其独特的编程原则,现在已经成为了Delphi平台最优秀的报表控件,支持将编程开…

SWUST软件技术基础实验笔记

目录 前言 堆栈的操作 实验目的 实验要求 单链表操作 实验目的 实验要求 二叉树操作 实验目的 实验要求 查找与排序 实验目的 实验要求 查找算法 排序算法 实验总结 前言 软件技术基础实验分为四个部分,涵盖了堆栈的操作、单链表操作、二叉树操作以…

微前端——qiankun配置方法

什么是微前端 微前端是指存在于浏览器中的微服务,其借鉴了微服务的架构理念,将微服务的概念扩展到了前端。 如果对微服务的概念比较陌生的话,可以简单的理解为微前端就是将一个大型的前端应用拆分成多个模块,每个微前端模块可以…

Qt文件系统源码分析—第八篇QFileSystemWatcher

深度 本文主要分析Windows平台,Mac、Linux暂不涉及 本文只分析到Win32 API/Windows Com组件/STL库函数层次,再下层代码不做探究 本文QT版本5.15.2 类关系图 QTemporaryFile继承QFile QFile、QSaveFile继承QFileDevice QFileDevice继承QIODevice Q…

RK最强ARM系列之RK3588+AI+Ethercat(linux +xenomai+igh)实时解决方案

RK3588是瑞芯微新一代旗舰级高端处理器,具有高算力、低功耗、超强多媒体、丰富数据接口等特点。搭载四核A76四核A55的八核CPU和ARM G610MP4 GPU,内置6.0TOPs算力的NPU。 有五大技术优势 1. 内置多种功能强大的嵌入式硬件引擎,支持8K60fps 的…

5.29-kubernetes learning

文章目录 HomeGet StartedThe kubernetes network model First of all ,we should understand the layout of this official website page. Home The Home chapter is that the official website has manuals for different versions of k8s ,and then generally…

chatgpt赋能python:Python中单词排序的方法—从入门到精通

Python中单词排序的方法—从入门到精通 Python是一门很流行的编程语言,它是一门被广泛使用的高级编程语言,为开发者提供了丰富的工具和库,在处理字符串、文本信息时也有着广泛的应用。本文主要介绍在Python中进行单词排序的方法。 什么是单…

python pycharm的安装教程

pycharm安装教程,超详细_皮小孩ls的博客-CSDN博客目录 前言 python的安装教程: 1.下载地址: 2. 安装 1)customize installation 勾选 use 2).默认 . 3). 选择安装位置 4).耐心等待&…

【CSSpart4--盒子模型】

CSSpart4--盒子模型 网页布局的三大核心:盒子模型,浮动,定位网页布局的过程(本质):盒子模型的组成四部分:边框,内容,内边距,外边距 一 、盒子边框border:1.1 …

Queue 队列的实现与应用

目录 1.概念2.常用的队列方法2.1 方法2.2 代码 3.自己实现队列3.1 构造MyQueue3.2 入队列offer()3.3 出队列poll()3.4 获得队头peek()3.5 是否为空isEmpty()3.6 获得队列大小size() 4.循环队列4.1 概念4.2 解析4.3 如何判断队列满4.4 代码(保留一个位置实现&#xf…

vue+nodejs校园二手物品交易市场网站_xa1i4

。为满足如今日益复杂的管理需求,各类管理系统程序也在不断改进。本课题所设计的校园二手交易市场,使用vue框架,Mysql数据库、nodejs语言进行开发,它的优点代码不能从浏览器查看,保密性非常好,比其他的管理…

轻松实现动态人脸识别,AidLux加速智慧城市场景化应用落地

随着AI技术进入全新发展阶段,智能物联网(AIoT)的渗透率进一步加深,应用场景不断拓展,人脸识别也迅速走进了人们的日常生活,在手机解锁、公司考勤、支付验证、天网抓捕在逃嫌犯等场景中发挥着重要作用。 人脸…

dataV教程-浅用dataV

一别多日,好久没有和大家相见了。其一的原因是因为公司的项目,其二就是因为太懒了。现在给大家浅浅的介绍一下这个好用的大屏展示框架吧。如果后续有深入的话,我会出一个详解版本的。 一、dataV介绍 前言:由于当前的大数据时代,…

Github标星60K!mall前台商城系统正式发布,支持完整订单流程!

之前有很多小伙伴问我,mall项目有没有前台商城系统,可见大家对mall项目的前台商城系统还是非常期待的。最近抽空把前台商城系统的功能给完善了,目前已经可以支持完整的订单流程。我已经把前台商城系统开源了,项目地址也放在文末了…

重磅发布!面向装备制造业服务化转型白皮书(私信获取)

《面向装备制造业服务化转型白皮书》 关于白皮书 《面向装备制造业服务化转型白皮书》通过调研160余家装备制造企业的服务化路径及模式,研讨支持企业开展服务型制造的系统化方案,希望为装备制造业服务化转型,探索切实有效的路径以供参考。 …

【MySQL】- 02 MySQL explain执行

目录 1.使用explain语句去查看分析结果2.MYSQL中的组合索引3.使用慢查询分析(实用)4.MYISAM和INNODB的锁定explain用法详解关于MySQL执行计划的局限性:备注: 1.使用explain语句去查看分析结果 如explain select * from test1 whe…

nSoftware IPWorks 2022 C++ Crack

nSoftware IPWorks 2022 C最全面的互联网组件套件,PKI 代理远程签署代码和文档,无需暴露您的私钥,一种安全的自托管解决方案,可使用集中存储的密钥实现远程代码和文档签名,随附的 PKCS#11 驱动程序允许与 Jarsigner、S…

小航助学题库蓝桥杯stem科技素养模拟练习试卷(中级第2套)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 25. 2020 年 7 月 23 日,中国的火星探测器“天问一号“发射,开始了前往火星的 旅程。作为中国首个完全自主研发…

Vue之条件渲染

1. if分支结构 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…