Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PIN_GPIO通用驱动
外部中断
潘多拉开发板_Pandora
潘多拉开发板的WK_UP按键无法使用外部中断检测
发布于 2023-12-15 17:36:48 浏览:496
订阅该版
本来想做按键扫描任务 但是用到响应按键的话一般优先级很高 而且按键不会频繁按下,没必要一直查询 使用外部中断处理是更优的做法 参考04_basic_beep_motor例程的按键中断 但是这个例程的KEY_WAKE_UP没有使用中断,用了下拉输入扫描,不知道是为什么 难道是这个和低功耗的东西有关不能用中断? 翻了下例程的PDF 原理图可知, KEY0 、 KEY1 、 KEY2 按下为低电平,松开为高电平, WK_UP 按下为高电平,松开为低电平。所以在 main 函数中,首先将 KEY0 、 KEY1 、 KEY2 三个按键引脚配置为上拉输入模式, WK_UP 按键设置为下拉输入模式, 实际上我把wk_up引脚配置为上升沿外部中断也是不行不能正常触发中断回调 而且STLINK也直接掉线了 估计stm32L4已经进入低功耗模式 在低功耗模式下无法进行程序的烧写了 很奇怪看了下HAL裸机教程是可以全部配置为中断的 难道是rtthread的drv_gpio适配有问题还是硬件上有问题吗? 源文件irq_key.c: ```c #include
#include
#define DBG_TAG "state led" #define DBG_LVL DBG_LOG #include
#include
/* 中断回调 */ void irq_key_falling_callback(void *args) { rt_uint32_t sign = (rt_uint32_t)args; switch (sign) { case PIN_KEY0: rgb_state_led.color.red=1; LOG_D("KEY0 interrupt."); break; case PIN_KEY1: rgb_state_led.color.red=0; LOG_D("KEY1 interrupt."); break; case PIN_KEY2: rgb_state_led.color.blue=1; LOG_D("KEY2 interrupt."); break; case PIN_WK_UP: rgb_state_led.color.blue=0; LOG_D("KEY WAKEUP interrupt."); break; default: LOG_E("error sign= %d !", sign); break; } } void irq_key_rising_callback(void *args) { rt_uint32_t sign = (rt_uint32_t)args; switch (sign) { case PIN_WK_UP: rgb_state_led.color.blue=0; LOG_D("KEY WAKEUP interrupt."); break; default: LOG_E("error sign= %d !", sign); break; } } void irq_key_init(void) { /* 设置 KEY0 引脚的模式为输入模式 */ rt_pin_mode(PIN_KEY0,PIN_MODE_INPUT_PULLUP); rt_pin_mode(PIN_KEY1,PIN_MODE_INPUT_PULLUP); rt_pin_mode(PIN_KEY2,PIN_MODE_INPUT_PULLUP); rt_pin_mode(PIN_WK_UP,PIN_MODE_INPUT_PULLDOWN); /* 设置按键中断模式与中断回调函数 */ rt_pin_attach_irq(PIN_KEY0, PIN_IRQ_MODE_FALLING, irq_key_falling_callback, (void *)PIN_KEY0); rt_pin_attach_irq(PIN_KEY1, PIN_IRQ_MODE_FALLING, irq_key_falling_callback, (void *)PIN_KEY1); rt_pin_attach_irq(PIN_KEY2, PIN_IRQ_MODE_FALLING, irq_key_falling_callback, (void *)PIN_KEY2); rt_pin_attach_irq(PIN_WK_UP,PIN_IRQ_MODE_RISING, irq_key_rising_callback, (void *)PIN_WK_UP); /* 使能中断 */ rt_pin_irq_enable(PIN_KEY0, PIN_IRQ_ENABLE); rt_pin_irq_enable(PIN_KEY1, PIN_IRQ_ENABLE); rt_pin_irq_enable(PIN_KEY2, PIN_IRQ_ENABLE); rt_pin_irq_enable(PIN_WK_UP, PIN_IRQ_ENABLE); } ``` 头文件irq_key.h: ```c #include
#include
#define PIN_KEY0 GET_PIN(D, 10) // PD10: KEY0 --> KEY #define PIN_KEY1 GET_PIN(D, 9) // PD9: KEY1 --> KEY #define PIN_KEY2 GET_PIN(D, 8) // PD8: KEY2 --> KEY #define PIN_WK_UP GET_PIN(D, 11) // PD11: WK_UP --> KEY void irq_key_init(void); ```
查看更多
1
个回答
默认排序
按发布时间排序
张世争
2023-12-16
学以致用
先用裸机程序确认是否可以配置成中断,并且正常触发中断回调
撰写答案
登录
注册新账号
关注者
0
被浏览
496
关于作者
AGeek
这家伙很懒,什么也没写!
提问
2
回答
0
被采纳
0
关注TA
发私信
相关问题
1
潘多拉开发板AP6181 外设支持报错
2
潘多拉wifi管理例程中ap模式未启动
3
潘多拉开发板上I2C设备驱动开发
4
潘多拉开发板 综合例程 调试报错
5
潘多拉开发板在VSCODE无法执行micropython
6
潘多拉添加freemodbus例子出现错误
7
潘多拉开发板OV2640拍摄JPEG格式的照片
8
SFUD 提示闪存超过32g
9
有谁用潘多拉开发过OV2640吗
10
请问潘多拉开发板怎么烧录micropython固件
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
基于RT-Thread的STM32F4开发第四讲——硬件定时器更新中断(缺失补齐教程)
2
基于RT-Thread的STM32F4开发第三讲——DAC
3
Wireshark抓包EtherCAT报文
4
RISC-V hardfault分析工具,RTTHREAD-RVBACKTRACE 原理讲解
5
基于RT-Thread的STM32G4开发第二讲第二篇——ADC
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部