2-单片机GPIO相关知识点及流水灯和按键采集小实验
目录
小问题 :单片机上电后第一个执行的程序是?
【1】GPIO
1.定义
2.应用
I - Input 输入采集
O - Output 输出控制
3.GPIO结构框图
4.功能描述
输入功能
5.相关寄存器
【2】输出控制实验
实验:点亮一盏LED灯
1.实验步骤
2.编程实现
3.编译下载
4.复位上电
练习:实现LED灯闪烁
练习:实现流水灯效果 (寄存器版)
练习:实现流水灯效果 (HAL库版)
【3】输入采集实验
实验:按键点灯实验
1.查看开发板
2.查看原理图
3.配置STM32CubeMX
4.代码编写
【4】HAL库函数分析
STM32Project注意的地方







小问题 :单片机上电后第一个执行的程序是?
问: 单片机上电后第一个执行的程序是?
1、初始化堆栈指针SP=_initial_sp
2、初始化PC 指针=Reset_Handler
3、初始化中断向量表
4、配置系统时钟SystemInit
5、调用C 库函数_main 初始化用户堆栈,从而最终调用main 函数去到C 的世界
【1】GPIO
1.定义
在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CPU控制,有的需要CPU读取其输入信号,因此在嵌入式微处理器上提供了一种“通用可编程I/O端口”,也就是GPIO(General-purpose input/output) 。通用输入输出接口
2.应用
育松电子某宝
电子商品比较好
I - Input 输入采集


DO - 数据量输出口 0 或1
O - Output 输出控制
控制数码管


上图为继电器
继电器原理:

3.GPIO结构框图

补充:
问:VDD、VSS、VCC分别表示什么意思?

1、vdd:在电子电路中,VDD表示器件的意思, 即器件内部的工作电压。
2、vss:在电子电路中, VSS表示公共连接的意思,通常指电路公共接地端电压。
VCC :接入电路的电压
VDD : 元器件内部的工作电压
VSS : 公共接地端电压
问:施密特触发器的作用?
由于外部输入的信号,可能会出现脉冲等噪声的影响,为了让信号更加清晰,所以就设置了TTL施密特触发器来进行整形。

4.功能描述

输入功能
浮空输入:无输入设备时不建议悬空

通俗讲就是让管脚什么都不接,悬空着。
此时VDD和VSS所在路径的两个开关同时断开。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,完全由外部输入决定。
一般实际运用时,引脚不建议悬空,易受干扰。
优势:
这一种输入模式的电平会完全取决于外部电路而与内部电路无关。
缺点:
在没有外部电路接入的时候,IO脚浮空会使得电平不确定
应用:
该模式是STM32复位之后的默认模式,一般用作对开关按键的读取或用于标准的通讯协议,比如IIC、USART的等。
上拉输入
IO端口 - 上拉电阻 - 施密特触发器 - 输入数据寄存器 - 读

输入的电平不会因上下浮动而导致输入信号不稳定,当外部没有信号输入时,上拉电阻会将输入信号钳在高电平,此时引脚始终读到高电平信号。
下拉输入
IO端口 - 下拉电阻 - 施密特触发器 - 输入数据寄存器 - 读

输入的电平不会因上下浮动而导致输入信号不稳定,当外部没有信号输入时,下拉电阻会将输入信号钳在低电平,此时引脚始终读到低电平信号。
模拟输入

信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。 所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。
应用:当 GPIO 引脚用于 ADC 采集电压的输入通道时,则需要选择“模拟输入”功能,因为经过施密特触发器后信号只有 0、1 两种状态,所以 ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。
开漏输出
输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将端口置于高阻状态 (P-MOS 从不被激活 )。
无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。
可以利用改变上拉电源的电压来适应所需,进而提高外部电路的驱动能力。

推挽输出
输出寄存器上的’0’激活 N-MOS,而输出寄存器上的’1’将激活 P-MOS,具备输出高低电平的能力。
当上面的MOS管导通时,GPIO输出高电平1,称为“推

当下面MOS管导通时,GPIO输出低电平0,称为“挽”

5.相关寄存器
4 个 32 位 配 置 寄 存 器
GPIOx_MODER 模式寄存器

GPIOx_OTYPER 输出类型寄存器

GPIOx_OSPEEDR 输出速度寄存器

GPIOx_PUPDR 上拉下拉寄存器

2 个 32 位数据寄存器
GPIOx_IDR 输入数据寄存器

GPIOx_ODR 输出数据寄存器

1 个32 位置位 / 复位寄存器
GPIOx_BSRR

1 个 32 位锁定寄存器
GPIOx_LCKR
2 个 32 位替代功能寄存器
GPIOx_AFRH
GPIOx_AFRL
【2】输出控制实验
实验:点亮一盏LED灯
1.实验步骤
1.查看开发板,找到LED灯

2.查看原理图




分析得到结论:只需要讲PB1引脚配置成输出功能且输出低电平信号即可点亮蓝灯。
2.编程实现
1)寄存器配置




2)代码编写
RCC->IOPENR |= 1<<1; //使能GPIOB组时钟
GPIOB->MODER &= ~(0X3 << 2); //配置输出模式
GPIOB->MODER |= 1<<2;
GPIOB->OTYPER &= ~(1<<1); //推挽输出模式
GPIOB->ODR &= ~(1<<1); //输出低电平

3.编译下载


4.复位上电

练习:实现LED灯闪烁
先实现初始化函数、开关控制函数、延时函数:

声明函数:

再while(1)死循环中,调用开关函数,并通过延时保持一段时间,即可看到闪烁效果。

练习:实现流水灯效果 (寄存器版)
实现初始化函数,将PB0/PB1/PB2分别初始化为推挽输出模式。

置X位
置0:&= ~(1<<X)
置1:|= (1<<X)
实现三盏LED灯的亮灭函数:

实现延时函数:

main函数调用:

实现效果:

练习:实现流水灯效果 (HAL库版)
打开STM32CubeMX新建工程配置引脚功能


引脚功能详细配置



生成代码

代码编写:

【3】输入采集实验
实验:按键点灯实验
1.查看开发板

找到五向按键 丝印 - S1
2.查看原理图



四路或门电路
//只要有一个方向键被按下,D3&KEY则输出高电平信号。



//只要有方向键被按下,PA8引脚则会输入一个高电平信号。
3.配置STM32CubeMX

4.代码编写

【4】HAL库函数分析
HAL库是ST公司为STM32的MCU最新推出的抽象层嵌入式软件
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) 功能:设置或清除指定的端口位 (让指定引脚输出高低电平) 参数:GPIO_TypeDef * GPIOx 端口号uint16_t GPIO_Pin 引脚号GPIO_PinState PinState 电平状态GPIO_PIN_RESET 0 低电平GPIO_PIN_SET 1 高电平返回值:无 void HAL_Delay(uint32_t Delay)功能:实现毫秒级延时参数:延时时间(ms)返回值:无 GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) 功能:读取指定引脚的电平状态参数: GPIO_TypeDef * GPIOx 端口号uint16_t GPIO_Pin 引脚号返回值:GPIO_PinState 电平状态GPIO_PIN_RESET 0 GPIO_PIN_SET 1 void HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin) 功能:翻转指定引脚的电平状态参数: GPIO_TypeDef * GPIOx 端口号uint16_t GPIO_Pin 引脚号返回值:无 相关文章:
2-单片机GPIO相关知识点及流水灯和按键采集小实验
目录 小问题 :单片机上电后第一个执行的程序是? 【1】GPIO 1.定义 2.应用 I - Input 输入采集 O - Output 输出控制 3.GPIO结构框图 4.功能描述 输入功能 5.相关寄存器 【2】输出控制实验 实验:点亮一盏LED灯 1.实验…...
基础知识(王爽老师书第一章)
文章目录 基础知识1.1 引言1.2 机器语言1.2 引言汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线小结检测点1.11.11 内存地址空间1.12 主板1.13 接口卡1.14 各类存储器芯片1.15 内存地址空间…...
非煤矿山电子封条建设算法 yolov8
非煤矿山电子封条建设算法模型通过yolov8网络模型AI视频智能分析技术,算法模型对作业状态以及出井入井人员数量变化、人员睡岗离岗等情况实时监测分析,及时发现异常动态,自动推送生成的违规截图报警信息。现代目标检测器大部分都会在正负样本…...
七大软件架构设计原则详解
目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…...
【Python入门】Python循环语句(while循环的嵌套应用)
前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…...
数据来源和搜集
数据搜集 文章目录 数据搜集1 数据来源1.1 数据的间接来源1.2 间接数据的评价1.3 数据的直接来源 2 调查数据2.1概率抽样2.2 非概率抽样2.3 概率抽样 *vs.*非概率抽样 3 搜集数据的方法4 实验数据4.1 实验组与对照组4.2 实验中的若干问题 1 数据来源 所有统计数据都来源于社会…...
Python入门(七)if语句(二)
if语句(二) 1.if语句1.1 简单的if语句1.2 if-else语句1.3 if-elif-else结构1.4 使用多个elif代码块1.5 使用多个elif代码块 2.使用if语句处理列表2.1 检查特殊元素2.2 确定列表不是空的2.3 使用多个列表 作者:xiou 1.if语句 前面我们理解了…...
[元带你学: eMMC完全解读 2] eMMC协议相关术语与定义
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC完全解读》 内容摘要 前言 文中列出了常用和不常用的eMMC 术语, 只需要了解常用术语就完全够用, 非常用术语几乎都用不上,只要遇到的…...
预测杭州五一黄金周的旅游出行人数
对于杭州五一黄金周的旅游出行人数的预测,可以从以下几个方面进行考虑。 一、历史数据的分析 杭州作为一个旅游胜地,每年的五一黄金周都吸引了大量的游客前来游玩。历史数据可以为我们提供有用的信息,帮助我们预测今年的旅游出行人数。 1.…...
内防泄密重要,还是外防窃密重要?
内防泄密是组织为防止内部敏感信息未经授权泄露所采取的各种管理与技术措施的总称。它主要针对内部人员的信息访问与操作行为进行管控,减少故意或疏忽泄密事件的发生几率。 内防泄密的工作,通常包括员工管理、权限管控、监控检查、分级保护、离岗管控、技术防护、事…...
ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API
使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…...
5月17日,今日信息差
1、中老铁路运输货物突破2000万吨。其中,跨境货运量超400万吨,货值达177亿元 2、北京首个5.5G实验基站在昌平区的国际信息港建设开通,5.5G将在速率、时延、连接规模和能耗方面全面超越现有5G,实现下行万兆和上行千兆的峰值速率…...
物联网的体系架构
物联网中常见的计算模式:云计算、边缘计算、雾计算等 云计算:一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。边缘计算:在靠近物或数据源头的网络边缘侧,融合网络、计算、存储…...
Golang交叉编译
Golang交叉编译遇到的问题 交叉编译go支持的平台和版本 交叉编译 go支持的平台和版本 查询命令: go tool dist list显示结果: aix/ppc64android/386android/amd64android/armandroid/arm64darwin/amd64darwin/arm64dragonfly/amd64freebsd/386freebsd/…...
kafka3.x详解
kafka 一、简介1.1、场景选择,与其他mq相比1.2、应用场景1.2.1、流量消峰1.2.2、解耦1.2.3、异步通讯 1.3、消息队列的两种模式1.3.1、点对点模式1.3.2、发布/订阅模式 1.4、Kafka 基础架构 二、安装部署2.1、安装包方式2.2、docker安装方式2.3、docker安装kafka-ma…...
kubectl常用命令|pod生命周期|金丝雀发布|超详细
kubectl常用命令|pod生命周期|金丝雀发布|超详细 一 kubectl常用命令1.1 查看版本信息1.2查看资源对象简写1.3查看集群信息1.4 配置kubectl自动补全1.5node节点查看日志 二 k8s基本信息查看2.1 查看 master 节点状态2.2 查看命令空间2.3 创建和删除命名空间2.4 在命名空间kube-…...
【Linux系统】Linux进程信号详解
Linux进程信号 0 引言1 认识信号1.1 什么是信号1.2 发送信号的本质1.3 信号的处理 2 信号的产生2.1 键盘产生2.2 调用系统函数向进程发送信号2.3 由软件条件产生信号2.4 硬件异常产生信号 3 信号的保存4 信号的处理5 总结 0 引言 本篇文章会从Linux信号的产生到信号的保存&…...
阿里云u1服务器通用算力型CPU处理器性能测评
阿里云服务器u1通用算力型Universal实例高性价比,CPU采用Intel(R) Xeon(R) Platinum,主频是2.5 GHz,云服务器U1实例的基准vCPU算力与5代企业级实例持平,最高vCPU算力与6代企业级实例持平,提供2c-32c规格和1:1/2/4/8丰富…...
hive的详细使用文档和使用案例
目录 Hive 简介安装连接到Hive创建数据库创建表加载数据查询数据修改表删除表 使用案例结论 Hive 简介 Hive是一个基于Hadoop的数据仓库工具,可以将结构化数据映射到Hadoop HDFS上,并提供SQL查询功能。Hive的设计目标是让那些熟悉SQL语言的用户能够在Ha…...
KL散度
KL散度(Kullback-Leibler divergence),也称为相对熵(relative entropy),是用来衡量两个概率分布之间差异的一种指标。在机器学习中,KL散度常常用于度量两个概率分布之间的相似度或差异性。 具体…...
Arduino Mega2560 Bootloader烧录失败?排查这5个常见问题(附解决方案)
Arduino Mega2560 Bootloader烧录失败?5个关键故障点与深度修复指南 当黄灯不再闪烁、IDE报错信息铺满屏幕、端口列表空空如也——这些红色警报意味着你的Bootloader烧录流程可能正在某个隐蔽环节崩溃。作为经历过137次烧录失败的老兵,我总结出这套实战派…...
STM32F4标准库 DMA FSMC驱动TFT-LCD:从CPU瓶颈到DMA高效刷屏实战
1. 为什么需要DMAFSMC方案优化TFT-LCD刷新 当你用STM32F4驱动TFT-LCD时,是否遇到过画面刷新卡顿、CPU占用率飙升的情况?这通常是因为传统的逐点描画方式(比如LCD_DrawPoint函数)需要CPU频繁介入每个像素的写入操作。我最初用9341驱…...
MusicFree插件:打造个性化音乐播放器的开源解决方案
MusicFree插件:打造个性化音乐播放器的开源解决方案 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 在当今数字音乐时代,你是否厌倦了在不同音乐平台间频繁切换?…...
【多模态社交分析实战指南】:SITS2026真实案例拆解+5大避坑红线(仅限首批读者获取原始数据集)
第一章:SITS2026案例:多模态社交媒体分析 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Social Intelligence & Trustworthy Systems 2026)是一个聚焦真实世界多模态社交媒体治理的前沿研究项目,其核心…...
AI算力缺电难题待解:燃气轮机产能受限,航改机、内燃机、SOFC等技术路线迎新机
燃气轮机产业链,谁是高价值赛道?从燃气轮机整体产业链来看,涡轮叶片是无可争议的“心脏”与“瓶颈”。其性能决定燃机效率与功率,稀缺产能锁死下游主机交付上限。马斯克指出,xAI采购天然气燃气轮机时发现订单已排至203…...
Topit:macOS窗口置顶终极指南,3步解决你的多任务烦恼
Topit:macOS窗口置顶终极指南,3步解决你的多任务烦恼 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾遇到过这样的场景…...
QMC解码器:3分钟解锁QQ音乐加密文件,实现跨平台音乐自由
QMC解码器:3分钟解锁QQ音乐加密文件,实现跨平台音乐自由 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的歌曲只能在特定应用播放…...
千问3.5-2B助力嵌入式开发:智能调试与日志分析
千问3.5-2B助力嵌入式开发:智能调试与日志分析 1. 嵌入式开发的调试痛点 在STM32等嵌入式系统开发中,调试过程往往充满挑战。想象一下这样的场景:设备突然异常重启,控制台输出长达数百行的日志信息,其中混杂着硬件中…...
别再到处找免费股票数据了!实测可用:Python/JS/Java调用StockAPI获取K线、Level2实时行情保姆级教程
实战指南:用StockAPI高效获取股票数据的多语言解决方案 在金融科技和量化交易领域,获取准确、实时的股票数据是每个开发者面临的第一个挑战。市面上充斥着各种号称"免费"的数据源,但真正稳定可用的却寥寥无几。StockAPI.com.cn作为…...
AnyChart 的tagCloud组件
组件渲染失败错误protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_mistake_analysis);MistakeDao mistakeDao new MistakeDao(MistakeAnalysisActivity.this);List<String> subjectErrorlist…...
