GPIO 和轮询控制 LED 的状态
GPIO 概念
I/O 是输入(Input)和输出(Output)的意思,GPIO(General Purpose I/O)是基本输入输出,是 I/O 的最基本形式。STM32F103ZET6 大概有 144 个引脚,每个引脚有多个功能,有些引脚可以用作中断、可以用作 GPIO,所以引脚有复用功能。这些引脚连接如 LED、蜂鸣器、按键等。
实现通过按键对 LED0 的控制。假如 LED0 的引脚是 PB5,STM32F103ZET6 控制该引脚输出高电平或低电平,即开关量输出,因此该引脚配置成 GPIO Output。STM32F103ZET6 获取按键的状态:按键按下还是松开?因此,按键的引脚是 GPIO Input。当按键按下时,向 PB5 引脚输出高电平,使 LED0 亮,反之,使 LED0 灭。
综上所述,GPIO 是 MCU? 同外界进行交互的重要通道,通过 GPIO 可以实现软件干预硬件。
实验检测理论
实验准备
实验目的:通过轮询和 GPIO 实现控制 LED0 和 LED1 的闪烁。
实验资料:1️⃣正点原子:STM32F103ZET62️⃣STM32F103ZET6 电路原理图
本随笔中只贴出开发板的 LED1、LED0 的原理图:


CubeMX 配置
找到 LED0 和 LED1 的引脚,设置 GPIO_Output,因为是 MCU 通过端口寄存器控制该引脚状态,所以 PB5 和 PE5 是一个输出引脚。

打开 SYS -> Debug Serial。

设置时钟,我现在也是一个初学者,对时钟的概念还不知道,姑且配置最高,CubeMX 会提示你配置过大,它可以帮你修改。


记得使用 MDK 生成工程项目,否则不能用 Keil 打开,默认是其他的工程项目。

编写代码
while (1)
{
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET);
HAL_Delay(1000);
}
代码很简单,主要是 HAL_GPIO_WritePin 函数,向引脚输出开关量。LED 一直都是一个高电平状态,直接连接的是 Vcc(电源),而我们是给 LED 写一个低电平,就可以改变 LED 的状态,使得 LED 亮,否则 LED 灭。GPIO_PIN_SET 是 CubeMX 设置好的,不管输出的是高还是低电平,改变状态就是 SET,恢复原来的状态就是 RESET。
实验效果

代码仓库:GPIO_LIGHT
实验总结
很多编程语言都有 IO 流的章节,IO 流就是一个获取系统的资源的管道。获取就是输入(Input),写出就是输出(Output)。Java 除了最基本的 IO 流,还有字节流、字符流等更高级的 IO 流。
在嵌入式系统开发中也有 IO,其中最基本的就是 GPIO,是嵌入式系统开发中最基础的 IO。MCU 要控制板子上的外围设备,如 LED、蜂鸣器,就得通过 GPIO 向外输出开关量。
GPIO 和轮询控制 LED 的状态的更多相关文章
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED
实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...
- 【iCore1S 双核心板_ARM】例程四:USART通信实验——通过命令控制LED
实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PB6),CH340的RXD连接STM32的 GPIO(PB7),通过串 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。附:网友制作的类库说明(CHM)
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 【轮询】【ajax】【js】【spring boot】ajax超时请求:前端轮询处理超时请求解决方案 + spring boot服务设置接口超时时间的设置
场景描述: ajax设置timeout在本机测试有效,但是在生产环境等外网环境无效的问题 1.ajax的timeout属性设置 前端请求超时事件[网络连接不稳定时候,就无效了] var data = ...
- 树莓派GPIO控制LED彩灯
树莓派使用GPIO接口来控制LED灯,自制五彩炫光的节日彩灯. 1.硬件准备 a. 树莓派(Raspberry Pi)一个 b. 彩色RGB二极管 c. 杜邦线 d. 5V电源引脚 以上所有零件均可在 ...
- polling轮询和comet
comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...
- ARM实验4—按键轮询实验
key_poll按键轮询实验 实验内容: 通过FS_4412开发板上的按键控制LED灯并打印信息. 实验目的: 熟悉开发环境的使用. 掌握猎户座4412处理器的GPIO接口, 实验平台: FS4412 ...
- [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)
说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...
- 如何从线程返回信息——轮询、回调、Callable
考虑有这样一个LiftOff类: /** * 类LiftOff.java的实现描述:显示发射之前的倒计时 * * @author wql 2016年9月21日 下午1:46:46 */ public ...
随机推荐
- 【Java SE】Day08 String类、static关键字、Arrays类、Math类
一.String类 1.概述 所有双引号字符串,都是String类的对象 字符串常量,会存在字符串常量池中 2.创建 构造函数--空构造.字符数组.字节(byte ASCII码)数组 3.常用方法-- ...
- 【sqoop】简介、原理、安装配置测试、导入导出案例、脚本打包、常见命令及参数介绍、常用命令举例
一.sqoop简介 用于在Hadoop(Hive)与传统的数据库(mysql.oracle...)之间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等 ...
- 01.Typora基本使用
1.标题 方法一: 在文字前面加上"#",将其变成标题. "#"的数量决定字体的大小."#"数量越多字体越小. 如下,其中一级标题是字体最大 ...
- salesforce零基础学习(一百二十三)Transaction Security 浅入浅出
本篇参考: https://help.salesforce.com/s/articleView?id=sf.enhanced_transaction_security_policy_types.htm ...
- python循环结构之for循环
在python中,for循环是应用非常广的循环语句,遍历字典.遍历列表等等... # for语句结构 for 遍历 in 序列: 执行语句 遍历字典 lipsticks = {"Chanel ...
- [图像处理] YUV图像处理入门2
1 分离YUV420中YUV分量 本程序中的函数主要是将YUV420P视频数据流的第一帧图像中的Y.U.V三个分量分离开并保存成三个文件.函数的代码如下所示: /** * @file 1 yuv_sp ...
- flask_apscheduler
网上很多文章包括官网给出来的,更多的是执行的函数和初始话app在同一文件 按照app 路由 模型类 视图 往下延申,项目已经成型,所以上述的方法不适用. (不用操心模型类与app互相导入的错误)下面分 ...
- [Leetcode]设计链表
题目 设计链表的实现.您可以选择使用单链表或双链表.单链表中的节点应该具有两个属性:val 和 next.val 是当前节点的值,next 是指向下一个节点的指针/引用.如果要使用双向链表,则还需要一 ...
- DVWA靶场实战(十)——XSS(DOM)
DVWA靶场实战(十) 五.XSS(DOM): 1.漏洞原理: XSS全称为Cross Site Scripting,由于和层叠样式表(Cascading Style Sheets,CSS)重名,所以 ...
- 实操好用~~~~~antd 中 Table表格动态合并~~~
我写了两种方法 一种是前端处理数据渲染 一种是后端处理数据渲染 数据结构略有不同 下面上代码 <template> <page-view :title="title&quo ...