按键扫描函数key.c片段:
//按键初始化函数
//特别注意:在该函数之后,JTAG将无法使用(SWD也无法使用)
//如果想JTAG仿真,可以屏蔽该函数。
//PA0.13.15 设置成输入
void KEY_Init(void)
{
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入
GPIOA->CRL|=0X00000008;
GPIOA->CRH&=0X0F0FFFFF;//PA13,15设置成输入
GPIOA->CRH|=0X80800000;
GPIOA->ODR|=1<<13; //PA13上拉,PA0默认下拉
GPIOA->ODR|=1<<15; //PA15上拉
}
//按键处理函数
//返回按键值
//0,没有任何按键按下
//1,KEY0按下
//2,KEY1按下
//3,KEY2按下 WK_UP
//注意此函数有响应优先级,KEY0>KEY1>KEY2!!
u8 KEY_Scan(void)
{
static u8 key_up=1;//按键按松开标志
JTAG_Set(JTAG_SWD_DISABLE);
if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY0==0)
{
JTAG_Set(SWD_ENABLE);
return 1;
}
else if(KEY1==0)
{
JTAG_Set(SWD_ENABLE);
return 2;
}
else if(KEY2==1)
{
JTAG_Set(SWD_ENABLE);
return 3;
}
}else if(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;
JTAG_Set(SWD_ENABLE);
return 0;// 无按键按下
}
需要注意的地方是:
1.KEY_Scan函数频繁调用了JTAG_Set函数,每次按键扫描的时候都禁用了JTAG和SWD,这样做的目的是使PA13和PA15用作普通IO口,从而检测按键状态,在按键扫描结束后,有开启了SWD,这样让JLIK能够继续后面的跟踪,这样可以在JLINK不拔掉的情况下进行软件仿真,但是代码下载完了之后想用JLIK调试就不行了,因为JLINK会对IO有影响,一定要拔下JLINK。还有就是使用SWD模式的JLINK调试这个代码的时候,不要去调试KEY_Scan函数,否则会引起JLINK追踪中断,导致调试终止,应当一步跳过。这个地方有点疑惑:软件仿真不是不用JLINK吗?问同学说是这个跟软件设置有关,虽然没用硬件,但是还是有影响,有待研究。
2.key_up是按键松开标志,如果按下后不松开,就不会进if(),而是进else if,和while(!key)没啥不同,按下了key2之后,return返回了一个3,函数就跳出来了,不会在往下执行了,所以按键具有响应优先级。
关键字:STM32 按键输入 函数
引用地址:
STM32-按键输入实验学习笔记
推荐阅读最新更新时间:2024-11-20 01:17
STM32之ADC原理
ADC的位数决定了ADC的精度,有8位的,12位的,16位的等。 还有一个很重要的参数就是转换时间。 ST M32f103RBT6有2个ADC 控制器 。128KFlash,20KRAM 每一个ADC控制器都有多个通道,例如ADC1的外部通道有16个,可以理解为有一个 开关 分别连接各个通道。 每个通道的采样间隔和采样时间都可以设置。 三。ADC各通道与IO管脚对应表 一般负参考电压接地,正参考电压接 3.3V 。 模拟输入电压不能超过3.3V,否则输入 引脚 可能被烧毁。 ADC框图 Vref+连接到VDDA,Vref-连接到VSSA。 最多4个通道连接到注入通道,最多16个通道连接到规则通道。 什么
[单片机]
基于STM32的矿用本质安全型电源设计
0 引言 本安电源是本安型电气设备的一个重要组成部分,由于煤矿的机械化,井下传感器、弯道报警器等设备的供电,通信、报警都需要供电设备。但是基于井下复杂的环境,对供电设备的要求也是非常严格的,它要求电源电路的内部和引出线无论是在正常工作还是在故障状态下都是安全的并且产生的电火花不会点燃周围环境中的爆炸性混合物。本安电源有“ia”和“ib”两个等级。在本文中介绍的本安电源是井下常用的“ia”等级,也就是说在一个故障,一套保护电路损坏的情况下也能继续工作。 1 本安电源的组成及工作原理 1.1 电源 本系统中本安电源的输入+Vin、-Vin为48 V直流电源,经过DC/DC电源转换模块(U1)输出12 V直流电,U2是7
[单片机]
STM32F4 新建标准库函数工程
前言 在 STM32 开发中,库函数开发相比寄存器方式具有开发周期短、代码可读性好、便于移植等优点,而使用 Keil 环境的第一步就是新建工程。本文以 STM32F401CE 芯片为例,介绍使用标准库函数新建工程的步骤。 材料准备 STM32F4xx 固件库:STM32F4xx_DSP_StdPeriph_Lib_V1.4.0.rar Keil-MDK 一点耐心 新建库函数工程注意事项 不同芯片在新建工程时的配置略有区别,主要体现在以下几点: 工程目标 Device 选择的芯片型号不同。 添加的启动文件不同。要根据芯片型号在 arm 目录下选择相应的 .s 文件。 C/C++ 选项卡的芯片型号宏定义不同。具体有哪些选
[单片机]
STM32学习笔记之以太网的通信+lwip协议移植
STM32F107自带 MAC控制器 而有的芯片把Mac和PHY坐到一起了,像ENC28J60 以太网通信 依据 TCP/IP协议是 LWIP协议,这个LWIP 协议是可以运行在STM32上面的。 STM32F107为以太网外设专门做的库直接下载对应的demo 可能协议版本不一样,下载运行即可。 主要有几个部分说明一下 1、修改 ethernetif.c 包含了与以太网网卡密切相关的初始化、发送、接收等函数的实现。这个文件夹中的函数并不能使用,它们都是一个框架性的结构,移植者需要根据自己使用的网卡特性来完成这些函数。 2、mem管理 使用系统堆内存管理或者使用自定义内存管理(类
[单片机]
Keil5配置GCC编译器编译STM32工程
Keil一般使用ARMCC编译MCU工程代码。偶然听说Keil也是支持内嵌GCC编译器的。于是尝试了网上博客所述的一些方法,最终找到了一篇博客 http://blog.csdn.net/lan120576664/article/details/46806991 按照文中所述,发现仍存在一些其他错误,后来又查找了其他相关资料,在这作以总结 一、下载GCC编译器 https://launchpad.net/gcc-arm-embedded/ 二、安装GCC GCC解压到keil的安装目录下面。如下图 三、配置Keil 如下图所示进行相关设置: Prefix:arm-none-eabi- Folder:D:k
[单片机]
简述串口通信原理 stm32串口发送数据 如何通过串口发送数据
串口通信经常作为开发调试的工具,所以先介绍下串口通信。 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。目前STM32一般只使用 RXD、TXD 以及 GND 三条信号线,直接传输数据信号。 STM32的串口通信外设有USART和UART。USART是Universal Synchronous Asynchronous Receiver and Transmitter的缩写,即通用同步异步收发器可以灵活地与外部设备进行全双工数据交换。UART(Universal Asynchronous
[单片机]
stm32使用三片74HC595级联程序代码
/************************************************************************ Function: Read_74HC595 Description: 读取n片74HC595的输入数据 Calls: HC595_delay;GPIO_ResetBits;GPIO_SetBits; Data Accessed: 无 Data Updated: 无 Input: HC595x:用户使用的595端口,类型定义在74HC595.h中 ChipNum: 用户使用的595端口上连接的芯片个数 Outp
[单片机]
便携嵌入式设备电源管理解决方案
前 言 随着各种便携嵌入式设备性能的日益提高,功能日益丰富,其电源紧张的问题也日益突出,国内新推出的某些具有PDA等多种功能的智能电话在密集使用下只能维持半天,多数摄像机和数码相机在一次充电后都只有一个小时左右的累积工作时间。Linux作为一个开放源代码的操作系统,拥有非常丰富的软件资源和平台支持,这使得嵌入式系统开发的周期大大缩短,越来越多的商用和通用嵌入式系统都采用Linux作为软件平台。因此有必要对Linux系统的电源管理机制进行深入研究。 Linux内核电源管理机制分析 Linux作为一个强大而成熟的操作系统,本身提供了一套从用户空间到系统空间的,由上而下的软件电源管理机制。 电源管理子系统 Linux内核实
[应用]