stm32单片机个人学习笔记4(GPIO输入)

前言

本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

一、按键介绍

二、传感器模块介绍

 三、硬件电路

上面两个按键按下是低电平,松手是高电平

左边两个要配置为上拉输入模式或下拉输入模式

右边两个可以配置为浮空输入模式也可以配置为上拉输入模式或下拉输入模式

一般采用上面两种接法,一些单片机没有下拉输入模式

 四、实例一(按键控制LED)

1.接线图

2. 代码

LED.c

#include "stm32f10x.h"                  // Device header/*** @brief  LED初始化函数* @param  无* @retval 无*/
void LED_Init(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_1 | GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
}/*** @brief  点亮LED1* @param  无* @retval 无*/
void LED1_ON(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}/*** @brief  熄灭LED1* @param  无* @retval 无*/
void LED1_OFF(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_1);
}/*** @brief  翻转LED1,处于点亮状态时,熄灭它;处于熄灭状态时,点亮它* @param  无* @retval 无*/
void LED1_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)==0){GPIO_SetBits(GPIOA,GPIO_Pin_1);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_1);}
}/*** @brief  点亮LED2* @param  无* @retval 无*/
void LED2_ON(void)
{GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}/*** @brief  熄灭LED1* @param  无* @retval 无*/
void LED2_OFF(void)
{GPIO_SetBits(GPIOA,GPIO_Pin_2);
}/*** @brief  翻转LED2,处于点亮状态时,熄灭它;处于熄灭状态时,点亮它* @param  无* @retval 无*/
void LED2_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2)==0){GPIO_SetBits(GPIOA,GPIO_Pin_2);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_2);}
}

 Key.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"/*** @brief  按键初始化* @param  无* @retval 无*/
void Key_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_11;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);}/*** @brief  获取键码值* @param  无* @retval KeyNum:键码值*/
uint8_t Key_GetNum(void)
{uint8_t KeyNum = 0;if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)==0);Delay_ms(20);KeyNum = 1;}if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0){Delay_ms(20);while(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)==0);Delay_ms(20);KeyNum = 2;}return KeyNum;
}

 

 五、实例二(光敏传感器控制蜂鸣器)

1.接线图

2.代码

Buzzer.c 

#include "stm32f10x.h"                  // Device header/*** @brief  蜂鸣器初始化* @param  无* @retval 无*/
void Buzzer_Init(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);GPIO_SetBits(GPIOB,GPIO_Pin_12);
}/*** @brief  打开蜂鸣器* @param  无* @retval 无*/
void Buzzer_ON(void)
{GPIO_ResetBits(GPIOB,GPIO_Pin_12);
}/*** @brief  关闭蜂鸣器* @param  无* @retval 无*/
void Buzzer_OFF(void)
{GPIO_SetBits(GPIOB,GPIO_Pin_12);
}/*** @brief  翻转蜂鸣器* @param  无* @retval 无*/
void Buzzer_Turn(void)
{if (GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_12)==0){GPIO_SetBits(GPIOB,GPIO_Pin_12);}else{GPIO_ResetBits(GPIOB,GPIO_Pin_12);}
}

 LightSensor.c

#include "stm32f10x.h"                  // Device header/*** @brief  光敏传感器初始化* @param  无* @retval 无*/
void LightSensor_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);}/*** @brief  光敏传感器输入数据* @param  无* @retval 光照强度小输出高电平1,光照强度大输出低电平0*/
uint8_t LightSensor_Get(void)
{return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13);
}

 

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

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

相关文章

【资料分析】刷题日记2

第一套 √ 2013-2016一共有13,14,15,16四年,亦即16 - 13 1 4年 √ 是多少倍 ③vs④:都是只给出了年均增速,③求的是其中一年的,无法确定;④求的是这个时段总共的,可…

JavaScript 网页设计案例:互动留言板

目录 案例:互动留言板 1. 初始HTML结构 2. CSS 样式 3. JavaScript 功能实现 4. JavaScript 实现细节解析 4.1 DOMContentLoaded 事件 4.2 获取 DOM 元素 4.3 动态创建和添加留言 4.4 删除和编辑功能 5. 留言板功能扩展与优化 5.1 键盘快捷键 5.2 本地存…

互联网前端之 CSS 常见属性与三层结构

目录 现在互联网前端三层 CSS 常见属性 关注作者微信公众号,开启探索更多 CSS 知识的精彩之旅。在这里,你将收获丰富的CSS专业内容,深入了解这一网页开发语言的奥秘,不断拓展你的知识边界,提升技能水平。快来关注吧&…

窗户检测系统源码分享

窗户检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

一文读懂DaemonSet以及实践攻略

一文读懂DaemonSet以及实践攻略 目录 1 概念 1.1 什么是DaemonSet1.2 DaemonSet 的工作机制1.3 适用场景1.4 DaemonSet 与 Deployment 的区别1.5 DaemonSet的通信模式 2 实践案例:部署和更新 Fluentd 日志收集器 2.1 部署Fluentd DaemonSet 2.1.1 定义Fluentd Dae…

2012年408考研真题-数据结构

8.【2012统考真题】求整数n(n≥0)的阶乘的算法如下&#xff0c;其时间复杂度是(&#xff09;。 int fact(int n){ if(n<1) return 1; return n*fact (n-1); } A. O(log2n) B. O(n) C. O(nlog2n) D. O(n^2) 解析&#xff1a; 观察代码&#xff0c;我们不…

【代码】使用c#实现串口通信的基础模板

一、分享代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;using System.IO.Ports; using…

SAP中BW与OFFICE 64位兼容性问题解决实例

近期遇到一个BW与OFFICE的兼容性问题。新电脑(WIN11)安装使用SAP正常&#xff0c;安装OFFICE 2016 64位版时&#xff0c;BEx Aanlysis无法打开(没有提示&#xff0c;下位框不出现)。安装OFFICE 2016 32位版时&#xff0c;BW的Aanlysis可正常使用。 这个BEx Aanlysis我理解是SA…

链表--(1)链表的概念

前言引入 之前我们学习了数组这一概念,使用数组可以在编程时增加程序的灵活性。但在c语言中不允许定义动态数组的类型也不能随意调整数组的大小,往往会导致内存空间的浪费。由此我们推出链表。链表是动态进行内存分配的一种结构,它可以随时为其结点分配需要的存储空间也方便…

爬虫框架之Scrapy介绍——高效方便

# 近年来大数据分析、数据可视化和python等课程逐渐在大学各个学科中铺展开来&#xff0c;这样一来爬虫在平时小作业和期中、期末报告中出现的频率也逐渐变高。那么单一的使用requests库&#xff0c;自己从头到尾的的设计&#xff0c;考虑数据提取、线程管理和数据存储等方方面…

干货:分享6款ai论文写作助手,一键生成原创论文(步骤+工具)

写一篇论文是一个复杂的过程&#xff0c;涉及多个步骤&#xff0c;包括选题、研究、撰写、编辑和校对。AI可以在其中的一些步骤中提供帮助&#xff0c;但最终的论文还是需要人类作者的深入思考和创造性输入。以下是六款值得推荐的AI论文写作助手&#xff0c;其中特别推荐千笔-A…

前端开发之原型模式

介绍 原型模式本质就是借用一个已有的实例做原型&#xff0c;在这原型基础上快速复制出一个和原型一样的一个对象。 class CloneDemo {name clone democlone(): CloneDemo {return new CloneDemo()} } 原型原型链 函数&#xff08;class&#xff09;都有显示原型 prototyp…

Redis-01 入门和十大数据类型

Redis支持两种持久化方式&#xff1a;RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上&#xff0c;可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照&#xff0c;可以通过恢复RDB文件来恢复数据。 2.AOF持久化…

深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏

文章目录 0. 前言1.发展现状2.行车功能中难点问题及解决思路问题1&#xff1a;车道居中辅助&#xff0c;画龙&#xff0c;蛇行问题。问题2&#xff1a;外界环境扰动以及传感器信息缺失下的横向控制难点问题3&#xff1a;大坡度平稳停车 3. 泊车功能中难点问题及解决思路问题1&a…

尚品汇-秒杀下单实现-页面轮询查询订单状态(五十三)

目录&#xff1a; &#xff08;1&#xff09;整合秒杀业务 &#xff08;2&#xff09;秒杀下单 &#xff08;3&#xff09;秒杀下单监听 &#xff08;4&#xff09;页面轮询接口 &#xff08;1&#xff09;整合秒杀业务 秒杀的主要目的就是获取一个下单资格&#xff0c;拥…

【iOS】——JSONModel源码

JSONModel用法 基本用法 将传入的字典转换成模型&#xff1a; 首先定义模型类&#xff1a; interface Person : JSONModel property (nonatomic, copy) NSString *name; property (nonatomic, copy) NSString *sex; property (nonatomic, assign) NSInteger age; end接…

索引的介绍

目录 1.索引的介绍 1.1 什么是索引 1.2 为什么要使用索引 2.索引应该选择哪种数据结构 3.MYSQL中的页 3.1为什么要使用页 3.2页文件头和页文件尾 3.3 页主体 3.3页目录 3.4数据页头 4.B在MYSQL索引中的应用 4.1计算三层树高的B树可以存放多少条记录 5.索引分类 5.1 主…

居中左右对齐且加粗的蓝色文本

//test.html <!DOCTYPE html> <html> <head> <title>我的网页</title> <link rel"stylesheet" href"styles.css"> </head> <body> <p class"left-text">这是居左对齐且加粗的…

Element走马灯组件循环播放两个页面是方向不一致

摘要&#xff1a;使用Carousel 走马灯循环播放同一类型的图片、文字等内容&#xff0c;会在循环内容为两组是出现下图 [1]中的现象。本文记录下如何解决 之前项目遇到过一次这个问题&#xff0c;由于indicator-position 指示器不用显示&#xff0c;则判断内容长度为2时&#xf…

springboot通过tomcat部署项目(包含jar、war两种方式,迄今为止全网最详细!2024更新..建议收藏,教学!万字长文!)

本博客参考的所有文章均已在结尾声明&#xff01;&#xff01;&#xff01; 在 Spring Boot 项目中&#xff0c;有两种常见的部署方式&#xff1a; 1、使用 Spring Boot 自带的 内置 Tomcat&#xff0c;将项目打包为 jar 并直接运行。 2、使用 外置 Tomcat&#xff0c;将项目打…