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集合相关的面试题-List、Map、Set等
一.List 1.subList 不会返回新的list对象--与String的subString不同 返回原来list的从[fromIndex,toIndex)之间这一部分的视图,实际上,返回的lis ...
- org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = character varying
1.报错信息 org.springframework.jdbc.BadSqlGrammarException: ### Error querying database. Cause: org.post ...
- referer的反爬和爬虫下载视频
一.缘由 在梨视频等一些网站中会使用防盗链作为反爬的基础方法,这个反爬并不严重,只是平时的时候需要多加留意.此次实现对应链接中梨视频的下载. 二.代码实现 #1.拿到contid #2.拿到video ...
- 【Redis场景1】用户登录注册
细节回顾: 关于cookie和session不熟悉的朋友: 建议阅读该博客:https://www.cnblogs.com/ityouknow/p/10856177.html 执行流程: 在单体模式下 ...
- 对象和类—Java世界的细胞
对象和类-Java世界的细胞 今天向大家介绍我自己关于Java中对象和类的一些体会,中有不足还请大家多多指教 1.面向对象程序设计 为什么会产生面向对象 我认为人们在最初探索计算机世界时,常常会从计算 ...
- 如何取消磁盘的BitLocker加密
步骤1:打开开始[win]菜单,点击齿轮图标,打开[设置] 步骤2:在Windows设置视窗中点击[更新和安全] 步骤3:点击左侧[设备加密],点击视窗右侧[关闭] 步骤4:将提示是否需要关闭设备加密 ...
- ArcObjects SDK开发 021 开发框架搭建-FrameWork包设计
1.框架引擎部分 引擎模块其实就是之前我们说的App-Command-Tool模块,通过这个模块,把系统的主干框架搭建起来. 其中大部分出现在菜单以及工具条上的按钮都会继承这个框架定义ICommand ...
- 2、Java封装、继承与多态
/** * 类.对象.面向过程.面向对象的理解: * 1.类:类是封装对象的属性和方法的载体 * * 2.对象:对象是类抽象出来的一个实例 * * 3.面向过程:面向过程注重的是具体的实现过程,因果关 ...
- MYSQL进阶学习笔记
MySQL在Linux中的使用: 1.查看mysql在linux的安装版本 mysqladmin –version 2.mysql服务的启动与停止 (1).启动: service mysql star ...
- 谈谈我的「数字文具盒」 - Obsidian
这篇关于 Obsidian 是生产力工具的终篇了,因为目前涉及 Obsidian 的文章特别多,所以我就不啰里啰嗦叙述重复的文字了.本文主要涉及到 Obsidian 和 Docusaurus 如何进行 ...