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

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相关知识点及流水灯和按键采集小实验

目录 小问题 &#xff1a;单片机上电后第一个执行的程序是&#xff1f; 【1】GPIO 1.定义 2.应用 I - Input 输入采集 O - Output 输出控制 3.GPIO结构框图 4.功能描述 输入功能 5.相关寄存器 【2】输出控制实验 实验&#xff1a;点亮一盏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视频智能分析技术&#xff0c;算法模型对作业状态以及出井入井人员数量变化、人员睡岗离岗等情况实时监测分析&#xff0c;及时发现异常动态&#xff0c;自动推送生成的违规截图报警信息。现代目标检测器大部分都会在正负样本…...

七大软件架构设计原则详解

目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…...

【Python入门】Python循环语句(while循环的嵌套应用)

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为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语句&#xff08;二&#xff09; 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 使用多个列表 作者&#xff1a;xiou 1.if语句 前面我们理解了…...

[元带你学: eMMC完全解读 2] eMMC协议相关术语与定义

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC完全解读》 内容摘要 前言 文中列出了常用和不常用的eMMC 术语, 只需要了解常用术语就完全够用, 非常用术语几乎都用不上,只要遇到的…...

预测杭州五一黄金周的旅游出行人数

对于杭州五一黄金周的旅游出行人数的预测&#xff0c;可以从以下几个方面进行考虑。 一、历史数据的分析 杭州作为一个旅游胜地&#xff0c;每年的五一黄金周都吸引了大量的游客前来游玩。历史数据可以为我们提供有用的信息&#xff0c;帮助我们预测今年的旅游出行人数。 1.…...

内防泄密重要,还是外防窃密重要?

内防泄密是组织为防止内部敏感信息未经授权泄露所采取的各种管理与技术措施的总称。它主要针对内部人员的信息访问与操作行为进行管控,减少故意或疏忽泄密事件的发生几率。 内防泄密的工作&#xff0c;通常包括员工管理、权限管控、监控检查、分级保护、离岗管控、技术防护、事…...

ChatGPT:2. 使用OpenAI创建自己的AI网站:1. 初探API

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白&#xff0c;有OpenAI的账号&#xff0c;但想调用OpenAI的API搞一些有意思的事&#xff0c;那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新&#xff0c;进度慢…...

5月17日,今日信息差

​1、中老铁路运输货物突破2000万吨。其中&#xff0c;跨境货运量超400万吨&#xff0c;货值达177亿元 2、北京首个5.5G实验基站在昌平区的国际信息港建设开通&#xff0c;5.5G将在速率、时延、连接规模和能耗方面全面超越现有5G&#xff0c;实现下行万兆和上行千兆的峰值速率…...

物联网的体系架构

物联网中常见的计算模式&#xff1a;云计算、边缘计算、雾计算等 云计算&#xff1a;一种利用互联网实现随时随地、按需、便捷地使用共享计算设施、存储设备、应用程序等资源的计算模式。边缘计算&#xff1a;在靠近物或数据源头的网络边缘侧&#xff0c;融合网络、计算、存储…...

Golang交叉编译

Golang交叉编译遇到的问题 交叉编译go支持的平台和版本 交叉编译 go支持的平台和版本 查询命令&#xff1a; go tool dist list显示结果&#xff1a; aix/ppc64android/386android/amd64android/armandroid/arm64darwin/amd64darwin/arm64dragonfly/amd64freebsd/386freebsd/…...

kafka3.x详解

kafka 一、简介1.1、场景选择&#xff0c;与其他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实例高性价比&#xff0c;CPU采用Intel(R) Xeon(R) Platinum&#xff0c;主频是2.5 GHz&#xff0c;云服务器U1实例的基准vCPU算力与5代企业级实例持平&#xff0c;最高vCPU算力与6代企业级实例持平&#xff0c;提供2c-32c规格和1:1/2/4/8丰富…...

hive的详细使用文档和使用案例

目录 Hive 简介安装连接到Hive创建数据库创建表加载数据查询数据修改表删除表 使用案例结论 Hive 简介 Hive是一个基于Hadoop的数据仓库工具&#xff0c;可以将结构化数据映射到Hadoop HDFS上&#xff0c;并提供SQL查询功能。Hive的设计目标是让那些熟悉SQL语言的用户能够在Ha…...

KL散度

KL散度&#xff08;Kullback-Leibler divergence&#xff09;&#xff0c;也称为相对熵&#xff08;relative entropy&#xff09;&#xff0c;是用来衡量两个概率分布之间差异的一种指标。在机器学习中&#xff0c;KL散度常常用于度量两个概率分布之间的相似度或差异性。 具体…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...