STM32开发板按键控制实验实验说明
- 格式:docx
- 大小:18.84 KB
- 文档页数:2
第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. 实验结果:通过按键输入,可以实现对数字的加减操作,并实时显示结果。
按键点灯实验报告(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按下后绿灯亮,再按一下绿灯灭。
实训题目:按键控制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开发板(小苗板)资料系列之八——按键例程讲解来源:第九单片机论坛在流水灯例程中通过对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头文件中增加一下宏定义代码。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为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使用。
在硬件篇,指导书还会详细介绍各个单元模块的电路设计和布线原则。
供实验者在自己做项目的时候参考和借鉴。
另外,硬件篇还会介绍单元模块常见的故障和排除方法,使实验者能够在硬件电路出现故障的时候,迅速查找原因和修复。
实验一搭建实验环境一.实验简介搭建嵌入式系统开发环境,建立第一个工程,流水灯实验二.实验目的掌握STM32开发环境,掌握从无到有的构建工程。
三.实验内容熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现流水灯工程。
通过ISP下载代码到实验板,查看运行结果。
下载代码到目标板,查看运行结果。
四.实验设备硬件部分:PC计算机(宿主机)、STM32实验板。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1.熟悉MDK KEIL开发环境2.熟悉串口编程软件ISP3.查看固件库结构和文件4.建立工程目录,复制库文件5.建立和配置工程6.编写代码7.编译代码8.使用ISP下载到实验板9.测试运行结果10.记录实验过程,撰写实验报告六.实验结果及测试七.实验总结实验二按键实验(查询方式)一.实验简介在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。
二.实验目的熟练使用库函数操作GPIO,掌握利用查询方式控制按键的程序编写方法。
三.实验内容实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
四.实验设备硬件部分:PC计算机(宿主机)、STM32实验板。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1在实验一代码的基础上,编写按键控制部分代码2编写完成主程序4编译代码,下载到实验板5.单步调试6记录实验过程,撰写实验报告六.实验结果及测试七.实验总结实验三按键实验(中断方式)一.实验简介在实验一的基础上,使用按键控制流水灯。
二.实验目的熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
三.实验内容实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
下载代码到目标板,查看运行结果。
实验二STM32单片机GPIO程序开发
一.实验目的
1.掌握STM32单片机输入输出接口程序开发
2.掌握用库函数开发STM32单片机程序
二.实验环境
1.TEB-CM5000嵌入式单片机实验系统
2.MDK4.7嵌入式软件开发环境
三.实验内容
1.熟悉TEB-CM5000嵌入式单片机实验系统上的LED灯电路和单
独按钮电路。
2.学习并掌握库函数版本相关的实例程序,主要学习
gpio_key_led实例程序。
3.利用库函数开发出USER2(PD3)按钮控制LD5(PF7)亮灭。
具体
功能:USER2(PD3)按钮按下时,LD5灯闪烁;当USER2(PD3)按钮弹开时,LD5灯停止闪烁。
四.实验要求
1.完成实验要求中提到要完成的所有内容,完成代码并提
交主要代码。
2.对每行主要代码要进行注释,说明其功能。
五.实验提交要求
1.按照实验模板完成实验报告,其中包括实验要求的所有内容。
2.提交电子版报告,撰写程序流程图,并且提交程序主要代码。
3.最终提交形式:制作成压缩rar格式文件,文件命名:班级_组号_学号_姓名_实验一.rar。
实验报告课程名称:单片微机原理与车载系统学生姓名蒋昭立班级电科1601学号16401700119指导教师易吉良成绩2018年12 月17 日实验1 GPIO实验1.1 实验目的1)熟悉MDK开发环境;2)掌握STM32单片机的GPIO使用方法。
1.2 实验设备1)一台装有Keil和串口调试软件的计算机;2)一套STM32F103开发板;3)STlink硬件仿真器。
1.3 基本实验内容1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下:从图片可以看出,例程运行成功,没有错误。
2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。
实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。
理解连续按概念及其实现代码。
参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。
当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。
寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。
寄存器方法实现支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为1,为支持连按模式。
3)采用库函数方法实现按键输入实验,参考《STM32F1开发指南(精英版)-库函数版本_V1.0》第8章。
stm32按键控制灯亮灭实验总结stm32是一款常用的单片机芯片,具有强大的处理能力和丰富的外设资源。
在很多嵌入式系统中,常常需要使用按键来控制某些功能或操作。
本文将介绍如何使用stm32按键控制灯亮灭的实验过程和总结。
实验目的:通过按键控制stm32开发板上的LED灯的亮灭,实现简单的开关控制功能。
实验原理:stm32开发板上通常会有一些按键,按键是一种常见的输入设备,通过按下按键可以改变开关的状态。
LED灯是一种常见的输出设备,可以通过控制其电流来实现亮灭效果。
我们可以通过将按键与LED 灯连接,并通过编程控制按键的状态来控制LED灯的亮灭。
实验步骤:1. 准备工作:首先,我们需要准备一块stm32开发板,一根USB数据线和一只LED灯。
将开发板连接到计算机上,并安装好开发环境(如Keil 或IAR)。
2. 连接电路:将LED灯的正极连接到stm32开发板上的一个IO口,并将负极连接到开发板上的地(GND)。
将按键的一个引脚连接到另一个IO 口上,另一个引脚连接到地(GND)。
3. 编写程序:打开开发环境,创建一个新的工程,并编写相应的程序。
首先需要初始化IO口,将控制LED的IO口设置为输出模式,将控制按键的IO口设置为输入模式。
然后,编写一个循环,不断检测按键的状态。
当按键被按下时,将LED的控制IO口置高,LED灯亮起;当按键松开时,将LED的控制IO口置低,LED灯熄灭。
4. 烧录程序:将开发板通过USB数据线连接到计算机上,选择正确的芯片型号和调试器,将程序烧录到开发板上。
5. 实验验证:将开发板上的按键按下,观察LED灯的亮灭情况。
按下按键时,LED灯应该亮起;松开按键时,LED灯应该熄灭。
通过不断按下和松开按键,可以实现LED灯的开关控制。
实验总结:通过本次实验,我们成功实现了使用stm32按键控制LED灯亮灭的功能。
通过编写程序,我们可以很方便地通过按下按键来控制LED的状态。
按键计数说明书
一:原理图
按键电路图
右边K1、K2、K3为本实验测试的按键。
二:工作原理
K1、K2、K3按下去,引脚KEY1、KEY2输出低电平。
在K1或K2或K3按下后要对其进行消抖的工作,在定时器中断中判断按键的状态,为低电平,计数加1,连续60次计数,超过2/3,则证明按键已经按下,通过两个变量分别保存按键的当前状态与上一个状态来判断是上升沿、下降沿、低电平、高电平的触发方式。
寄存器的具体说明可参考《STM32中文参考资料》。
三:实验现象及操作
本实验涉及K1、K2两个按键。
●下载程序后,数码管左边三位点亮,为000;
●当K1每按一次,则显示的三位十进制值加1,当加到999时,再按一次,值变为
000;
●当K2每按下一次,显示的值减1,当减到000时,再按一次,则值变为999。
STM32实验2报告实验2 MINI STM32按键控制LED灯实验一、实验目的1、掌握嵌入式程序设计流程。
2、熟悉STM32固件库的基本使用。
二、实验内容1、编程使用I/O口作为输入,控制板载的两个LED 灯。
2、使用固件库编程。
三、实验设备硬件:PC机一台MINI STM32开发板一套软件:RVMDK V3.8 一套Windows XP 一套四、实验步骤1、设计工程,使用固件库来编程设置。
1.1、在这里我们建立一个文件夹为: STM32-Projects.点击Keil 的菜单:Project –>New Uvision Project ,然后将目录定位到刚才建立的文件夹STM32-Projecst 之下,在这个目录下面建立子文件夹shiyan1, 然后定位到shiyan1目录下面,我们的工程文件就都保存到shiyan1 文件夹下面。
工程命名为shiyan1, 点击保存.1.2、这里我们定位到STMicroelectronics 下面的STM32F103RB( 针对我们的mini 板子是这个型号。
1.3、弹出对话框“Copy STM32 Startup Code to project ….”,询问是否添加启动代码到我们的工程中,这里我们选择“否”,因为我们使用的ST固件库文件已经包含了启动文件。
1.4、接下来,我们在Template 工程目录下面,新建3 个文件夹CORE, USER,STM32F10x_FWLib 。
USER 用来放我们主函数文件main.c, 以及其他包括system_stm32f10x.c 等等,CORE 用来存放启动文件等,STM32F10x_FWLib 文件夹顾名思义用来存放ST官方提供的库函数源码文件.1.5、.打开官方固件库包,定位到我们之前准备好的固件库包的目录。
STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdP eriph_Driver 下面,将目录下面的src,inc 文件夹copy 到我们刚才建立的STM32F10x_FWLib 文件夹下面。
第八章按键输入实验上两章,我们介绍了STM32F4的IO口作为输出的使用,这一章,我们将向大家介绍如何使用STM32F4的IO口作为输入用。
在本章中,我们将利用板载的4个按键,来控制板载的两个LED的亮灭。
通过本章的学习,你将了解到STM32F4的IO口作为输入口的使用方法。
本章分为如下几个小节:8.1 STM32F4 IO口简介8.2 硬件设计8.3 软件设计8.4 下载验证8.1 STM32F4 IO口简介STM32F4的IO口在上两章已经有了比较详细的介绍,这里我们不再多说。
STM32F4的IO 口做输入使用的时候,是通过调用函数GPIO_ReadInputDataBit()来读取IO口的状态的。
了解了这点,就可以开始我们的代码编写了。
这一章,我们将通过ALIENTEK探索者STM32F4开发板上载有的4个按钮(KEY_UP、KEY0、KEY1和KEY2),来控制板上的2个LED(DS0和DS1)和蜂鸣器,其中KEY_UP控制蜂鸣器,按一次叫,再按一次停;KEY2控制DS0,按一次亮,再按一次灭;KEY1控制DS1,效果同KEY2;KEY0则同时控制DS0和DS1,按一次,他们的状态就翻转一次。
8.2 硬件设计本实验用到的硬件资源有:1)指示灯DS0、DS12)蜂鸣器3)4个按键:KEY0、KEY1、KEY2、和KEY_UP。
DS0、DS1以及蜂鸣器和STM32F4的连接在上两章都已经分别介绍了,在探索者STM32F4开发板上的按键KEY0连接在PE4上、KEY1连接在PE3上、KEY2连接在PE2上、KEY_UP 连接在PA0上。
如图8.2.1所示:图8.2.1 按键与STM32F4连接原理图这里需要注意的是:KEY0、KEY1和KEY2是低电平有效的,而KEY_UP是高电平有效的,并且外部都没有上下拉电阻,所以,需要在STM32F4内部设置上下拉。
8.3 软件设计从这章开始,我们的软件设计主要是通过直接打开我们光盘的实验工程,而不再讲解怎么加入文件和头文件目录。
按键输入实验1 实验目的(1) 学会按键的扫描输入;(2) 理解按键消抖的原因,学会按键消抖方法。
2 实验任务(1) 建立KEY.H文件,声明void KEY_Init(void)初始化函数,声明u8 KEY_Scan(u8 mode)函数,宏定义KEY0、KEY1和WK_UP;(2) 编写KEY.C文件,建立void KEY_Init(void)初始化函数,实现对按键连接IO端口的配置;(3) 编写main()函数,调用按键扫描程序,根据不同的按键实现对LED0和LED1的点亮。
3 实验说明KEY0和KEY1是低电平有效的,而KEY_UP是高电平有效的,并且外部都没有上下拉电阻,所以,需要在STM32F1内部设置上下拉。
同时需要把LED及按键接入到MCU的引脚上,连接方式按照软件和IO配置情况具体分配。
4 预习要求(1)理解按键扫描输入函数。
5 实验步骤(1) 建立按键输入实验工程文件;(2) 编写程序;(3) 编译无误后进行软件仿真;(4) 用J-Link将程序下载到实训平台上,观察实验现象。
硬件设计图5.1 LED和KEY电路原理图软件设计(1) 新建文件夹并命名为按键输入实验,复制粘贴之前的实验文件,将工程文件改名为KEY.uvprojx,同时添加key.c和key.h文件至工程中。
(2)led.h和led.c代码如下图:图5.2 led.h文件图5.3 led.c文件(2) 首先打开key.h文件,以KEY0为例,先使用GPIO_ReadInputDataBit()函数读取PE6端口的输入电平,再定义KEY0按下后KEY_Scan()返回的键值。
#define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_6)//读取按键0再分别对其他两个按键进行宏定义对key.c内的函数进行声明void KEY_Init(void);//IO初始化u8 KEY_Scan(void);//按键扫描函数图5.4 key.h文件(3) 再打开key.c文件,添加初始化函数void KEY_Init(void),在该函数内配置。
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.链接仿真器仿真调试
然后按开发板上的复位键,测试。