STM32单片机(三)第二节:GPIO输出练习3(蜂鸣器)

news2024/9/20 22:45:52

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括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流水灯、蜂鸣器等,并附上程序源码;

文章目录

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

一、本节目标

蜂鸣器

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

二、搭建面包板电路

每个代码的接线图都放在了工程文件夹的第一个文件夹里,
在这里插入图片描述
比如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 蜂鸣器源码

先看一下接线图:

在这里插入图片描述

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/698188.html

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

相关文章

VTK 三维移动旋转工具 ,移动工具 旋转工具 三维旋转工具

前言:本文为该系列的第一篇建立3D交互窗口,​ 基于VTK&QT,建立3D交互窗口; 基本信息 开发平台:VS&QT 版 本:VS2017 & QT5.15.2 & VTK9.0.3 功能: 选中控件 移动 旋转 …

卷积神经网络的三大特性

卷积神经网络(CNN)的三大特性是: Sparse Interaction(稀疏交互):稀疏交互是指在卷积神经网络中,每个神经元仅与输入数据的局部区域进行交互。这意味着神经元只对输入数据的一小部分感知&#xf…

Qt自定义控件(数字框与拖拽条互动)

一、效果 自定义红色区域组件,做到数字与拖拽条相互影响。 二、实现 输入合适的名字 打开自定义组件ui 选择合适的组件进行布局 将两个空间的信号和值进行绑定 新增自定义函数并实现 #include "smallwidget.h" #include "ui_smallwidget.h"sma…

从架构角度看网络安全:数字化时代企业如何构建防御体系?

导语 | 数字化时代,网络安全已经成为企业发展的重中之重,通过体系化的安全建设,企业可以从容应对愈加复杂的网络安全挑战。今天,我们特邀了腾讯云 TVP、赛博英杰科技董事长 谭晓生老师,他将从资深技术专家视角解读如何…

vscode vue-helper插件导致vscode 自动换行快捷键失效

vue-helper插件:代码提示,点击文件路径快速跳转。 vue-helper导致vscode功能异常:自动换行的快捷键(alt Z)失效了。 因为我平时看代码的时候喜欢 换行和不换行之间来回切换,所以这个alt Z 我是经常用的。…

URL缩短服务:复杂问题的简洁解决方案

项目简介:TinyURL是一项在线服务,允许用户将长网址缩短为简洁的短网址,以便于分享和使用。这种服务尤其适用于社交媒体和电子邮件,因为这些平台对链接长度可能有限制。TinyURL的使用非常简单,只需在它的网站上输入长网…

【 Android11 WiFi开发 一 】WiFi列表获取与展示

前言 最近在Android11上开发了WiFi相关功能,涉及到WiFi列表的获取、连接有密码的WiFi、连接已保存的WiFi、忘记连接的WiFi、添加其他WiFi。涉及到的知识点较多作以分篇记录,本篇将介绍WiFi列表的获取与展示。 说明 下面梳理下WiFi列表获取流程&#xff1…

白嫖的text2video模型ZeroScope_v2

ZeroScope是一种基于ModelScope的视频生成模型,可以通过文本生成16:9的高质量视频。 Zeroscape 是一种基于 Transformer 架构的语言生成模型,其中包括了多种不同的变体和版本。其中,zeroscape_v2 是一种较新的模型,相较于之前的版…

浅谈电气火灾监控系统在高层建筑的应用

摘要:通过介绍上海某高层建筑电气火灾监控系统设计情况,对电气火灾监控系统工作特点和具体设计内容进行说明,同时提出一些设 计过程中需注意的事项,供业内人士借鉴,以期增进对电气火灾监控系统设计的重视,…

【vim】Linux种的vim

:q quit (close window) :w save (“write”) :wq save and quit :e {name of file} open file for editing :ls show open buffers :help {topic} open help :help :w opens help for the :w command:help w opens help for the w movement <ESC>进入vim模式 &l…

Python如何调用C库(Windows Linux)

软硬件环境 ubuntu 18.04 64bitwindows 10 64bitPython 3.8GCC 4.9visual studio 前言 在做 python 开发中&#xff0c;经常会碰到&#xff0c;需要通过调用 C 的一个动态链接库来获取相应的值。本文详细讲解了 Windows 和 Linux 2个平台上的不同实现。 linux版的动态库 写个简…

搬运/移植Anaconda配置的项目注意事项

从旧电脑上将项目搬运至新电脑时&#xff0c;搬运项目的时候&#xff0c;将原项目的环境也拷贝过去了&#xff0c;发现出现了问题&#xff0c;使用pip进行安装库的时候&#xff0c;怎么都用不了。错误内容为&#xff1a; Fatal error in launcher: Unable to create process us…

【算法与数据结构】541、LeetCode反转字符串 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题自己写了一个swap函数&#xff0c;用来反转字符串&#xff0c;也可以用库函数reverse。然后是用in…

一文学会使用键盘控制moveit2机械臂模型

文章目录 前言一、官方样例实现软件版本bug修复运行测试 二、gp110机械臂控制文件添加文件修改编译工程运行测试 总结 前言 在之前文章的基础上相信大家已经学会了如何搭建一个机械臂模型&#xff0c;那么我们如何对其进行控制呢&#xff0c;上网检索了一下没找到能清晰指导实…

3.2 Java标识符

3.2 Java标识符 关键字&#xff0c;Java中一些预先设定好的单词被称为关键字常用关键字如下图所示 图中的关键字都是Java预先设定好的&#xff0c;在平时应用中不能用这些关键词作为名字来使用。因为Java已经赋予这些关键字一些意义不能直接使用&#xff0c;这些关键词是Java中…

真实遇到Redis双写一致性问题

今天工作中接到一个bug&#xff0c;产品那边描述&#xff0c; 在后台添加一个供应商后前台无法展示。 是个例还是全部&#xff1f;他说应该是个例。 开始分析。。。。。。。 首先数据库查询可以查出新添加的这个供应商的&#xff0c;说明添加成功的&#xff0c;唯一的问题肯定…

Baltamatica 北太天元 —— 基于模拟退火算法的旅行商问题

文章目录 北太天元&#xff08;Baltamatica&#xff09;简介Baltamatica 复现基于Matlab的旅行商问题问题描述模拟退火算法Metropolis准则算法流程图&#xff1a; Demo1&#xff1a;只考虑累计距离&#xff0c;通过模拟退火算法求解最短路径matlab代码&#xff1a;Baltam代码&a…

Go 语言基础语法:Hello World 实例(涉及定义变量;fmt 包、Print、Println、Printf)

Hello world实例 package mainimport "fmt"func main() {fmt.Println("Hello, World!") } 编译 运行 go run hello.go Hello, World! go run 做了编译和执行两动作&#xff0c;编译会生成 hello 文件&#xff0c;执行完成后此文件会被删除。 web展示 …

STM32外设系列—L298N

文章目录 一、L298N简介二、L298N电路图三、L298N使用方法四、L298N驱动电机实例4.1 麦克纳姆轮简介4.2 定时器PWM配置4.3 智能车行驶控制 五、拓展应用 一、L298N简介 L298N是SGS公司生产的一款通用的电机驱动模块。其内部包含4路逻辑驱动电路&#xff0c;有两个H桥的高电压大…

java并发编程 3:synchronized与锁(重点)

目录 共享问题synchronized锁及使用synchronized代码块synchronized 修饰成员方法synchronized 修饰静态方法 变量的线程安全分析成员变量和静态变量是否线程安全局部变量是否线程安全常见线程安全类 synchronized底层原理Java对象头Monitor管程字节码看原理 锁状态及转换四种锁…