2-单片机GPIO相关知识点及流水灯和按键采集小实验

news2024/11/18 22:46:47

目录

 小问题 :单片机上电后第一个执行的程序是?

【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     引脚号

     返回值:无

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

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

相关文章

Jenkins使用k8s部署应用

1、jenkins在k8s内部署&#xff08;请参考其他人的文章&#xff09; 2、jenkins安装kubenents相关插件 3、配置k8s云 非常重要,目的是实现jenkins可以远程调用k8s进行部署&#xff0c;并可实现安装jenkins-slave进行构建。使得不再依赖jenkins单机能力进行构建&#xff0c;比较…

Vue电商项目--search模块面包屑的制作

监听路由的变化再次发请求获取数据 复习&#xff1a; 这里要复习的一点就是&#xff1a;我们这个Search组件里面还有一个子组件&#xff0c;SearchSelector。 还有上面画圈的部分&#xff1a;在发请求之前&#xff0c;把接口需要传递参数&#xff0c;进行整理&#xff08;在给…

北京超算云中心pytorch/mmcv环境配置

北京超算云中心pytorch/mmcv环境配置 which python查看python路径source deactivate mmseg-dev退出当前环境sbatch --gpus2 ./run.sh提交训练任务作业parajobs查看已提交作业sacncel ID取消作业 先放上常用的基本命令。 下面开始配置pytorch pytorch环境配置 1、输入modul…

Highcharts Core Crack

Highcharts Core Crack 添加了新的“x轴交叉”和“y轴交叉”选项&#xff0c;使创建数学绘图的轴布局变得更容易。 添加了新的“series.legendSymbol”选项。 Highcharts是业界领先的JavaScript图表库。Highcharts被数以万计的开发人员和全球100家最大公司中超过80%的公司使用。…

docker创建ubuntu容器,且在该容器内启动jar包

一、创建并运行ubuntu容器 docker run --name docker_ubuntu(容器名称) -it -v /home/docker_ubuntu:/share // 将本地路径挂载到share目录下--restartalways --privilegedtrue // 设置容器退出时重启容器-p 20000:20000 // 映射内外端口&#xff0c;这里可以多个端口&…

Kubeadm方式搭建K8S集群

Kubeadm方式搭建K8S集群 环境准备 在虚拟机里安装三台centos 7.x操作系统 配置系统名称和ip地址(同一网段)如&#xff1a; 角色IPmaster192.168.66.100node1192.168.66.101node2192.168.66.102 三台机器都要执行的命令:&#xff08;使用xshell执行命令更方便&#xff09; …

Cloudcanal数据同步神器

一.背景与需求 最近有个OLAP的需求&#xff0c;我们需要将MySQL的一些数据(这种数据有一种特性就是一旦产生记录&#xff0c;以后不会再进行修改、删除操作&#xff0c;例如登录日志、操作日志等诸如此类)。这种数据特性正好符合Clickhouse的用武之地&#xff0c;我们经过调研最…

【冲刺蓝桥杯】牛客竞赛补题 + 算法模板总结

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; C/C专栏 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾…

Songtell.CN:用AI解锁您最喜欢的歌曲背后的含义!

&#x1f3a7;听歌不止是享受&#xff0c;还有深度的情感寓意&#xff01; &#x1f3a7;探索音乐真谛&#xff0c;Songtell.CN带你用 AI 解锁歌曲深度含义&#xff01; &#x1f3b6;音乐是人类的共同语言&#xff0c;它能够温暖我们的心灵&#xff0c;带给我们力量和勇气。…

参与辅助服务的用户侧储能优化配置及经济分析(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Web APIs之DOM-获取元素

一.Web API基本认知 二.获取DOM对象 三.操作元素内容 四. 操作元素属性 五.定时器-间歇函数 一、Web API基本认知 *作用和分类 *什么是DOM *DOM树 *DOM对象 1.作用和分类 &#xff08;1&#xff09;作用&#xff1a;使用JS去操作html和浏览器 &#xff08;2&#xff09…

【经验分享】一种高内聚低耦合的消息分发模块的设计与实现

【经验分享】一种高内聚低耦合的消息分发模块的设计与实现 又到了每天的open话题&#xff1a;【代码面对面】时刻&#xff0c;让我们一起在摸鱼中学习技术吧。今天的话题是嵌入式的消息分发模块&#xff0c;你会怎么设计和实现&#xff1f; 1 写在前面 老套路&#xff0c;我先…

开源LLM「RWKV」想要打造AI领域的Linux和Android|ChatAI

RWKV想逐步成为最强开源模型&#xff0c;中期计划取代Transformer。能如愿吗&#xff1f; “我们没有护城河&#xff0c;OpenAI也是。”近期&#xff0c;谷歌内部人士在Discord社区匿名共享了一份内部文件&#xff0c;点破了谷歌和OpenAI正面临的来自开源社区的挑战。尽管经外…

QT的qrc文件的创建和编辑

qrc文件&#xff0c;这个是Qt的资源文件&#xff0c;如果在pro文件中不包含的话&#xff0c;在编译的时候会提示找不到相应资源的错误&#xff1b;下面说一下手动修改pro和编写qrc文件的方法: 2.1 添加qrc文件&#xff1b; 2.2 编写qrc文件&#xff1b; 可以用 file…

SocketTools.NET 11.0 Crack

在所有 HTTP 客户端组件中添加对 HTTP/2.0 协议的支持。 2023 年 5 月 17 日 - 10:58新版本 特征 在所有 HTTP 客户端组件中添加了对 HTTP/2.0 协议的支持。 更新了 TLS 1.2&#xff08;及更高版本&#xff09;和 SSH 2.0 的安全选项&#xff0c;以使用 Microsoft Windows 11 和…

关于so的加密和解密(个人记录文件暂不分享)

一往情深深几许,深山夕照深秋雨 文章目录 一、so加密解密的介绍二、框架的so加密1.pom的依赖导入2.编写SoUtil 工具类3.编写处理byte工具类HexCode4.编写接口进行调用接口进行加解密总结提示:以下是本篇文章正文内容,下面案例可供参考 一、so加密解密的介绍 他是和jar包一同…

8年经验来面试20K的测试岗,连基础都不会,还不如招应届生。

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是3、4年工作经验&#xff0…

抽象编程——九章算术

九章算术 开篇&#xff0c;求最大公约数——辗转相减法 声明三个值 最大值 X 、最小值为 Y、商值 Z 用三个值解决辗转相减法 用最大值减去最小值得到商值&#xff0c;然后去掉原本的最大值&#xff0c;拿原本的最小值与商值作比较&#xff0c;得到第二个最大值与第二个…

Spring AOP介绍与使用

文章目录 1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…

京东太猛,手写hashmap又一次重现江湖

说在前面 在40岁老架构师 尼恩的读者社群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如京东、极兔、有赞、希音、百度、网易的面试资格&#xff0c;遇到一个很重要的面试题&#xff1a; 手写一个hashmap&#xff1f; 尼恩读者反馈说&#xff0c;之前总是听人说&#…