一、实验目的和实验要求

实验要求:短按实验板扩展板上的按键SW18,依次点亮核心板上D2-D4指示灯。长按按键2秒,实现四个灯循环点亮(跑马灯)。

二、实验原理


如上图所示,四个 LED 正极通过电阻连接到电源+3.3V,LED 负端连接到 CPU 的 PEx
引脚。由此可知,只需要通过 CPU 控制 PEx 引脚为低电平,对应的指示灯即可点亮,如果
控制 PEx 引脚为高电平,这对应的 LED 熄灭。通过程序循环扫描,即可实现跑马灯控制。

三、实验结果

#include "stm32f10x.h"#define RCC_APB2ENR         (*((volatile unsigned int*)0x40021018))
#define GPIOE_CRH           (*((volatile unsigned int*)0x40011804))
#define GPIOE_BSRR          (*((volatile unsigned int*)0x40011810))
#define GPIOE_IDR           (*((volatile unsigned int*)0x40011808))   // ¶Ë¿ÚÊäÈëÊý¾Ý¼Ä´æÆ÷
#define GPIOE_ODR           (*((volatile unsigned int*)0x4001180C))   #define GPIOB_CRL           (*((volatile unsigned int*)0x40010C00))
#define GPIOB_IDR           (*((volatile unsigned int*)0x40010C08))  void LED_Init(void)
{RCC_APB2ENR |= 1<<6;         GPIOE_CRH &=0XFFFF0000;      GPIOE_CRH |=0x3333;                 GPIOE_BSRR |= 1<<8;           GPIOE_BSRR |= 1<<9;           GPIOE_BSRR |= 1<<10;           GPIOE_BSRR |= 1<<11;
}void Delay(unsigned int nCount)
{ while(nCount > 0){ nCount --;   }
}
int count=0;
void LED_Turn(void)
{//通过count判断现在四个灯的状态,并完成切换if(count==1){GPIOE_BSRR |= 1<<8; GPIOE_BSRR |= 1<<25; count++;Delay(0xfffff);Delay(0xfffff);}else if(count==2){GPIOE_BSRR |= 1<<9;GPIOE_BSRR |= 1<<26;count++;Delay(0xfffff);Delay(0xfffff);}else if(count==3){GPIOE_BSRR |= 1<<10; GPIOE_BSRR |= 1<<27;count++;Delay(0xfffff);Delay(0xfffff);}else if(count==4){GPIOE_BSRR |= 1<<11; GPIOE_BSRR |= 1<<24; count=1;Delay(0xfffff);Delay(0xfffff);}else{GPIOE_BSRR |= 1<<24;count++;Delay(0xfffff);Delay(0xfffff);}}
//跑马灯控制函数,让4个灯轮流亮,最后全部重置熄灭
void LED_Turn_Run(void)
{while(1){GPIOE_BSRR &= ~(1<<8);      GPIOE_BSRR |= 1<<24;        Delay(0xfffff);Delay(0xfffff);GPIOE_BSRR |= 1<<25;        Delay(0xfffff);Delay(0xfffff);GPIOE_BSRR |= 1<<26;        Delay(0xfffff);Delay(0xfffff);GPIOE_BSRR |= 1<<27;        Delay(0xfffff);Delay(0xfffff);GPIOE_BSRR |= 1<<8; GPIOE_BSRR |= 1<<9;           GPIOE_BSRR |= 1<<10;            GPIOE_BSRR |= 1<<11;           Delay(0xfffff);Delay(0xfffff);}
}void KEY_Init(void)
{RCC_APB2ENR |=1<<3;    GPIOB_CRL |=0X04000000;
}//static u8  fac_us=0;
void delay_us(u32 nus)
{       int i,cnt ;cnt = nus<<1  ;for ( i = 0 ; i < cnt ; i++ );}
void delay_ms(u16 nms)
{                 int i ;for( i = 0 ; i < nms; i ++ )delay_us(1000) ;
} u8 KEY_Scan(void)
{    //键盘扫描,单按返回1,长按返回2u8 key_1= 0;int flag=0;//通过flag记录按键时间长短if(GPIOB_IDR & 0x40)key_1=1;else key_1=0;if(key_1==0){    delay_ms(100); if(key_1!=0) return 0;} while(key_1==0) {flag++;Delay(0xfffff);if(flag >= 15) return 2;//flag达到15则判定为长按if(GPIOB_IDR & 0x40)key_1=1;else key_1=0;if(key_1==0){delay_ms(100); if(key_1!=0) break;} }if(flag>0) return 1;//flag大于0但是没达到15判定为短按return 0;
}int main(void)
{u8 t=0;BoardInit();LED_Init();KEY_Init();while(1){t=KEY_Scan();if(t==1)//在main函数中进行判断按键状态{LED_Turn();}else if(t==2){LED_Turn_Run();}}return 1;
}

嵌入式系统stm32 跑马灯实验相关推荐

  1. stm32跑马灯实验

    本文记录STM32mini开发板实验 普通跑马灯 回归GPIO基础知识 每组IO口含有下面7个寄存器,7个寄存器一共可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIO ...

  2. STM32跑马灯实验的基本步骤(库函数)

    1.硬件设计 本次用到的硬件只有 LED(DS0 和 DS1).其电路在 ALIENTEK 探索者 STM32F4 开发板 上默认是已经连接好了的.DS0 接 PF9,DS1 接 PF10.所以在硬件 ...

  3. STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本

    一.stm32跑马灯实验 a.GPIO general purpose input output 通用输入输出端口,可以做输入也可做输出,GPIO端口可通过程序配置成输入或输出. STM32FXXXI ...

  4. 【stm32】如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例

    [stm32]如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例 外部硬件: stm32仿真编程器 (仿真编制器自己在网上买,不确定买哪个的可以就买我这个,图片上有牌子,自 ...

  5. 【STM32】跑马灯实验主要程序代码分析

    文章目录 main.c led.c led.h STM32 的 IO 口可以由软件配置成如下 8 种模式: 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽输出 推挽式复用功能 开漏复用功能 S ...

  6. 【嵌入式】按键中断控制 LED 跑马灯实验

    [嵌入式]按键中断控制 LED 跑马灯实验 1. 操作内容 2. 原理解释 2.1 实验箱按键电路 2.2 实验箱LED电路 2.3 寄存器说明 3. 操作步骤 3.1 编写键控制 LED 代码,将代 ...

  7. linux嵌入式开发箱跑马灯,跑马灯实验(STM32F4开发板)

    [实例简介] 实验器材: 探索者STM32F4开发板 实验目的: 学习GPIO作为输出的使用 硬件资源: 1,DS0(连接在PF9) 2,DS1(连接在PF10) 实验现象: 本实验通过代码控制开发板 ...

  8. 【嵌入式】跑马灯实验

    跑马灯实验 1.跑马灯硬件连接 2.GPIO相关库函数说明 3.代码 1.跑马灯硬件连接 推挽输出 IO口输出高电平,LED灭,输出低电平,LED亮 2.GPIO相关库函数说明 操作io口必须引入的源 ...

  9. 【正点原子MP157连载】第十章 跑马灯实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

最新文章

  1. TMAXug ATPG Design Flow
  2. 框架:初识Mybatis
  3. 删表出现mysql错误1051_无法删除mySQL表. (错误1050)
  4. java 快速查找 list_面试官:小伙子,你连Java集合都讲不清楚,怎么就敢开口要8K呀?...
  5. CRM exception when customizing download is executed in ERP due to empty table gt_crm
  6. 一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件
  7. Discuz X3.1 论坛修改的方法
  8. asp.net搜索关键词高亮显示函数
  9. 如何使用 Keynote 设计有质感的 PPT 封面?
  10. cpp存储类型说明符(storage class specifier)
  11. ILdasm 的使用方法
  12. Transaction使用及原理
  13. 获取level2行情接口的功能详解
  14. 求解线性同余方程--扩展欧几里得
  15. Drupal9.1.8通过phpStudy安装后除首页其他页面均404处理
  16. vue中路由传参方式之二(this.$router.push进行编程式路由跳转传参)
  17. 哇!這就是青春痘(上)
  18. 小型软件团队该如何分工(转)
  19. Java面试准备(一)——Java基础
  20. 使用第三方APPKey授权 跳转登录 QQ

热门文章

  1. 菲律宾招聘初级java_菲律宾的招聘-行业的情况
  2. Macbook Air 苹果笔记本安装WIN10单系统 - 以及出现inaccessible_boot_device 解决方法
  3. Apache Commons 工具类介绍及简单使用
  4. NoClassDefFoundError:org/springframework/web/context/WebApplicationContext
  5. 使用手环代替NFC标签实现多屏协同
  6. 阅读_分享成为高效程序员的7个重要习惯
  7. linux网易云命令行,网易云音乐还有命令行版本?倒适合部署在Linux系统的机器人上...
  8. jwt 例子 java_spring boot 入门之security oauth2 jwt完美整合例子-java编程
  9. 基于ssm工商学院办公用品管理信息系统设计与实现-计算机毕业设计源码+LW文档
  10. 在装MySQL的过程中报错找不到ssleay32.dll与应用程序无法正常启动(0xc000007b),请单击“确定关闭应用程序”解决方法