嵌入式蓝桥杯学习3 外部中断实现按键

Cubemx配置

前面的配置依旧一样。

原文链接:https://blog.csdn.net/m0_74246768/article/details/144227188

1.打开cubemx,将PB0到PB1配置为GPIO_EXTI模式。

2.在System-Core中点击GPIO,选择PB0到PB2,

GPIO_Mode(触发模式):External Interrupt Mode with Falling edge trigger detection

GPIO Pull up/Pull down(上下拉):Pull up

3.在System-Core中点击NVIC,勾选EXTI LINE interrupt三条线的使能中断。

4.将三条线的(Preemption Priority)抢占优先级调整低一些,都设置为5(让更高级的优先级处理更紧急的事件)。

5.将Time base: System tick timer的(Preemption Priority)抢占优先级设置为4.

点击GENERATE CODE.

代码编写

中断回调函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

my_main.c

复制代码
#include "my_main.h"
uint8_t led_sta=0x01;
void LED_Disp(uint8_t dsLED)
{
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_All, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC, dsLED<<8, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_2, GPIO_PIN_RESET);
}
uint8_t LED_chg(uint8_t num,uint8_t sta)
{
	uint8_t pos=0x01<<(num-1);
	led_sta=(led_sta&(~pos))|(pos*sta);
	LED_Disp(led_sta);
}
	
	
void setup()
{
	LED_Disp(0x00);
}
void loop()
{

}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin==GPIO_PIN_0)
	{
		HAL_Delay(10);
		if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0)
		{
			led_sta=(led_sta&0xfd)|0x02;
			led_sta=(led_sta&0xfe)|0x00;
			LED_Disp(led_sta);
			HAL_Delay(100);
		}
	}
}
相关推荐
upper20208 小时前
【炒股学习】集合竞价
学习·区块链
以孝治家行动8 小时前
线上共读传孝道 身体力行润家风——以孝治家家教中心开展线上学习
学习
yaoh.wang8 小时前
力扣(LeetCode) 88: 合并两个有序数组 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
小智RE0-走在路上9 小时前
Python学习笔记(8) --函数的多返回值,不同传参,匿名函数
笔记·python·学习
LYFlied9 小时前
【每日算法】 LeetCode 56. 合并区间
前端·算法·leetcode·面试·职场和发展
ZHSH.9 小时前
2026蓝桥杯备赛 | 赛事介绍及python基础(未完)
python·蓝桥杯·数据结构与算法
charlie11451419110 小时前
现代C++嵌入式教程:C++98基础特性:从C到C++的演进(1)
c语言·开发语言·c++·笔记·学习·教程
喜欢吃豆11 小时前
我把 LLM 技术栈做成了一张“可复用的认知地图”:notes-on-llms 开源仓库介绍
学习·语言模型·架构·开源·大模型·多模态
学烹饪的小胡桃11 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
nnsix11 小时前
QFramework学习笔记
笔记·学习