stm32F042 (二) 按键触发中断
已经实现GPIO口输出高低电平控制LED,这里实现按键触发中断来改变LED闪亮的频率,因为PB3连着LED,所以PB3的输出模式没有改变,随意选一个GPIO口PA7接按键产生中断。因为nucleo开发板是裸板,所以按键、上拉电阻是另找在面包上连接起来再连到开发板上,连接方法在下图表明。
GPIO设置






在 stm32f0xx_it.c添加如下代码
/* USER CODE BEGIN 0 */
uint16_t KEY_DOWN = 0;
uint16_t ms_Delay = 300;
/* USER CODE END 0 */
void EXTI4_15_IRQHandler(void)
{
/* USER CODE BEGIN EXTI4_15_IRQn 0 */
if(ms_Delay == 300)
ms_Delay = 1000;
else
ms_Delay = 300;
/* USER CODE END EXTI4_15_IRQn 0 */
在main.c里添加如下代码
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
extern uint16_t KEY_DOWN ;
//uint16_t KEY_UP = 1;
extern uint16_t ms_Delay ;
/* USER CODE END PV */
稍微改动一下while(1)中代码:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
HAL_Delay(ms_Delay);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
HAL_Delay(ms_Delay);
}
/* USER CODE END 3 */
}
另一种方案是直接改动main.c的代码,无需改动其他代码
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint16_t KEY_DOWN = 0;
//uint16_t KEY_UP = 1;
uint16_t ms_Delay = 300;
/* USER CODE END PV */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
HAL_Delay(ms_Delay);
HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
HAL_Delay(ms_Delay);
}
/* USER CODE END 3 */
添加以下函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
// if(HAL_GPIO_ReadPin(PA7_GPIO_Port,PA7_Pin)==KEY_DOWN)
// {
// HAL_Delay(20);/* 延时一小段时间,消除抖动 */
// if(HAL_GPIO_ReadPin(PA7_GPIO_Port,PA7_Pin)==KEY_DOWN)
// {
if(ms_Delay == 300)
ms_Delay = 1000;
else
ms_Delay = 300;
// }
// __HAL_GPIO_EXTI_CLEAR_IT(PA7_Pin);
// }
}
以上能够实现改动LED闪动频率,其实更完美的方案对按键进行消抖,但在这里的中断消抖不成功,还待后续学习调试
stm32F042 (二) 按键触发中断的更多相关文章
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...
- ZYNQ笔记(4):PL触发中断
一.ZYNQ中断框图 PL到PS部分的中断经过ICD控制器分发器后同时进入CPU1 和CPU0.从下面的表格中可以看到中断向量的具体值.PL到PS部分一共有20个中断可以使用.其中4个是快速中断.剩余 ...
- (二)stm32之中断配置
一.stm32的中断和异常 Cortex拥有强大的异常响应系统,它能够打断当前代码执行流程事件分为异常和中断,它们用一个表管理起来,编号为0~15为内核异常,16以上的为外部中断,这个表就是中断向量表 ...
- TQ210裸机编程(4)——按键(中断法)
S5PV210有4个向量中断控制器(VIC),每个向量中断控制器包含32个中断源. 当某个中断源产生中断时,CPU会自动的将VICxVECTADDRy(x=0,1,2,3,y=0-31)寄存器的值赋给 ...
- 【Java并发编程】之二:线程中断
[Java并发编程]之二:线程中断 使用interrupt()中断线程 当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一 ...
- STM32F030 定时器多次溢出才触发中断的问题
前言 最近在调试项目过程中,用了 STM32F030 的定时器 16 作为系统时钟,1ms 触发一次中断,过程中遇到一些值得记录的问题. 记录 STM32F030 中定时器 16 的初始化配置如下 v ...
- zigbee学习之路(四):按键控制(中断方式)
一.前言 通过上次的学习,我们学习了如何用按键控制led,但是在实际应用中,这种查询方式占用了cpu的时间,如果通过中断控制就可以解决这个问题,我们今天就来学习按键控制的中断方式. 二.原理分析 传统 ...
- unityevent与持续按键触发
上一篇中提到一种鼠标按下时的事件触发,即采用eventtrigger设定pointerdown和pointerup并绑定相应事件.但是若要实现持续按键则需要对绑定的每个方法都添加实现持续按键方法.所以 ...
- 专题2-通过按键玩中断\2440按键中断编程lesson2
1.程序优化 修改Makefile 把main.c里面的mmu代码复制到mmu.c并修改如下 main.c的修改 由于在bootloader当中一般不会使用MMU,所以 main.c 加入led.c文 ...
随机推荐
- ue4 官网IK流程记录
基本流程 角色蓝图构造 角色蓝图 角色蓝图中新建的函数IK Foot Trace AnimGraph事件 这里注意下Make Vector时把z方向的偏移量设置到了X上 猜测原因是效应器的x方向跟世界 ...
- 洛谷P3004 [USACO10DEC]宝箱Treasure Chest
P3004 [USACO10DEC]宝箱Treasure Chest 题目描述 Bessie and Bonnie have found a treasure chest full of marvel ...
- HDU5340 Three Palindromes
Three Palindromes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- DDD 落地的具体思路
学习 DDD 的朋友有两种,一种是看 DDD 经典书籍 <领域驱动设计:软件核心复杂性应对之道>完全看不懂,第二种是看啥都懂,都觉得有道理,但总是落不了地. 我们总结一下我们自己落地的思路 ...
- ReentrantLock锁 源码分析
根据下面代码分析下ReentrantLock 获得锁和释放锁的过程 ReentrantLock lock = new ReentrantLock(); lock.lock();//获得锁 lock.u ...
- C 语言实例 - 阶乘
C 语言实例 - 阶乘 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1.自然数n的阶乘写作n!. n!=×××...×n.阶乘亦可以递归方式定义:!=, ...
- code blocks无法输出中文解决方法
是CodeBlocks编译器设置问题,在CodeBlocks菜单 settings -> compiler and debugger settings -> global compiler ...
- Python模块介绍
模块 1.模块定义 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质上就是.py结尾python文件 分类:内置模块(又称标准库)执行 help('modules')查看所 ...
- The new week-学习Python-数据类型
记录自学Python心得 之前有一段时间的JAVA自学,但最终以“无目标”的状态下被懒散驱散了动力,此为前提 Python的历程就不细细说道了,蛮有趣的 一般大家都是学习的CPython,速度较快(这 ...
- [LOJ 2039] 「SHOI2015」激光发生器
[LOJ 2039] 「SHOI2015」激光发生器 链接 链接 题解 分为两个部分 第一个是求直线之间的交点找到第一个触碰到的镜面 第二个是求直线经过镜面反射之后的出射光线 第一个很好做,第二个就是 ...