STM32开发板按键控制实验实验说明

合集下载

查询按键加减实验报告(3篇)

查询按键加减实验报告(3篇)

第1篇一、实验目的1. 理解按键输入的基本原理。

2. 掌握C语言编程中按键扫描和响应的实现方法。

3. 实现基于按键输入的加减功能,并能够查询结果。

二、实验环境1. 开发工具:Keil uVision52. 实验平台:STM32F103系列单片机开发板3. 外设:按键模块三、实验原理1. 按键扫描原理:通过查询或中断方式检测按键是否被按下,并判断是哪个按键被按下。

2. 单片机编程:使用C语言编写程序,实现对按键的扫描和加减功能的实现。

四、实验步骤1. 准备实验环境,连接按键模块到单片机开发板上。

2. 编写按键扫描函数,实现按键的检测和识别。

3. 编写加减功能函数,实现加法和减法运算。

4. 编写主函数,实现按键输入和结果显示。

五、实验代码```cinclude "stm32f10x.h"// 按键定义define KEY_ADD GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) // PA0define KEY_SUB GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) // PA1// 全局变量volatile int result = 0;// 按键扫描函数void KeyScan(void) {if (KEY_ADD == 0) {while (KEY_ADD == 0); // 防抖动 result += 1;}if (KEY_SUB == 0) {while (KEY_SUB == 0); // 防抖动 result -= 1;}}// 加减功能函数void AddSub(void) {KeyScan();// 显示结果// ... (此处省略显示代码)}// 主函数int main(void) {// 初始化GPIO// ... (此处省略初始化代码)while (1) {AddSub();}}```六、实验结果与分析1. 实验结果:通过按键输入,可以实现对数字的加减操作,并实时显示结果。

奋斗STM32V3版按键中断_EXTI_例程

奋斗STM32V3版按键中断_EXTI_例程
奋斗版 STM32 开发板例程详解———按键中断实验

按键中断(EXTI)例程实验
实验平台:奋斗版STM32开发板V2、V2.1、V3 实验内容:板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮 灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。
4.2 硬件电路设计
在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示
淘宝店铺:
11
奋斗版 STM32 开发板例程详解———按键中断实验

键盘部分如下图所示: 例程所用到的列扫描线:PC5,PC2,PC3。 例程所用到的行扫描线(EXTI中断线):PE2。
上升沿触发选择寄存器(EXTI_RTSR) 偏移地址:08H 复位值:0000 0000h
注意: 外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。 在写EXTI_RTSR 寄存器时在外部中断线上的上升沿信号不能被识别,挂起位不会被置 位。在同一中断线上,可以同时设置上升沿和下降沿触发。即任一边沿都可触发中断。
1.2 外部中断配置寄存器2(AFIO_EXTICR2)
地址偏移:0Ch 复位值:0000h
淘宝店铺:
1
奋斗版 STM32 开发板例程详解———按键中断实验

1.3 外部中断配置寄存器3(AFIO_EXTICR3)
地址偏移:10h 复位值:0000h
1.4 外部中断配置寄存器4(AFIO_EXTICR4)
地址偏移:14h 复位值:0000h
淘宝店铺:
2
奋斗版 STM32 开发板例程详解———按键中断实验

2.1 嵌套向量中断控制器(NVIC)
淘宝店铺:
7

按键点灯实验报告(2)

按键点灯实验报告(2)

按键点灯实验报告(2)梧州学院实验报告实验课程:嵌入式系统及应用实验名称:按键点灯实验实验时间:11月8日实验设备:电脑、stm32精英版开发板实验目的:1、学习如何设置STM32引脚功能2、掌握GPIO口的工作模式设置;实验原理及内容:【实验要求】通过按键控制亮灭,按一次电平跳转一次按键的进行设置,其中控制设置为推挽输出,输入的设置为输入。

电平是否为判断按键是否按下,当按键按下时,对输出电平取反。

程序设计思路通过KEY_Scan()函数扫描4个I/O口是否有按键按下,且支持两种扫描方式,用mode参数来设置。

按键key0使用的是下拉输入,与stm32的PE4口相接,因此,我首先将stm32的PE4口配置为上拉输入,这样子按键按下时便是低电平。

Key1与PE3相接,同理,将PE3口配置为上拉输入。

此外LED0与PB5相接,需要将PB5配置为推挽输出,输出速度为50MHz。

主程序流程介绍:对按键和LED配置程序进行初始化,同时先点亮红灯。

随后通过检测PB5的电平是否为低电平来判断按键是否按下,当为低电平时,先延时消抖,重复检测按键是否按下,若按下,则读取当前输出电平值,若为高电平,则输出低电平,若为低电平,则输出高电平。

【实验内容与步骤】程序步骤及注释#include"stm32f10x.h"#include"delay.h"#include"led.h"#include"key.h"#include"sys.h"intmain(void){u8key=0;delay_init();//延时函数初始化LED_Init();//LED端口初始化KEY_Init();//初始化与按键连接的硬件接口LED0=0;//点亮红灯while(1){key=KEY_Scan(0);//得到键值if(key){switch(key){caseKEY0_PRES://key0按下,控制LED0翻转LED0=!LED0;break;caseKEY1_PRES://key1按下,控制LED1翻转LED1=!LED1;break;}}elsedelay_ms(50);//延时50ms}}部分其他程序:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_AP B2Periph_GPIOE,ENABLE);//使能PORTA,PORTE时钟GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_3;//KEY 0-KEY1GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置成上拉输入GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化GPIOE4,3u8KEY_Scan(u8mode){staticu8key_up=1;//按键按松开标志if(mode)key_up=1;//支持连按if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)returnKEY0_PRES;elseif(KEY1==0)returnKEY1_PRES;elseif(WK_UP==1)returnWKUP_PRES;}elseif(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; return0;//无按键按下}三、实验现象分析按键0按下后红灯亮,再按一下红灯灭;按键1按下后绿灯亮,再按一下绿灯灭。

STM32按键输入实验

STM32按键输入实验
3.2 按键输入实验
上一节介绍了 STM32 的 IO 口输出,这一节,我们将向大家介绍如何使用 STM32 的 IO 口 作为输入用。通过本节的学习,你将了解到 STM32 的 IO 口作为输入使用的方法。本节分为如 下几个小节:
3.2.1 STM32 IO 口简介 3.2.2 硬件设计 3.2.3 软件设计 3.2.4 仿真与下载
然后按 ,编译工程,得到结果如下图所示:
图 3.2.3.4 编译结果 可以看到没有错误,也没有警告。从编译信息可以看出,我们的代码占用 FLASH 大小为: 1792 字节(1524+268),所用的 SRAM 大小为:520 个字节。
100
这里我们解释一下,编译结果里面的几个数据的意义: Code:表示程序所占用 FLASH 的大小(FLASH)。 RO-data:表示程序定义的常量(FLASH)。 RW-data:表示已初始化的全局变量(SRAM) ZI-data:表示未初始化的全局变量(SRAM) 有了这个就可以知道你当前使用的 flash 和 sram 大小了,所以,一定要注意的是程序的大 小不是.hex 文件的大小。 接下来,我们还是先进行软件仿真,验证一下是否有错误的地方,然后才下载到 Mini STM32 看看实际运行的结果。
3.2.4 仿真与下载
我们可以先用软件仿真,看看结果对不对,根据软件仿真的结果,然后再下载到 MINI STM32 板子上面看运行是否正确。
3.2.2 硬件设计
该实验所需要的硬件电路在 MiniSTM32 开发板上都已经连接好了,不需要经过任何设置, 直接编写代码就可。LED 的连接在上一节已经介绍过了,在 MiniSTM32 开发板上的按键 KEY0 是接在 PA13 上,KEY1 是接在 PA15 上的,WK_UP(KEY2)接在 PA0 上。如下图所示:

stm32实训:中断、按键、灯光综合

stm32实训:中断、按键、灯光综合

实训题目:按键控制LED模式并使用中断
描述:在这个实训中,你将使用STM32L151C8T6微控制器编写一个程序,以通过三个按键来控制两个LED灯的状态,而且这次LED有不同的模式,并使用中断来检测按键的状态变化。

具体要求如下:
要求:
使用STM32CubeIDE或其他适合的开发环境创建一个新的STM32L151C8T6项目。

配置两个GPIO引脚分别用于控制两个LED灯的开关,将其设置为输出模式。

配置三个GPIO引脚作为按键的输入引脚。

配置外部中断(例如,使用EXTI线路)以检测按键的状态变化(按下和释放)。

在中断处理程序中检测按键的状态变化,并实现以下LED模式切换:
当按下按键1时,切换LED1的模式(例如,常亮、闪烁、呼吸等)。

当按下按键2时,切换LED2的模式。

当按下按键3时,同时熄灭两个LED。

为每个LED模式实现不同的效果。

例如,如果选择闪烁模式,LED应该以不同的频率闪烁;如果选择呼吸模式,LED应该逐渐变亮和变暗。

编写一个无限循环,以让程序持续运行,允许按键切换LED的模式和控制LED的开关。

测试你的程序,确保按下不同的按键会导致相应的LED模式切换和LED状态变化。

这个实训题目要求你不仅要处理按键的状态变化,还要实现多种LED模式,每种模式有不同的效果。

这将帮助你深入了解STM32的GPIO配置、中断处理以及复杂的LED控制。

实验按键实验说明文档

实验按键实验说明文档

实验3 按键实验说明文档按键硬件说明GPIO硬件说明STM32开发板引出了电路长的所有IO口,电路如下图 1 引出的IO口STM32的IO口可以通过软件配置为以下的8种模式(1)GPIO _Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8) GPIO_Mode_AF_PP复用开漏输出STM32的每个IO端口都有7个寄存器来控制,他们分别是:2个32位的端口,配置寄存器CRL和CRH;一个16位的复用寄存器BRR;2个32位的数据寄存器IDR和ODR;1个32位的锁存寄存器LCKR;详细资料可以参见<<STM32中文参考资料>>.LED硬件说明STM32 开发板上的两个LED:LED0 和LED1.如下图:图2 LED 与STM32 连接原理图STM32中硬件电路将PB5管脚与LED0灯连接,而另一LED灯LED1则是连接在PE5.由电路可知,两个LED都是通过灌电流的方式来加电压,所以应将相应的GPIO口配置为输出方式,通过合理的控制其连接的GPIO口的输出电压(置高置低)就能控制灯的闪烁(关于GPIO配置操作请详见GPIO固件库说明文档).BEEP硬件说明STM32 开发板上的一个BEEP.如下图:图1 BEEP与STM32 连接原理图STM32中硬件电路将PB8管脚与BEEP连接,电路中用到NPN三极管(s8050)来驱动蜂鸣器,三极管主要的功能是放大电流,让电路有足够的电流来驱动蜂鸣器.当PB.8输出高电平时,蜂鸣器开始发声,当PB.8输出低电平时,蜂鸣器停止发声.KEY硬件说明STM32 开发板上的4个按钮(WK_UP,KEY0,KEY1,KEY2)如下图:图1 KEY与STM32 连接原理图STM32中硬件电路将PE4与KEY0连接在按钮按下时电路接地为低电平, PE3与KEY1连接在按钮按下时电路接地为低电平, PE2与KEY2连接在按钮按下时电路接地为低电平, PA0与WK_UP连接在按钮按下时电路接地为高电平,由电路可知,本实验通过WK_UP在芯片内部拉低输入模式下检测高电平时控制键蜂鸣器的开关按键KEY0检测为低时候控制LEDO和LED1同时开关,按键KEY1控制LED1的开关,按键KEY2控制LED0的开关,有关配置GPIO口 (关于GPIO配置操作请详见GPIO固件库说明文档).按键软件说明实验中用到了GPIO固件库函数和LED固件库的函数的总和,在引用MCU中的头文件后用到的GPIO函数以及LED函数如下GPIO中的库函数1)使能总线时钟void GpioRccEnable(GPIO_TypeDef* GPIOx);2)配置管脚为输入输出模式void GpioConfig(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed );3)设置某一端口为输入输出模式void GpioSet(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed );4)设置输入模式并初始化void GpioSetInMode(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin );5)设置输出模式并初始化void GpioSetOutMode(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,char init_value);6)管脚的输出的值void GpioSetOutValue(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin, char init_value);7)读取某一管脚的状态unsigned char GpioInReadPinStatus(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);LED中的库函数如下:1)初始化函数void LedInit(char led, char led_init_status);2)指定LED灯亮void LedOn(char led);3)灭掉指定的LED灯void LedOff(char led);BEEP中的库函数如下://功能: 初始化LEEP,并配置初始状态void BeepInit(char beep_init_status);//功能: 选定BEEP为开状态void BeepOn(void);//功能: 选定BEEP为关状态void BeepOff(void);按键中的库函数如下://IO初始化void KeyInit(void);//按键扫描函数u8 KeyScan(void);按键应用简述实验中通过按键检测来控制蜂鸣器和LED灯的亮灭,实验程序如下#include "common.h"u8 k=0;int main(void){Init(); //总初始化函数while(1){switch(KeyScan()){case KEY_UP:if ( k == 0){BeepOn();k=1;}else if(k == 1) {BeepOff();k=0;}case KEY_LEFT:if ( k == 0){LedOn(LED0);k=1;}else if(k == 1) { LedOff(LED0);k=0;}break;case KEY_DOWN: if ( k == 0){LedOn(LED1);k=1;}else if(k == 1) { LedOff(LED1);k=0;}case KEY_RIGHT:if ( k == 0){LedOn(LED0);LedOn(LED1);k=1;}else if(k == 1) { LedOff(LED0);LedOff(LED1);k=0;}break;}}}。

STM32开发板(小苗板)资料系列之八——按键例程讲解

STM32开发板(小苗板)资料系列之八——按键例程讲解

STM32开发板(小苗板)资料系列之八——按键例程讲解来源:第九单片机论坛在流水灯例程中通过对GPIO端口的应用明白了I/O口输出的使用,接下来通过按键方式点亮LED来明白GPIO的输入使用。

在资料七里面介绍了输出四种模式的使用场合,下面介绍下输入的四种模。

上拉输入:若GPIO引脚配置为上拉输入模式,在默认状态下(GPIO引脚无输入),读取得的GPIO引脚数据为1,即高电平。

下拉输入:与上拉输入正好相反,在默认状态下其引脚数据为0,即低电平。

浮空输入:经由触发器输入,在芯片内部没有上拉和下拉电阻。

由于其输入阻抗交大,一般把这种模式用于标准的通讯协议,比如I2C、USART的接收端。

模式输入:该模式关闭了施密特触发器,不接上拉和下拉电阻,经由一线路把电压信号传送到片上外设。

如ADC,由其采集电压信号。

在使用ADC外设的时候,必须设置为模拟输入模式。

这部分具体的结构可查看芯片手册,通过电路分析会更加清晰明了。

8.1按键代码分析这部分电路图如下所示。

四个按键分别与GPIOC的pin5、pin6、pin7、pin9相连,实验现象是当S3按下,LED1亮;当S3再按下,LED1灭。

其他三个按键实现同样功能。

在这里按键按下就是向GPIO输入一个低电平信号,下面看下具体的代码分析来了解如何进行输入控制。

先看看都用到哪些库文件:startup_stm32f10x_md.sstm32f10x_conf.hcore_cm3.c core_cm3.hsystem_stm32f10x.c system_stm32f10x.hstm32f10x.hstm32f10x_gpio.c stm32f10x_gpio.hstm32f10x_rcc.c stm32f10x_rcc.h 用户编写的文件:main.cled.c led.hkey.c key.hstm32f10x_it.c其中使用到的库文件都已经在流水灯例程中做过说明,按键实验和流水灯主要差别在需要用户编写的文件多一个源文件和头文件,以及在原先的led.h头文件中增加一下宏定义代码。

【最新文档】stm32实验指导书-实用word文档 (15页)

【最新文档】stm32实验指导书-实用word文档 (15页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==stm32实验指导书篇一:STM32开发平台实验指导书STM32综合开发平台实验指导书中国海洋大学自动化及测控系201X年5月序言STM32家族是意法半导体公司的基于Cortex-M3内核性价比非常高的微处理器,应用领域非常广泛。

为了初学者比较容易的学习该系列的芯片,我们设计了STM32系列的开发平台,并且编写了配套的实验指导书。

为了本平台尽可能兼容更多的芯片,本设计采用了核心板+基板的方案。

基板上有一个的MCU标准插槽,该标准插槽有一个详细定义的物理接口和引脚定义。

核心板设计了符合标准插槽定义的插针,可以查结在基板上使用。

基板可以由USB或者7V-40V直流电源两种方式供电,包含通用电路,如以太网,USB,时钟芯片,OLED,IRDA,RS232,RS485,CAN总线,音频,SD卡等20多种常用的模块电路;MCU保准插槽并且有一个扩展插槽,可以外扩设备。

核心板是单片机最小系统,包括晶振,看门狗电路等等,标准插针等。

我们的核心板采用了兼容STM32F105,STM32F107,STM32F205,STM32F207四种芯片的设计。

本设计方案在将来芯片升级的时候,可以只升级核心板,而基板还可以继续使用,有很强的灵活性,并可以节约成本。

同时,本平台还包含详细的开发范例,包括单元测试,系统自检,操作系统范例以及基于Labview的上位机软件。

在焊接篇,详细的介绍的核心板和实验班的焊接流程,注意事项和检测方法。

可以用于实习项目,也可以使实验者自己DIY使用。

在硬件篇,指导书还会详细介绍各个单元模块的电路设计和布线原则。

供实验者在自己做项目的时候参考和借鉴。

另外,硬件篇还会介绍单元模块常见的故障和排除方法,使实验者能够在硬件电路出现故障的时候,迅速查找原因和修复。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STM32开发板按键控制实验实验说明
2STM32开发板按键控制实验实验说明通过按键控制LED灯的开关实验环境硬件:
STM32F407-PZ6808L开发板STM32仿真器软件:
Winddows764位操作系统内存8GBKeil5安装后需要添加32F4xx_DFP.2.7.0.packStm32CubeMx 安装后将STM32Cube_FW_F4_V1.13.0文件夹复制到
C:\Users\Administrator\STM32Cube\Repository文件夹中。

文档:
STM32F407-PZ6808L开发板原理图.pdf
实验现象按开发板上的K_RIGHT键D2灯亮,按K_DOWN键D2灯灭。

实验步骤1.打开STM32F407-PZ6808L开发板原理图找到LED灯模块D2链接引脚LED2LED2低电平灯亮高电平灯灭找到LED2在STM32F407ZGT6核心板的链接引脚在PDF阅读器上搜索找到LED2引脚引脚为PF10
查找按键K_RIGHT和K_DOWN在核心板上的引脚先查找按键模块分别对应K1和K2然后在核心板上查找K1和K2的引脚名称名称是PE2和PE3分析:
按下K1则D2灯亮,按下K2则D2灯灭。

K1和K2按下后,引脚是低电平。

判断PE2和PE3引脚的信号来确定K1和K2是否按下,若为低电平,在为按下,若为高电平,则为放开。

PE2和PE2引脚为输入类型。

PF10引脚为输出类型2.打开STM32CubeMX建立工程(1)设置类型STM32F407ZGTxLQFP144(2)设置引脚类型Peripherals-SYS-Debug设置为SerialWire(仿真使用)注意:一定设置,否则以后不能使用仿真器。

找到PF10,由于是控制LED灯,设置为输出类型(GPIO_Output),同理,设置PE2和
PE3类型,为GPIO_Input(3)对PE2和PE3mode进行设置依次选择【Configuration】GPIO 将GPIOPull-up/Pull-down设置为Pull-up
(4)设置工程ProjectSettings-ProjectName设置为KEYToolchain/IDE设置为MDK-ARMV5通过向导,自动生成初始化代码,然后通过Keil5打开工程3.先编译工程在main.c中添加代码
uint8_tCheck_Key(){if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==GPIO_PIN_RESET||HA L_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==GPIO_PIN_RESET){HAL_Delay(10);if(HAL_GPIO_
ReadPin(GPIOE,GPIO_PIN_2)==GPIO_PIN_RESET){
return1;}if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==GPIO_PIN_RESET){return2;}}return 0;}在main函数中uint8_tkey;key=Check_Key();switch(key)
{case1:HAL_GPIO_WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_RESET);break;case2:HAL_GPIO_ WritePin(GPIOF,GPIO_PIN_10,GPIO_PIN_SET);break;}编译4.链接仿真器仿真调试
然后按开发板上的复位键,测试。

相关文档
最新文档