STM32GPIO(流水灯、蜂鸣器案例)

news2025/2/2 15:08:42

文章目录

  • 一、介绍GPIO
    • 简介GPIO
    • GPIO基本结构
    • GPIO位结构
    • GPIO模式
  • 二、外设介绍
    • LED、蜂鸣器简介
      • 硬件电路
    • 面包板介绍
  • 三、实现LED闪烁
    • 连接LED线路
    • 具体程序
      • 引入Delay
      • 具体代码如下:
  • 四、实现流水灯
    • 组装线路
    • 根据GPIO_Init中结构体成员GPIO_Pin的定义,可以使用或运算来选择多个IO口
    • 具体代码
  • 五、蜂鸣器
    • 连接线路
    • 代码实现


一、介绍GPIO

简介GPIO

在这里插入图片描述

GPIO基本结构

在这里插入图片描述

GPIO位结构

肖特基触发器:翻译错误,是施密特触发器,避免电压失真导致电压不稳定,实现模拟图如下:
在这里插入图片描述

在这里插入图片描述

GPIO模式

在这里插入图片描述
浮空/上拉/下拉
在这里插入图片描述
模拟输入:直接输出模拟信号
在这里插入图片描述
开漏/推挽:通过两个mos管,由输出寄存器来控制引脚电平,开漏只有N-mos有效,只能低电平驱动;推挽,则高低电平都可以。
在这里插入图片描述
通用开漏/推挽:对比普通开漏/推挽把输出控制交给了外设控制
在这里插入图片描述
位设置/清除寄存器
在这里插入图片描述

二、外设介绍

LED、蜂鸣器简介

在这里插入图片描述

硬件电路

负载一般接在电源极,即开关开断处接发射极,不然可能因为开关开启电压导致三极管无法开启

在这里插入图片描述

面包板介绍

上面电源是一横排互通,中间为一纵列互通,以下为基础LED连接示例
在这里插入图片描述

三、实现LED闪烁

连接LED线路

在这里插入图片描述

具体程序

引入Delay

将Delay相关函数存放于项目同级目录System下,并加入System组中,和之前配置启动文件一样,然后记得加入头文件目录
在这里插入图片描述

具体代码如下:

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

int main(){
	// Enables or disables the High Speed APB (APB2) peripheral clock
	// 打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//Initializes the GPIOx peripheral according to the specified *parameters in the GPIO_InitStruct
	// 使用结构体设置相关通用IO口
	GPIO_InitTypeDef GPIO_Structure;
	GPIO_Structure.GPIO_Pin = GPIO_Pin_0;
	GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA,&GPIO_Structure);
	// Clears the selected data port bits
	// 给低电平
	// GPIO_ResetBits(GPIOA,GPIO_Pin_0);
	// Sets the selected data port bits
	// 给高电平
	// GPIO_SetBits(GPIOA,GPIO_Pin_0);
	// Sets or clears the selected data port bit
	// 设置这个选择的位为高电平(Bit_SET)或低电平(Bit_RESET)
	// GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
	while(1){
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);
		Delay_ms(500);
		GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);
		Delay_ms(500);
	}
	// return 0;	// 可以不返回,返回反而有警告
	
}


四、实现流水灯

组装线路

在这里插入图片描述

根据GPIO_Init中结构体成员GPIO_Pin的定义,可以使用或运算来选择多个IO口

在这里插入图片描述

具体代码

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


int main(){
	unsigned char i;
	// Enables or disables the High Speed APB (APB2) peripheral clock
	// 打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	//Initializes the GPIOx peripheral according to the specified *parameters in the GPIO_InitStruct
	// 使用结构体设置相关通用IO口
	GPIO_InitTypeDef GPIO_Structure;
	GPIO_Structure.GPIO_Pin = GPIO_Pin_All;
	GPIO_Structure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA,&GPIO_Structure);
	// Writes data to the specified GPIO data port.
	// 配置所选组
	// GPIO_Write(GPIOA,0x00000001);
	while(1){
		for(i=0;i<8;i++){
			GPIO_Write(GPIOA,~(0x00000001<<i));
			Delay_ms(500);
		}
	}
	// return 0;
	
}

五、蜂鸣器

连接线路

在这里插入图片描述

代码实现

#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/1427763.html

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

相关文章

Redis学习——高级篇⑦

Redis学习——高级篇⑦ Redis7之缓存预热 缓存雪崩 缓存击穿 缓存穿透&#xff08;八&#xff09; 8.1 缓存预热8.1.1 是什么8.1.2 解决 8.2 缓存雪崩8.2.1 是什么8.2.2 发生8.2.3 预防 解决 8.3 缓存穿透8.3.1 是什么8.3.2 解决1 空对象缓存或者缺省值2 Goo…

【Linux网络编程三】Udp套接字编程(简易版服务器)

【Linux网络编程三】Udp套接字编程(简易版服务器&#xff09; 一.创建套接字二.绑定网络信息1.构建通信类型2.填充网络信息①网络字节序的port②string类型的ip地址 3.最终绑定 三.读收消息1.服务器端接收消息recvfrom2.服务器端发送消息sendto3.客户端端发送消息sendto4.客户端…

前端小案例——滚动文本区域(HTML+CSS, 附源码)

一、前言 实现功能: 这个案例实现了一个具有滚动功能的文本区域&#xff0c;用于显示长文本内容&#xff0c;并且可以通过滚动条来查看完整的文本内容。 实现逻辑&#xff1a; 内容布局&#xff1a;在<body>中&#xff0c;使用<div>容器创建了一个类名为listen_t…

【Java程序设计】【C00242】基于Springboot的冬奥会科普平台(有论文)

基于Springboot的冬奥会科普平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的冬奥会科普平台 本系统分为系统功能模块以及管理员功能模块。 系统功能模块&#xff1a;登录进入冬奥会科普平台可以查看首页&…

ToF 测距传感器 VL6180 测量范围修改(软件 I2C)

TOF 测距传感器 VL6180 传感器修改测量范围 ...... by 矜辰所致前言 之前写过一篇关于ToF 测距传感器 VL6180 使用的文章&#xff1a; ToF 测距传感器 VL6180 使用踩坑记&#xff08;软件 I2C&#xff09; 之后有粉丝问我如何修改测量距离&#xff0c;当时我只回答让粉丝去…

【c语言】简单贪吃蛇的实现

目录 一、游戏说明 ​编辑 二、地图坐标​ ​编辑 三、头文件 四、蛇身和食物​ 五、数据结构设计​ 蛇节点结构如下&#xff1a; 封装一个Snake的结构来维护整条贪吃蛇&#xff1a;​ 蛇的方向&#xff0c;可以一一列举&#xff0c;使用枚举&#xff1a; 游戏状态&a…

QT播放gstreamer命令(三)---使用QMediaPlayer

前文: 因为之前听说过,QMediaPlayer已经集成了gstreamer,但是并没有什么接口来例子来说明,根本看不出来有任何gstreamer的形式,于是在QT5助手里面搜了一下,发现确实有gstreamer的痕迹,但是例子写的极其拉胯,经过自己尝试,终于发现了一种直接使用QMediaPlayer播放gstre…

uniapp中组件库Mask 遮罩层 的使用方法

目录 #平台差异说明 #基本使用 #嵌入内容 #遮罩样式 #API #Props #Events #Slot 创建一个遮罩层&#xff0c;用于强调特定的页面元素&#xff0c;并阻止用户对遮罩下层的内容进行操作&#xff0c;一般用于弹窗场景 #平台差异说明 AppH5微信小程序支付宝小程序百度小程…

将链表反转

反转链表在解决需要从尾节点开始遍历到头节点的地方很实用&#xff0c;是一种常用的解题技巧。在反转时&#xff0c;我们可以考虑从前向后反转和从后向前反转两种方式。 法一&#xff1a;递归 每次将链表的头节点的下一个节点作为新的头节点&#xff0c;然后对剩余部分调用递归…

阿里云OSS对象存储

一、前言 阿里云对象存储OSS作用&#xff1a;用于存储图片、视屏、文件等数据。 参考阿里云文档地址&#xff1a;阿里云对象存储教程 二、总体思路 说明&#xff1a;客户端给服务端发送请求&#xff0c;获取policy和signature等数据&#xff08;服务端提供&#xff09;&#…

前端小案例——导航回顶部(HTML+CSS+JS, 附源码)

一、前言 实现功能&#xff1a; 这个案例实现了页面滚动到一定位置时显示"回到顶部"按钮&#xff0c;并且点击按钮能够平滑滚动回页面顶部的功能。 实现逻辑&#xff1a; 页面结构&#xff1a;通过HTML标签定义了页面的基本结构。页面主要由多个div.content组成&am…

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…

如何解决 docker registry x509 证书不信任问题?

最近想尝试一下极狐GitLab&#xff08;可以理解为 GitLab 在中国的发行版&#xff09;内置的容器镜像仓库&#xff0c;这样就不用自己安装 Harbor 之类的了。于是找了个服务器安装了一个极狐GitLab 的私有化部署版本&#xff0c;安装过程可以参考过往的技术文章使用Omnibus 安装…

刨析数据结构(二)

&#x1f308;个人主页&#xff1a;小田爱学编程 &#x1f525; 系列专栏&#xff1a;数据结构————"带你无脑刨析" &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于数据结构的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎…

Day06-Linux下目录命令讲解及重要文件讲解

Day06-Linux下目录命令讲解及重要文件讲解 1. Linux目录文件1.1 Linux系统目录结构介绍1.1.1 Linux与Windows目录结构对比 1.2 重要的Linux配置文件介绍1.2.1 /etc系统初始化及设置相关重要文件1.2.2 /usr目录的重要知识介绍------应用程序目录1.2.3 /var目录下的路径知识-----…

Qt|制作简单的不规则窗体

通常我们用到的对话框基本上都是规则的&#xff0c;在有些特殊情况下&#xff0c;也会使用到不规则窗口&#xff0c;那么该如何实现不规则窗体呢&#xff1f; 在MFC框架下很难实现&#xff0c;应该说是难的都想放弃&#xff0c;但是&#xff0c;Qt框架下提供了一个叫做setMask…

【JAVA】守护线程是什么?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 我的其他博客 正文 在计算机编程中&#xff0c;守护线程&#xff08;daemon thread&#xff09;是一种在程序运行时在后台提供服务的线程…

【正点原子STM32连载】 第四十七章 FATFS实验 摘自【正点原子】APM32E103最小系统板使用指南

1&#xff09;实验平台&#xff1a;正点原子APM32E103最小系统板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四…

【模型微调】| 各类微调模型总结 P-Tuning,Prefix,P-tuning v2,LoRA

文章目录 1 微调背景1.1 Full fine-tuning 全参数微调&#xff08;FFT&#xff09;1.2 parameter-Efficient-fine-tuning 部分参数微调&#xff08;PEFT&#xff09; 2 提示词调整训练法2.1 P-Tuning2.2 Prefix2.3 P-Tuning v2 3 结构调整训练法3.1 Adapter tuning3.2 LoRA 微调…

【2024年美国大学生数学建模竞赛】F题非法的野生动物贸易 完整数据

小云更新了全网最全的F题数据 另外也为大家分享&#xff1a; 技术文档&#xff0c;包括问题分析、建立模型、求解结果等&#xff0c;配套有思路分析视频、代码讲解视频。美赛官方限制总页数为25页&#xff0c;我们的思路长度为35页以上。所有模型都有求解代码和指标&#xff0…