嵌入式系统stm32 跑马灯实验
一、实验目的和实验要求
实验要求:短按实验板扩展板上的按键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 跑马灯实验相关推荐
- stm32跑马灯实验
本文记录STM32mini开发板实验 普通跑马灯 回归GPIO基础知识 每组IO口含有下面7个寄存器,7个寄存器一共可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIO ...
- STM32跑马灯实验的基本步骤(库函数)
1.硬件设计 本次用到的硬件只有 LED(DS0 和 DS1).其电路在 ALIENTEK 探索者 STM32F4 开发板 上默认是已经连接好了的.DS0 接 PF9,DS1 接 PF10.所以在硬件 ...
- STM32-GPIO学习-跑马灯实验和按键实验-寄存器版本和HAL库版本
一.stm32跑马灯实验 a.GPIO general purpose input output 通用输入输出端口,可以做输入也可做输出,GPIO端口可通过程序配置成输入或输出. STM32FXXXI ...
- 【stm32】如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例
[stm32]如何把原子哥的代码移植到最小系统板stm32f103c8t6 以跑马灯实验为例 外部硬件: stm32仿真编程器 (仿真编制器自己在网上买,不确定买哪个的可以就买我这个,图片上有牌子,自 ...
- 【STM32】跑马灯实验主要程序代码分析
文章目录 main.c led.c led.h STM32 的 IO 口可以由软件配置成如下 8 种模式: 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 推挽输出 推挽式复用功能 开漏复用功能 S ...
- 【嵌入式】按键中断控制 LED 跑马灯实验
[嵌入式]按键中断控制 LED 跑马灯实验 1. 操作内容 2. 原理解释 2.1 实验箱按键电路 2.2 实验箱LED电路 2.3 寄存器说明 3. 操作步骤 3.1 编写键控制 LED 代码,将代 ...
- linux嵌入式开发箱跑马灯,跑马灯实验(STM32F4开发板)
[实例简介] 实验器材: 探索者STM32F4开发板 实验目的: 学习GPIO作为输出的使用 硬件资源: 1,DS0(连接在PF9) 2,DS1(连接在PF10) 实验现象: 本实验通过代码控制开发板 ...
- 【嵌入式】跑马灯实验
跑马灯实验 1.跑马灯硬件连接 2.GPIO相关库函数说明 3.代码 1.跑马灯硬件连接 推挽输出 IO口输出高电平,LED灭,输出低电平,LED亮 2.GPIO相关库函数说明 操作io口必须引入的源 ...
- 【正点原子MP157连载】第十章 跑马灯实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
最新文章
- TMAXug ATPG Design Flow
- 框架:初识Mybatis
- 删表出现mysql错误1051_无法删除mySQL表. (错误1050)
- java 快速查找 list_面试官:小伙子,你连Java集合都讲不清楚,怎么就敢开口要8K呀?...
- CRM exception when customizing download is executed in ERP due to empty table gt_crm
- 一个java源文件中可以声明多少个class与编译后会生成多少个字节码文件
- Discuz X3.1 论坛修改的方法
- asp.net搜索关键词高亮显示函数
- 如何使用 Keynote 设计有质感的 PPT 封面?
- cpp存储类型说明符(storage class specifier)
- ILdasm 的使用方法
- Transaction使用及原理
- 获取level2行情接口的功能详解
- 求解线性同余方程--扩展欧几里得
- Drupal9.1.8通过phpStudy安装后除首页其他页面均404处理
- vue中路由传参方式之二(this.$router.push进行编程式路由跳转传参)
- 哇!這就是青春痘(上)
- 小型软件团队该如何分工(转)
- Java面试准备(一)——Java基础
- 使用第三方APPKey授权 跳转登录 QQ
热门文章
- 菲律宾招聘初级java_菲律宾的招聘-行业的情况
- Macbook Air 苹果笔记本安装WIN10单系统 - 以及出现inaccessible_boot_device 解决方法
- Apache Commons 工具类介绍及简单使用
- NoClassDefFoundError:org/springframework/web/context/WebApplicationContext
- 使用手环代替NFC标签实现多屏协同
- 阅读_分享成为高效程序员的7个重要习惯
- linux网易云命令行,网易云音乐还有命令行版本?倒适合部署在Linux系统的机器人上...
- jwt 例子 java_spring boot 入门之security oauth2 jwt完美整合例子-java编程
- 基于ssm工商学院办公用品管理信息系统设计与实现-计算机毕业设计源码+LW文档
- 在装MySQL的过程中报错找不到ssleay32.dll与应用程序无法正常启动(0xc000007b),请单击“确定关闭应用程序”解决方法