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 的状态的更多相关文章

  1. C#与Arduino通过串口通信来控制LED灯的状态

    一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...

  2. 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PXC7),CH340的RXD连接STM32的 GPIO(PC6),通过 ...

  3. 【iCore1S 双核心板_ARM】例程四:USART通信实验——通过命令控制LED

    实验原理: 开发板上自带一片CH340芯片,完成本实验电脑需要安装CH340驱动, CH340的TXD连接STM32的GPIO(PB6),CH340的RXD连接STM32的 GPIO(PB7),通过串 ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。附:网友制作的类库说明(CHM)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  5. 【轮询】【ajax】【js】【spring boot】ajax超时请求:前端轮询处理超时请求解决方案 + spring boot服务设置接口超时时间的设置

    场景描述: ajax设置timeout在本机测试有效,但是在生产环境等外网环境无效的问题 1.ajax的timeout属性设置 前端请求超时事件[网络连接不稳定时候,就无效了] var data = ...

  6. 树莓派GPIO控制LED彩灯

    树莓派使用GPIO接口来控制LED灯,自制五彩炫光的节日彩灯. 1.硬件准备 a. 树莓派(Raspberry Pi)一个 b. 彩色RGB二极管 c. 杜邦线 d. 5V电源引脚 以上所有零件均可在 ...

  7. polling轮询和comet

    comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...

  8. ARM实验4—按键轮询实验

    key_poll按键轮询实验 实验内容: 通过FS_4412开发板上的按键控制LED灯并打印信息. 实验目的: 熟悉开发环境的使用. 掌握猎户座4412处理器的GPIO接口, 实验平台: FS4412 ...

  9. [ZigBee] 16、Zigbee协议栈应用(二)——基于OSAL的无线控制LED闪烁分析(下)

    说在前面:上一篇介绍了无线LED闪烁实现的OSAL部分,本篇介绍如何实现无线数据收发及数据处理: 上一篇是用SI跟着流程查看源码,我个人认为以架构的思维去了解代码能让人更清晰 ::ZMain.c程序入 ...

  10. 如何从线程返回信息——轮询、回调、Callable

    考虑有这样一个LiftOff类: /** * 类LiftOff.java的实现描述:显示发射之前的倒计时 * * @author wql 2016年9月21日 下午1:46:46 */ public ...

随机推荐

  1. cesium加载倾斜摄影,添加billboard并注册点击事件

    完整示例代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. python基础-常用内置包

      内置包是python自带的一些功能模块,有需求时可以在自己文件中直接导入使用. 1.datetime包   python中的时间包,可以在业务开发中辅助我们处理时间信息: # datetime可以 ...

  3. 为什么 Random.Shared 是线程安全的

    在多线程环境中使用 Random 类来生成伪随机数时,很容易出现线程安全问题.例如,当多个线程同时调用 Next 方法时,可能会出现种子被意外修改的情况,导致生成的伪随机数不符合预期. 为了避免这种情 ...

  4. windows GO语言环境配置

    目录 GO语言下载 安装goland go目录简介 配置gopath goland里添加goroot和gopath GO语言下载 参考教程:https://www.cnblogs.com/Domini ...

  5. 在CentOS8中安装gitlab

    安装 docker 及 docker-compose centos8 更新源 cd /etc/yum.repos.d/ sed -i 's/mirrorlist/#mirrorlist/g' /etc ...

  6. jsvmp_wencai

    网站 aHR0cDovL3d3dy5pd2VuY2FpLmNvbS91bmlmaWVkd2FwL2hvbWUvaW5kZXg= 直接搜索关键词 下面是要抓取的数据 逆向位置(一个即可) hook到he ...

  7. 2、Navicat安装提示报错

    问题描述:激活navicat15的注册码时报出"rsa public key not find"错误原因:没有生成破解版的RegPrivateKey.pem文件解决方案:重新安装N ...

  8. MyBatis四大参数两种写法

    MyBatis四大参数两种写法 1.在主配置文件中,直接写到value值里面 2.四大参数写入单独配置文件 开始是 为了避免以后其他框架冲突 都加个前缀 jdbc. 主要是红色框里的三个部分 自己定义 ...

  9. CTF-MISC比赛技巧总结(一)

    CTF-MISC比赛技巧总结之隐写术 一.第一阶段(观):1.flag藏在文本文件里面,直接ctrl+F就可以查找到:2.flag被字符隔开,在头或尾上,这个时候就只用消除间隔字符就可以了:3.fla ...

  10. 梯度下降算法 Gradient Descent

    梯度下降算法 Gradient Descent 梯度下降算法是一种被广泛使用的优化算法.在读论文的时候碰到了一种参数优化问题: 在函数\(F\)中有若干参数是不确定的,已知\(n\)组训练数据,期望找 ...