实验一 GPIO口控制LED实验

1 实验目的

  1. 了解并掌握如何控制 STM32 的 GPIO;
  2. 掌握控制 LED 的电路原理和程序代码;

2 实验环境

  1. 硬件:1 个空气温湿度传感器模块、1 个 ST-Link 调试器、1 根 USB2.0 方口线、1
    根 USB3.0 数据线、1 台 PC 机;
  2. 软件:Windows 7/XP、MDK 集成开发环境。

3 实验功能

实现Status、 RS485-R、 RS485-T、 User1 四个指示灯轮流闪烁。
1)硬件原理 :温湿度传感器模块有四个指示灯,分别是 Status、 RS485-R、 RS485-T 和 User1。 在后面的实验中, 可先不考虑这些名称,它们是根据该模块与物联魔盒系列中其他模块结合应用时的功能定义的,本课程中只需掌握它们的控制原理。模块上四个指示灯的控制原理,如下图所示:

下表列出了这四个指示灯的引脚配置信息,请注意原理图编号,信号名称与MCU控制引脚间的对应

2)软件原理
由图 2.1.1 分析, 要让 LED 点亮, 使 MCU 的 PB4、 PB5、 PB6、 PB7 引脚输
出低电平即可。感知执行模块的 MCU 型号为 STM32F103C8T6,在该芯片上, I/O 引脚
可以被软件设置成各种不同的功能,如输入或输出,所以又被称为 GPIO(General Purpose
I/O)。 而 GPIO 引脚又被分为 GPIOA、 GPIOB、 GPIOC、 GPIOD 四个不同的组,除了
GPIOD 分为 3 个引脚外,其他组都分为 0~15 共 16 个不同的引脚。
因此, LED 的控制逻辑如下:

  1. GPIO 端口引脚多——就要选定需要控制的特定引脚。
  2. GPIO 功能如此丰富——配置需要的特定功能。
  3. 控制 LED 的亮和灭——设置 GPIO 输出电压的高低。
    下面,根据硬件原理图分析程序代码,见下图。

4. 实验步骤

1.将USB3.0数据线的一端连接感知执行模块的USB3.0调试烧写口,另一端连接ST-Link调试器的“Debug”接口。
2.将USB2.0方口线的一端连接PC机的USB口,另一端连接ST-Link调试器“USB-Debug”接口。
3.编写程序。
4.在工具栏中点击按钮,编译工程成功后,信息框中出现“0 Error(s),0 Warning(s)”的信息。如果编译失败,检查确认相关选项是否配置正确。
5.确认与硬件调试相关的选项已设置正确。
6.点击“LOAD”按钮,将程序下载到温湿度传感器模块中。下载成功后,信息框显示下图所示的信息,表明程序下载成功并已自动运行。

7.观察模块上四个指示灯的变化。

5 实验程序

#include "stm32f10x.h"
void gpio_init(void) // GPIO 的初始化配置
{GPIO_InitTypeDef GPIO_InitStructure; // 定义一个 GPIO_InitTypeDef 类型的结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);
// 开启 AFIO 时钟和 GPIOB 的外设时钟
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // 禁用 JTAG 功能
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6|GPIO_Pin_7;
// 选择要控制的 GPIOB 引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置引脚速率为 50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 设置引脚模式为通用推挽输出
GPIO_Init(GPIOB, &GPIO_InitStructure); // 调用库函数,初始化 GPIOB
}
void Delay(unsigned int i)
{unsigned int j,k;for(j = 0 ; j < i ; j++)for(k = 0 ; k < 10000; k++);
}
void led_set(int num,int sta)
{if(num==1){if(sta==0){GPIO_WriteBit(GPIOB,GPIO_Pin_4,(BitAction)0x00);}if(sta==1){GPIO_WriteBit(GPIOB,GPIO_Pin_4,(BitAction)0x01);}}if(num==2){if(sta==0){GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)0x00);}if(sta==1){GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)0x01);}}if(num==3){if(sta==0){GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)0x00);}if(sta==1){GPIO_WriteBit(GPIOB,GPIO_Pin_6,(BitAction)0x01);}}if(num==4){if(sta==0){GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)0x00);}if(sta==1){GPIO_WriteBit(GPIOB,GPIO_Pin_7,(BitAction)0x01);}}}
void led_init(void)
{int i;
for(i=1;i<5;i++)
{led_set(i,1); // 关闭四个 LED
}
}
int main(void) // 主函数
{gpio_init(); // GPIO 初始化
led_init(); // LED 初始化
while(1) // 周期性控制 status 指示灯点亮与熄灭
{led_set(1,0); // 点亮 Status 指示灯Delay(500); // 延时子程序led_set(1,1); // 熄灭 Status 指示灯Delay(500);led_set(2,0); // 点亮 RS485-R 指示灯Delay(500);led_set(2,1); // 熄灭 RS485-R 指示灯Delay(500);led_set(3,0); // 点亮 RS485-T 指示灯Delay(500);led_set(3,1); // 熄灭 RS485-T 指示灯Delay(500);led_set(4,0); // 点亮 User1 指示灯Delay(500);led_set(4,1); // 熄灭 User1 指示灯Delay(500);}
}

6 实验结果

程序成功运行后,将可以看到 Status、 RS485-R、 RS485-T、 User1 四个指示灯逐个点亮。



实验心得

实验中,开始环境配置不成功,后面发现设备出现问题,更换设备之后可以完成实验。
实验中建立工程的过程中一定要正确的完成相关配置,否则实验结果会不正确。通过编写部分程序代码,知道了如何初始化配置STM32的GPIO引脚,掌握了控制 LED的程序代码。

嵌入式系统 实验一 GPIO口控制LED实验相关推荐

  1. 嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析)

    嵌入式知识-ARM裸机-学习笔记(2):利用GPIO来控制LED(附mkv210_image.c文件解析) 首先声明该博客是针对朱有鹏老师的嵌入式课程进行笔记的总结. 一.通过GPIO控制点亮LED( ...

  2. 【ZYNQ】从入门到秃头05 LED闪烁实验 按键控制LED实验Verilog(PL)

    文章目录 LED闪烁实验Verilog(PL) 硬件设计 程序设计 创建Verilog HDL文件 编写Verilog 添加管脚约束 添加时序约束 生成BIT文件 Vivado仿真 下载 按键控制LE ...

  3. 《STM32从零开始学习历程》——USART串口通讯实验篇2——指令控制LED灯实验

    <STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇2--指令控制LED灯实验 本实验是在<USART串口通讯实验篇1--中断接收与发送>的基础上 ...

  4. zigbee CC2530 系列教程 4 按键控制LED实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.3按键控制LED实验 4.3.1 实验目的 了解使用按键方法,使用按键切换LED的状态. 4.3.2 实验讲解 首先根据开发 ...

  5. 单片机p1口亮灯实验c语言代码,实验一p1口亮灯实验.ppt

    实验一p1口亮灯实验 单片机实验 单片机实验 工商学院 实验一 P1口亮灯实验 一.实验目的 1.学习P1口的使用方法: 2.学习延时子程序的编写: 二.实验内容 P1口作为输出口,接八只发光二极管, ...

  6. 巧用GPIO口控制多个LED

    3个IO口控制6个LED灯 这个电路用到了单片机GPIO的三种状态: 高电平 低电平 高阻态 所谓"高阻态",是指GPIO对外部电路表现出极大的阻抗.因阻抗很大,几乎不会吸入电流, ...

  7. 使用GPIO输出控制Led亮灭(CC2530)

    1.实验目的: a.通过实验掌握CC2530芯片GOIP的配置方法 b.掌握Led驱动电路以及开光Led的原理 c.查看cc2530-datasheet.pdf手册查找各个寄存器的意思. 二.实验相关 ...

  8. Linux系统中利用C语言控制LED的方法

    大家好, 今天主要和大家聊一聊,如何利用C语言控制LED灯的实验. 目录 ​第一:C语言板控制LED灯简介 第二:实验程序实现 ​第三:C语言实验控制程序 ​第一:C语言板控制LED灯简介 实际工作中 ...

  9. gpio驱动广播Android,[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】

    Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示. Recovery中升级完成后控 ...

最新文章

  1. 底层技术决定人工智能“跑速” | 科技心语
  2. PHP ob_start() 函数介绍
  3. log4j.properties中的这句话“log4j.logger.org.hibernate.SQL=DEBUG ”该怎么写在log4j.xml里面呢?...
  4. Spring Cloud Gateway(限流)
  5. python爬虫从入门到放弃(二)之爬虫的原理
  6. shiro 字段不是username 和password_Shiro整合JWT
  7. 时间序列分析 pdf_多变量时间序列的聚类分析与相似查询——多变量时间序列的相似查询分析...
  8. 高桥盾react和boost_gel、react、boost三种材料的跑鞋,哪个更强呢?
  9. 泛型 typescript_如何把你的头围绕Typescript泛型
  10. is not a function_libcxx 的 std::function 源码分析
  11. 巴黎圣母院大火之后,AI 技术如何在文物修复场景落地?
  12. 在bash中仅使用l列出目录:检查
  13. 显示器黑屏的原因解析及解决方法
  14. 雷神simplest_ffmpeg_player解析(二)
  15. 最新python面试题180题完整版带答案(转载加整理)
  16. js中创建桌面网页快捷方式代码
  17. web数据管理 期末
  18. 救赎自己——追风筝的人
  19. IVR在voip电话系统的应用与价值
  20. 工作流之通用数据表设计

热门文章

  1. 火狐浏览器各版本下载及插件httprequest
  2. Xcode使用教程详细讲解 (上)
  3. Qt中对TCP粘包的处理
  4. 前端项目中在线无插件预览xlsx、docx、ppt格式的文件方法
  5. ufl计算机科学排名,美国佛罗里达大学排名解析
  6. MFC界面编程基础(13):列表框和组合框
  7. 电子器件系列42:小型中功率继电器
  8. 如何用虚拟现实培训领导力?
  9. AWS re:Invent 科技盛会 英信翻译提供《视频转录和字幕翻译服务》
  10. Eclipse 启动Tomcat报错 Removing obsolete files from server