当前位置: 首页 > news >正文

STM32点亮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系统班中完成蜂鸣器发声功能。

库函数使用方式

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

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

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

相关文章:

STM32点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平&#xff0c;用以驱动Led蜂鸣器等外设&#xff0c;以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压&#xff0c;用于读取按键输入&#xff0c;外接模块电平信号输入&#xff0c;ADC电压采集灯 GP…...

Android UI: 自定义控件:可换行的布局控件

文章目录 继承ViewGroup重写onMeasure方法&#xff1a;计算并设置布局控件的高度重写onLayout方法&#xff1a;计算并设置每个子控件的位置具体的代码实现小结 继承ViewGroup 重写generateLayoutParams&#xff0c;设置子控件的LayoutParams为MarginLayoutParams类型 Overridep…...

Linux(Ubuntu)中安装vscode

①首先去vscode的官网下载.deb文件 网址&#xff1a;https://code.visualstudio.com/docs/?dvlinuxarm64_deb 注&#xff1a;如果linux端无法打开网页下载文件&#xff0c;可以在Windows端下载好用WinSCP传输到Linux。下载前注意下你的系统架构是arm还是amd&#xff0c;系统…...

MQTT Topic通配符

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…...

负载均衡 dubbo

1 自定义负载均衡 dubbo 在 Dubbo 中&#xff0c;用户可以自定义负载均衡策略以满足特定场景的需求。Dubbo 提供了扩展接口 com.alibaba.dubbo.rpc.cluster.LoadBalance 来支持自定义负载均衡算法。 要实现自定义的负载均衡策略&#xff0c;需要完成以下步骤&#xff1a; 创建…...

(含代码)利用NVIDIA Triton加速Stable Diffusion XL推理速度

在 NVIDIA AI 推理平台上使用 Stable Diffusion XL 生成令人惊叹的图像 扩散模型正在改变跨行业的创意工作流程。 这些模型通过去噪扩散技术迭代地将随机噪声塑造成人工智能生成的艺术&#xff0c;从而基于简单的文本或图像输入生成令人惊叹的图像。 这可以应用于许多企业用例&…...

【Spring】学习Spring框架那点小事儿

Spring作者&#xff1a;Rod Johnson Rod Johnson 是一位软件开发人员和作家&#xff0c;他在软件开发领域有着广泛的影响力。他出生于澳大利亚&#xff0c;拥有计算机科学和音乐双学位&#xff08;能写出有优雅的代码一定有艺术细胞&#xff09;。 Rod Johnson 在 2002 年出版…...

L2-035 完全二叉树的层序遍历(Python)

L2-035 完全二叉树的层序遍历 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 一个二叉树&#xff0c;如果每一个层的结点数都达到最大值&#xff0c;则这个二叉树就是完美二叉树。对于深度为 D 的&#xff0c;有 N 个结点的二叉树&#xff0c;若其结点对应于相同深度…...

get命令使用提交代码

当你想要通过Git提交代码时&#xff0c;以下是一个详细的案例&#xff0c;包括从创建更改到推送到远程仓库的整个过程&#xff1a; 首先&#xff0c;确保你已经在本地仓库目录中进行了需要的更改。 添加更改到暂存区&#xff1a; git add . 这会将所有更改添加到Git的暂存区&…...

矩阵乘积知识

参考&#xff1a;矩阵点乘【矩阵点乘计算公式】_万动力 矩阵乘 矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数&#xff08;column&#xff09;和第二个矩阵的行数&#xff08;row&#xff09;相同时才有意义 [1] 。 哈达码积 别名&#xff1a;矩阵点乘&…...

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的&#xff0c;外观模式&#xff08;门面模式&#xff09;是一种结构型设计模式。它提供一个统一的接口&#xff0c;用于访问子系统中的一组接口&#xff0c;隐藏了系统的复杂性。最简单的应用就是&#xff0c;当controller层的逻辑处…...

小程序APP为什么要选择游戏盾SDK防护DDOS

小程序APP为什么要选择游戏盾SDK防护DDOS&#xff1f;在移动互联网高速发展的今天&#xff0c;小程序APP已经成为了人们日常生活中不可或缺的一部分。无论是购物、娱乐还是社交&#xff0c;小程序APP都为我们提供了极大的便利。然而&#xff0c;随着小程序APP的普及&#xff0c…...

STL之deque容器代码详解

1 基础概念 功能&#xff1a; 双端数组&#xff0c;可以对头端进行插入删除操作。 deque与vector区别&#xff1a; vector对于头部的插入删除效率低&#xff0c;数据量越大&#xff0c;效率越低。 deque相对而言&#xff0c;对头部的插入删除速度回比vector快。 vector访问…...

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…...

【Python+Selenium学习系列5】Selenium特殊元素定位之-鼠标悬停操作

前言 Selenium模拟用户在浏览器中的操作&#xff0c;比如点击按钮。在某些场景下&#xff0c;我们需要模拟鼠标悬停的操作&#xff0c;来触发一些隐藏的元素。本文将介绍Python Selenium实现鼠标悬停操作。 鼠标悬停&#xff0c;即当光标与其名称表示的元素重叠时触发的事件&…...

简介:基于 OpenTiny 组件库的 rendereless 无渲染组件架构

在 HAE 自研阶段&#xff0c;我们实现的数据双向绑定、面向对象的 JS 库、配置式开发的注册表等特性&#xff0c;随着前端技术的高速发展现在已经失去存在的意义&#xff0c;但是在 AUI 阶段探索的新思路新架构&#xff0c;经过大量的业务落地验证&#xff0c;再次推动前端领域…...

tcp 连接数上限突破

连接数上限条件 文件句柄的限制 一个tcp连接就需要占用一个文件描述符&#xff0c;一旦文件描述符用完&#xff0c;新的连接就会返回给我们错误是&#xff1a;Can’topen so many files。linux系统出于安全角度的考虑&#xff0c;在多个维度对于可打开的文件描述符进行了限制…...

解决 mmseg/models/decode_heads/mask2former_head.py 中__init__()关键字参数错误

目录 【1 - 问题描述】 【2 - 报错位置检查】 【3 - 问题解决】 【4 - 解决的过程】 【1 - 问题描述】 在mmsegmentation中运行mask2former模型的分割任务遇到报错缺少关键字的错误&#xff1a; TypeError: class Mask2FormerHead in mmseg/models/decode_heads/mask2form…...

​如何使用 ArcGIS Pro 分析爆炸波及建筑

假设在某栋建筑内发生了爆炸&#xff0c;需要根据爆炸的范围分析出来波及的建筑&#xff0c;对于这一需求&#xff0c;我们可以通过ArcGIS Pro来实现&#xff0c;这里为大家介绍一下分析的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载…...

LoadBalancer (本地负载均衡)

1.loadbalancer本地负载均衡客户端 VS Nginx服务端负载均衡区别 Nginx是服务器负载均衡&#xff0c;客户端所有请求都会交给nginx&#xff0c;然后由nginx实现转发请求&#xff0c;即负载均衡是由服务端实现的。 loadbalancer本地负载均衡&#xff0c;在调用微服务接口时候&a…...

STM32单片机学习(28) —— STM32的SPI外设

文章目录概述SPI通信的移位机制&#xff08;以bit为单位&#xff09;SPI外设框图第一部分&#xff1a;数据通路SPI通信的数据帧格式SPI外设移位机制&#xff08;以字节为单位&#xff09;第二部分&#xff1a;主机时钟生成器SPI通信时钟频率与传输速率第三部分&#xff1a;主从…...

番茄小说下载器终极指南:三步构建你的离线阅读自由王国

番茄小说下载器终极指南&#xff1a;三步构建你的离线阅读自由王国 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾在地铁里读到精彩章节时突然断网&#xff1f;是否在…...

从多路复用到三维光阵:Arduino驱动8x8x8 LED立方体全解析

1. 项目概述&#xff1a;用Arduino点亮一个三维世界几年前&#xff0c;我第一次在创客展上看到一个8x8x8的LED立方体&#xff0c;那种由数百个光点构成的、在三维空间中流动的动画效果&#xff0c;瞬间就把我吸引住了。它不像普通的平面LED屏&#xff0c;而是真正有“深度”的光…...

Python合并Excel文档

有若干个Excel文档&#xff0c;每个文档格式一致&#xff0c;及第一行为文件标题&#xff0c;第二行为表格表头&#xff08;表头不完全一致&#xff09;。现需要将他们合并。合并规则为&#xff1a;去掉每个文档的第一行&#xff0c;以第二行为表头&#xff0c;将每个文档的第三…...

一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’

实战内存取证&#xff1a;从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中&#xff0c;内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时&#xff0c;传统的磁盘取证可能一无所获&#xff0c;而内存中却保留着攻击行为的完整痕迹。…...

如何从零构建智能FOC轮腿机器人:完整开源硬件系统终极指南

如何从零构建智能FOC轮腿机器人&#xff1a;完整开源硬件系统终极指南 【免费下载链接】foc-wheel-legged-robot Open source materials for a novel structured legged robot, including mechanical design, electronic design, algorithm simulation, and software developme…...

Mysql:事务管理(中)

在前面的章节中&#xff0c;我们提到了 MVCC&#xff08;多版本并发控制&#xff09;&#xff0c;它巧妙地通过“版本快照”解决了“读-写”冲突&#xff0c;实现了非阻塞读。但如果两个事务同时执行 UPDATE 操作修改同一行数据&#xff0c;即 写-写&#xff08;Write-Write&am…...

厨房空调技术白皮书:从风冷到水冷,制冷系统在厨房场景中的工程化演进

厨房空调是暖通行业近三年技术迭代最密集的细分品类。从最初的"凉霸"&#xff08;本质是风扇&#xff09;&#xff0c;到风冷分体式&#xff0c;再到水冷一体式&#xff0c;每代技术都在解决上一代没有覆盖的用户痛点。本文以工程技术视角&#xff0c;梳理四代厨房制…...

Windows Cleaner:终极免费系统清理工具,彻底解决C盘空间不足问题

Windows Cleaner&#xff1a;终极免费系统清理工具&#xff0c;彻底解决C盘空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否经常遇到C盘爆红、…...

输电线路在线监测系统|架空线路安全运行的“第一道防线“!

输电线路微气象监测站是专为高压输电线路、电网廊道、杆塔运维量身打造的专利级一体化微气象智能监测设备。依托双专利超声波探测技术、六要素集成传感架构、无启动风速高精测量、智能抗干扰稳控系统&#xff0c;实现输电线路沿线气象24小时全自动捕捉、动态实时监测、大风风险…...