STM32_3-1点亮LED灯与蜂鸣器发声

STM32之GPIO

GPIO在输出模式时可以控制端口输出高低电平,用以驱动Led蜂鸣器等外设,以及模拟通信协议输出时序等。

输入模式时可以读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集灯

GPIO的位模式图如下所示:

这个模式图接了一个上拉电阻和一个下拉电阻,上拉表示的是高电平的输入模式,下拉表示的是低电平的输入模式。

施密特触发器 的功能作用以及原理

施密特触发器对输入的电压进行整型,如果输入的电压大于某一个阈值,输出会瞬间升为高电平,如果输入电压小于某一个阈值,输出就会小于某一个阈值

输入数据寄存器存储施密特触发器整形的波形进入输入寄存器,读取输入寄存器得到输入的电平,

 相关外设介绍:led外设以及蜂鸣器外设

面包板介绍:

接线:连接STM32和最小系统班,接线图

此处:默认led项目创建完成

GPIO所包含的库函数如下所示


            调用GPIO_DeInit这个函数后指定的gpio外设会被复位,这是这个函数用途
            void GPIO_DeInit(GPIO_TypeDef* GPIOx);
            复位AFIO外设
            void GPIO_AFIODeInit(void);
            用结构体的参数初始化gpio口
            void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
            把结构体变量赋一个默认的值
            void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
            uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
            uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
            uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
            uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
             以上是GPIO的读取函数
            void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
            void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
            void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
            void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
            以上是GPIO的写入函数
            void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
            void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t   GPIO_PinSource);
            void GPIO_EventOutputCmd(FunctionalState NewState);
            void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
            void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

typedef enum
{ GPIO_Mode_AIN = 0x0,   // 模拟输入
  GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入
  GPIO_Mode_IPD = 0x28,// 下拉输入
  GPIO_Mode_IPU = 0x48, //上拉输入
  GPIO_Mode_Out_OD = 0x14, // 开漏输出
  GPIO_Mode_Out_PP = 0x10, // 推挽输出
  GPIO_Mode_AF_OD = 0x1C, // 复用开漏
  GPIO_Mode_AF_PP = 0x18  // 复用推挽
}GPIOMode_TypeDef;

点亮led灯使用的是推挽输出

使用GPIO ResetBits来点亮LED灯

#include "stm32f10x.h"                  // Device header// 操作GPIO 1: 使用rcc开启gpio时钟// 使用GPIO_Init函数初始化GPIO// 使用输入或输出函数控制GPIO口
int main(void){// 开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体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初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,&GPIO_InitStructure);// GPIO设置A0口的灯亮GPIO_ResetBits(GPIOA,GPIO_Pin_0);// 设置LED灯熄灭GPIO_SetBits(GPIOA,GPIO_Pin_0);while(1){}}

查看函数的定义了解函数的功能以及如何使用函数

#include "stm32f10x.h"                  // Device header
         // 操作GPIO 1: 使用rcc开启gpio时钟
           // 使用GPIO_Init函数初始化GPIO
             // 使用输入或输出函数控制GPIO口
int main(void){
      // 开启时钟
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
      // GPIO的结构体
      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初始化结构体的地址放到GPIO——Init的第二个参数
      GPIO_Init(GPIOA,&GPIO_InitStructure);
      // GPIO设置A0口的灯亮,最后一个参数Bit_RESET表示的是清除端口的值为0,清除端口的值为1
      GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);// Bit_RESET时LED灯是点亮状态,当为Bit_SET时LED灯是熄灭状态
    while(1){

        }

}

STM32实现LED灯的亮灭

#include "stm32f10x.h"    // Device header
#include "Delay.h"// 操作GPIO 1: 使用rcc开启gpio时钟// 使用GPIO_Init函数初始化GPIO// 使用输入或输出函数控制GPIO口
int main(void){// 开启时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出// 选择输出模式为推挽输出PP表示的是推挽输出模式,OD表示开漏输出模式// 推挽输出高电平和低电平均有输出能力,开漏输出自由在低电平的情况下才有驱动能力GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 选择输出的引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;// 输出速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,&GPIO_InitStructure);// GPIO设置A0口的灯亮,最后一个参数Bit_RESET表示的是清除端口的值为0,清除端口的值为1GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);// Bit_RESET时LED灯是点亮状态,当为Bit_SET时LED灯是熄灭状态while(1){// 实现led灯光闪烁的功能需要在主循环中写上点亮led灯熄灭led灯光的操作并在while中循环GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);Delay_ms(500);// 添加延时函数进行延时GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);Delay_ms(500);/*   使用GPIO点亮led灯GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);*/}}

延时函数从文件中引入

使用STM32实现LED流水灯

1:接线

2:编写流水灯功能代码,在单片机中是无法使用二进制直接进行控制的因此我们需要使用16进制的方式控制单片机进行工作。

#include "stm32f10x.h"    // Device header
#include "Delay.h"/*1: 操作GPIO 1: 使用rcc开启gpio时钟2: 使用GPIO_Init函数初始化GPIO3: 使用输入或输出函数控制GPIO口*/   	 
int main(void){// 开启GPIOA时钟,该程序连接的是GPIOA的端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出PP表示的是推挽输出模式,OD表示开漏输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 选择输出的引脚,GPIO_Pin_All将16个端口都设置为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;// 输出速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数GPIO_Init(GPIOA,&GPIO_InitStructure); while(1){//控制A号引脚GPIO_Write(GPIOA,~0x0001); // 0000 0000 0000 0001 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0002); // 0000 0000 0000 0010 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0004); // 0000 0000 0000 0100 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0008); // 0000 0000 0000 1000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0010); // 0000 0000 0001 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0020); // 0000 0000 0010 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0040); // 0000 0000 0100 0000 二进制转换为16进制的写法Delay_ms(500);GPIO_Write(GPIOA,~0x0080); // 0000 0000 1000 0000 二进制转换为16进制的写法Delay_ms(500);}}

实现蜂鸣器功能:

蜂鸣器接线,使用最小系统班3根公对母的杜邦线完成蜂鸣器的接线工作

#include "stm32f10x.h"    // Device header
#include "Delay.h"/*1: 操作GPIO 1: 使用rcc开启gpio时钟2: 使用GPIO_Init函数初始化GPIO3: 使用输入或输出函数控制GPIO口*/   	 
int main(void){// 开启GPIOA时钟,该程序连接的是GPIOA的端口RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);// GPIO的结构体GPIO_InitTypeDef GPIO_InitStructure;// 选择输出模式为推挽输出PP表示的是推挽输出模式,OD表示开漏输出模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;// 选择输出的引脚,GPIO_Pin_All将16个端口都设置为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;// 输出速度GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// GPIO初始化结构体的地址放到GPIO——Init的第二个参数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);}}

将程序运行并下载进STM32系统班中完成蜂鸣器发声功能。

库函数使用方式

第一种方式,打开头文件,拉到最下面,查看有哪些函数,然后查看函数的定义函数的使用方法,<建议使用这种方式>

第二种方式,查看库函数用户手册,所有函数的介绍个使用方法

第三种方式,最后一种方式是百度,借助别人的代码进行使用

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

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

相关文章

【NERF】入门学习整理(二)

【NERF】入门学习整理(二) 1. Hierarchicalsampling分层采样2. Loss定义(其实就是简单的均方差MSE)3. 隐式重建与显示重建1. Hierarchicalsampling分层采样 粗网络coarse,均匀采样64个点 缺点:如果仅使用粗网络会存在点位浪费和欠采样的问题,比比如空气中很多无效的点 精细…

【C语言】文件操作篇-----程序文件和数据文件,文件的打开和关闭,二进制文件和文本文件,fopen,fclose【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作篇-----程序文件和数据文件&#xff0c;文件的打开和关闭&#xff0c;二进制文件和文本文件【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 在了解完动态内存管…

的发射点2

☞ 通用计算机启动过程 1️⃣一个基础固件&#xff1a;BIOS 一个基础固件&#xff1a;BIOS→基本IO系统&#xff0c;它提供以下功能&#xff1a; 上电后自检功能 Power-On Self-Test&#xff0c;即POST&#xff1a;上电后&#xff0c;识别硬件配置并对其进行自检&#xff0c…

5.55 BCC工具之funcinterval.py解读

一,工具简介 eBPF/bcc非常适用于平台性能调优。通过funclatency工具,我们可以分析特定函数的性能,了解该函数的延迟情况。然而,有时性能下降并不是由于函数的延迟,而是函数调用之间的间隔。 funcinterval正是为此而生。 另外,在平台上进行硬件性能调优时,我们将使用协…

运维随录实战(13)之docker搭建mysql集群(pxc)

了解 MySQL 集群之前,先看看单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构需要特殊设计。单节点数据库无法满足大并发时性能上的要求。单节点的数据库没有冗余设计,无法满足高可用。单节点 MySQL无法承载巨大的业务量,数据库负载巨大常见 MySQL 集群方案 Re…

少儿编程 蓝桥杯青少组科技素养题 信息素养真题及解析第25套

少儿编程 科技素养 信息素养真题第25套 1、旅行结束之后&#xff0c;回到家的小蓝决定将照片备份在云端的网盘上。备份照片主要占用的是小蓝家的( )带宽 A、下行 B、上行 C、文件 D、数据 答案&#xff1a;B 考点分析&#xff1a;主要考查网络相关知识&#xff0c;要将照…

php使用redis做游戏服务端缓存

游戏数据缓存&#xff1a;在游戏中&#xff0c;玩家的角色数据、游戏物品等信息通常需要频繁读取和更新。使用 Redis 可以将这些数据缓存起来&#xff0c;以提高数据的读取速度和减少数据库的负载。这种场景下&#xff0c;可以使用 Redis 的字符串&#xff08;String&#xff0…

DHCP中继实验(华为)

思科设备参考&#xff1a; 一&#xff0c;技术简介 DHCP中继&#xff0c;可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段&#xff0c;则客户机可以正确地获得动态分配的IP地址。如果不在同一个物理网段&#xff0c;…

uView guid 全局唯一标识符

唯一标识符 #guid(length 32, firstU true, radix 62) 该函数可以生产一个全局唯一、随机的guid&#xff0c;默认首字母为u&#xff0c;可以用于当做元素的id或者class名等需要唯一&#xff0c;随机字符串的地方&#xff0c;因为id或者class不能以数字开头。 length <…

vue开发100问?

以上问题旨在为Vue.js开发者提供更广泛的技术探索方向&#xff0c;覆盖了Vue.js项目开发中可能出现的各种技术和业务场景。 Vue.js的基本原理是什么&#xff1f;如何在Vue中实现数据双向绑定&#xff1f;Vue实例化时需要哪些基本配置项&#xff1f;Vue的生命周期钩子函数有哪些…

JVM知识整体学习

前言&#xff1a;本篇没有任何建设性的想法&#xff0c;只是我很早之前在学JVM时记录的笔记&#xff0c;只是想从个人网站迁移过来。文章其实就是对《深入理解JVM虚拟机》的提炼&#xff0c;纯基础知识&#xff0c;网上一搜一大堆。 一、知识点脑图 本文只谈论HotSpots虚拟机。…

微信小程序提交成功设置提示

在微信小程序中&#xff0c;当用户成功提交表单或完成某项操作后&#xff0c;通常我们会设置一个提示来告知用户操作已完成。这种提示通常可以通过几种方式来实现&#xff0c;例如使用 wx.showToast 方法显示一个短暂的提示消息&#xff0c;或者跳转到一个新的页面并显示成功信…

scikit-learn保姆级入门教程

在SKLearn中&#xff0c;因为做了上层的封装&#xff0c;分类模型、回归模型、聚类与降维模型、预处理器等等都叫做估计器(estimator)&#xff0c;就像在Python里『万物皆对象』&#xff0c;在SKLearn里『万物皆估计器』。 在本篇内容中&#xff0c;我们将给大家进一步深入讲解…

C# 视频转图片

在 C# 中将视频转换为图像可以使用 FFmpeg 库。下面是一个示例代码来完成这个任务&#xff1a; using System; using System.Diagnostics;class Program {static void Main(string[] args){string inputFile "input_video.mp4"; // 输入的视频文件路径string outpu…

【Leetcode打卡】递归回溯

【Leetcode打卡】递归回溯 784. 字母大小写全排列 class Solution { public:int find(string s,int pos){int ipos;while(i<s.size()){if(isalpha(s[i])){return i;}i;}return -1;}void turn(string& s,int pos){if(islower(s[pos])){s[pos]toupper(s[pos]);}else{s[po…

js的同步异步

JavaScript&#xff08;JS&#xff09;是一门单线程的编程语言&#xff0c;这意味着它一次只能处理一个任务。然而&#xff0c;JS 支持同步和异步操作。 同步操作是指代码按照顺序执行&#xff0c;每个操作必须在前一个操作完成后才能进行。这意味着当一个操作在执行时&#x…

思科网络中如何配置标准ACL协议

一、什么是标准ACL协议&#xff1f;有什么作用及配置方法&#xff1f; &#xff08;1&#xff09;标准ACL&#xff08;Access Control List&#xff09;协议是一种用于控制网络设备上数据流进出的协议。标准ACL基于源IP地址来过滤数据流&#xff0c;可以允许或拒绝特定IP地址范…

Java算法-力扣leetcode-274. H 指数

274. H 指数 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 **h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&a…

一文学会python实现四元数、欧拉角、旋转矩阵变换

文章目录 前言实现前言 本文主要是将python实现四元数、欧拉角、旋转矩阵变换的所有转换做了一个整理,方便大家调用实现变换。 实现 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import numpy as np from scipy.spatial.transform import Rotationdef quaternion2eule…

欧拉计划第7题:10001st primeBy(质数 质数筛法)

欧拉计划简介&#xff0c;本系列希望以通俗易懂的语言、简洁的代码&#xff0c;带大家体会数学与编程结合的魅力。 Problem 7&#xff1a; 10001 10001 10001st primeBy 标签&#xff1a;质数、质数筛法 原文&#xff1a;By listing the first six prime numbers: 2 2 2, …