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

嵌入式实验---实验一 通用GPIO实验

一、实验目的

1、掌握STM32F103 GPIO程序设计流程;

2、熟悉STM32固件库的基本使用。

二、实验原理

1、通过按键实现:按键按下,LED点亮;按键释放,LED熄灭。

三、实验设备和器材

电脑、Keil uVision5软件、Proteus 8 Professional软件

四、实验内容和步骤

4.1 代码开发

按照书本中实验流程在Keil中完成GPIO实验的代码开发;

4.2 原理图设计

在Proteus中完成原理图的设计,如图1所示。

图1 GPIO实验原理图

五、实验记录和实验结果

5.1 实验效果记录(附照片即可)

5.2 实验效果说明

单击Proteus左下方的仿真运行图标后,工程仿真运行效果如上图所示,当按键BUTTON1弹起释放时,LED呈现黑色表示熄灭状态。当按键BUTTON1被按下时,LED被点亮变成黄色。

六、实验预习要求

  1. 实验前认真阅读本实验指导;
  2. 熟悉书本中相关操作及相关器件。
  3. 完成5.1和5.2内容。

七、思考题

1. GPIO常用的功能有哪些

  1. 数字输入:用于接收外部数字信号,例如传感器的数据、按钮的状态等。

  1. 数字输出:用于向外部设备发送数字信号,例如控制LED灯、驱动电机等。

  1. 模拟输入:有些GPIO引脚还具有模拟输入功能,可以接收模拟信号,例如模拟传感器的输出。

  1. 模拟输出:有些GPIO引脚还具有模拟输出功能,可以输出模拟信号,例如控制模拟电路中的某些参数。

  1. 中断控制:可以配置GPIO引脚触发中断,以便在外部事件发生时及时通知处理器。

  1. PWM输出:某些GPIO引脚支持脉冲宽度调制(PWM)输出,用于控制电机速度、调节背光亮度等应用。

  1. 串行通信:部分GPIO引脚还可以配置为串行通信接口,例如SPI、I2C、UART等。

2、使用GPIO引脚的配置流程

  1. 选择合适的硬件平台和开发环境:硬件平台可以是树莓派、Arduino、ESP8266/ESP32等。开发环境可能涉及到Arduino IDE、PlatformIO、树莓派的Raspbian系统等。

  1. 了解硬件的GPIO引脚分布:确定要使用的具体GPIO引脚编号。不同的平台和开发板可能有不同的引脚编号和功能分配,需要查阅相应的文档。

  1. 初始化GPIO引脚:在大多数情况下,需要初始化引脚,以确定它们是输入还是输出,以及它们的初始状态(高电平或低电平)。

  1. 配置引脚的输入输出模式:如果要将引脚配置为输入模式,通常需要设置输入电阻(上拉或下拉)。如果要将引脚配置为输出模式,通常需要设置输出电平(高或低)。

  1. 编写和加载代码:使用选定的编程语言(例如C/C++、Python等)编写控制GPIO引脚的程序。编译或解释代码,并将其加载到硬件平台中。

  1. 测试和调试:将程序加载到硬件平台后,通过连接到引脚的传感器、LED等外部设备来测试GPIO引脚的功能。如果有必要,进行调试以确保引脚按预期工作。

  1. 维护和更新:随着项目的发展,可能需要修改GPIO引脚的配置或功能。根据需要更新代码,并进行相关测试。

相关文章:

  • 行列视(RCV)在生产数据监督中的优势
  • enum库
  • SSM实现设置商品秒杀券的后端设计思路
  • 互联网广告相关概念
  • Pyinstaller 打包exe后,打开出现can‘t find package tkdnd 报错
  • 科技云报道:推进工业新质生产力机器人有望成为AI下一个新引擎?
  • 如何制作 PDF 文件
  • 测速小车模块
  • C++ 类与对象的使用要点(超详细解析,小白必看系列)
  • 昇思大模型学习·第一天
  • TDesign环境搭建-后台模板的安装和使用-构建web管理端后台系统
  • upload-labs第十三关教程
  • 微信小程序地图功能详解
  • N32G031时钟配置
  • 《Unity3D高级编程之进阶主程》第一章 C#要点技术(二) - Dictionary 底层源码剖析
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • hadoop集群管理系统搭建规划说明
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • LeetCode29.两数相除 JavaScript
  • Nodejs和JavaWeb协助开发
  • spring security oauth2 password授权模式
  • v-if和v-for连用出现的问题
  • Vue.js-Day01
  • 阿里云购买磁盘后挂载
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 大数据与云计算学习:数据分析(二)
  • 飞驰在Mesos的涡轮引擎上
  • 复习Javascript专题(四):js中的深浅拷贝
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 我的面试准备过程--容器(更新中)
  • 系统认识JavaScript正则表达式
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • # dbt source dbt source freshness命令详解
  • ###STL(标准模板库)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (¥1011)-(一千零一拾一元整)输出
  • (1) caustics\
  • (C#)获取字符编码的类
  • (C++20) consteval立即函数
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (SERIES12)DM性能优化
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (四)Linux Shell编程——输入输出重定向
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Unity3DUnity3D在android下调试
  • *Django中的Ajax 纯js的书写样式1
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Standard 的管理策略
  • .net 获取url的方法
  • .net 验证控件和javaScript的冲突问题