江协科技按键中断hal库

发布于:2024-12-06 ⋅ 阅读:(112) ⋅ 点赞:(0)

按键中断+OLED显示计数值

本项目工程代码:

点击下载

1.接线图

我们些许修改了一下触发方式, 使用PB1, 进行触发按键

image-20241203142103725

2.Hal库功能

选择STM32F103C8T6芯片

锁定PB1引脚, 配置成GPIO_EXTI1模式

image-20241203145658885

③设置成下降沿检测, 并设置用户标签为SensorCount

image-20241203145837862

④使能PB1中断

image-20241203150219175

3. Hal库工程配置

点击跳转

个性化:

工程名字: Key_Exit_oledShow

4.keil5工程编译烧录配置

点击跳转查看

5.编写代码

(1)key中断代码编写

1.我们首先锁定void EXTI1_IRQHandler(void)函数

2.想要跳转, 需要我们先编译一遍工程

image-20241203154722114

3.进入启动函数, 找到中断向量表, 然后f12进入中断1, 后续我们在这里操作

image-20241203154844246

4.我们定义一个按键计数变量,每次按下按键, 进入中断后, 变量值加1

uint16_t hhRetCount = 0;

image-20241203155528982

5.当中断触发时, 我们要判断一下,是否是PB1,触发的中断, 所以需要判断一下标志位

if(__HAL_GPIO_EXTI_GET_FLAG(SensorCount_Pin))
{
    hhRetCount++;	//计数值加一
}    
image-20241203160257158

注意, 我们的代码和大括号, 都在USER CODE里面

6.其实这个数值也可以进行闭源的,就是我们调用stm32f1xx.it.c里面的函数,函数进行返回hhRetCount即可

uint16_t GetCountRet(void)
{
    return hhRetCount;
}
image-20241203160502286

(2)OLED显示按键次数

利用江协科技的OLED代码, 我们可以进行移植, 也可以在我创建好的工程上, 进行创建

点击跳转江协科技OLED保姆移植

1.回到main.c文件, 我们初始化OLED, 然后显示Count次数(记得包含 #include “OLED.h”)

    OLED_Init();
    OLED_Clear();

    OLED_ShowString(0,0,"Counts:",OLED_6X8);

    OLED_Update();
image-20241203160930372

2.然后我们在while(1)里面循环刷新显示按键变量值即可

        OLED_ShowNum(0, 16, GetCountRet(), 5, OLED_8X16);
        OLED_Update();
image-20241203161029428

3.然后编译烧录, 按下按键, 观察按键次数

6.埋雷

我们会发现多次进入中断, 我们采用定时器喂狗模型进行按键消抖

韦东山stm32hal库–定时器喂狗模型按键消抖原理+实操详细步骤