Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第二期 空气质量分析仪]第3周作业_part3
发布于 2019-09-13 14:54:19 浏览:967
订阅该版
接下来便是添加按键发送消息的工作了。关于rtt中按键中断操作,我一直没有很好的处理,个人理解就是去抖动问题,一个按键中断触发了多个消息的发送。起初想着使用rt_thread_delay还延时消抖,结果报出如下图1所示的错误。 [align=center]![按键报错.png](/uploads/201909/13/144039offd5ffq3tf3q0df.png)[align=center]图1 按键报错 1. 按键任务的编写 ```static void key_thread_entry(void* parameter) { rt_err_t uwRet = RT_EOK; uint32_t r_queue; /* 任务都是一个无限循环,不能返回 */ while(1) { /* 队列读取(接收),等待时间为一直等待 */ uwRet = rt_mq_recv(test_mq, /* 读取(接收)队列的ID(句柄) */ &r_queue, /* 读取(接收)的数据保存位置 */ sizeof(r_queue), /* 读取(接收)的数据的长度 */ RT_WAITING_FOREVER); /* 等待时间:一直等 */ if(RT_EOK == uwRet) { rt_kprintf("触发中断的是KEY%d!
",r_queue); } else { rt_kprintf("数据接收出错,错误代码: 0x%lx
",uwRet); } LED1_TOGGLE; } }``` 2. 中断服务函数的编写```void KEY_IRQHandler(void) { //rt_thread_delay(20); //报如上图1所示的错误 //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY1_INT_EXTI_LINE) != RESET) { /* 将数据写入(发送)到队列中,等待时间为 0 */ rt_mq_send( test_mq, /* 写入(发送)队列的ID(句柄) */ &send_data1, /* 写入(发送)的数据 */ sizeof(send_data1)); /* 数据的长度 */ //清除中断标志位 EXTI_ClearITPendingBit(KEY1_INT_EXTI_LINE); } //确保是否产生了EXTI Line中断 if(EXTI_GetITStatus(KEY2_INT_EXTI_LINE) != RESET) { /* 将数据写入(发送)到队列中,等待时间为 0 */ rt_mq_send( test_mq, /* 写入(发送)队列的ID(句柄) */ &send_data2, /* 写入(发送)的数据 */ sizeof(send_data2)); /* 数据的长度 */ //清除中断标志位 EXTI_ClearITPendingBit(KEY2_INT_EXTI_LINE); } }``` 3. main函数的编写```int main(void) { rt_kprintf("按下KEY1 | KEY2触发中断!
"); /* 创建一个消息队列 */ test_mq = rt_mq_create("test_mq",/* 消息队列名字 */ 4, /* 消息的最大长度 */ 2, /* 消息队列的最大容量 */ RT_IPC_FLAG_FIFO);/* 队列模式 FIFO(0x00)*/ if (test_mq != RT_NULL) rt_kprintf("消息队列创建成功!
"); /* 创建一个任务 */ key_thread = /* 线程控制块指针 */ rt_thread_create( "key", /* 线程名字 */ key_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ 512, /* 线程栈大小 */ 1, /* 线程的优先级 */ 20); /* 线程时间片 */ /* 启动线程,开启调度 */ if (key_thread != RT_NULL) rt_thread_startup(key_thread); else return -1; }``` 4. 运行结果,如下图2所示。明显能看到,一次按键动作,触发了多次的消息发送,且次数不定:dizzy:。Miss 杨公布的任务还要分辨出奇/偶次来,这个........:L难道只能怪我使用的板子按键不好的缘故:'([align=center] ![按键输出.png](/uploads/201909/13/145050o8880d34x4vayqfy.png)[align=center]图2 按键输出
查看更多
1
个回答
默认排序
按发布时间排序
whj467467222
认证专家
2019-09-13
开源,分享,交流,共同进步
软件包里面不是有按键的吗?那些都有实现软件消抖
撰写答案
登录
注册新账号
关注者
0
被浏览
967
关于作者
mabo124
这家伙很懒,什么也没写!
提问
13
回答
1
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
[Vision Board创客营]学习片上Flash移植FAL
2
MCXN947测评系列(二)串口设备测评
3
NXP MCXN947实践:基于 rt-thread的驱动模块配置PWM
4
测试DFS+elm的删除命令rm,有点搞笑的经历
5
vision board 开箱
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
CAN总线
Hardfault
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
cubemx
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
socket
编译报错
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
sakumisu
4
个答案
3
次被采纳
xiaorui
5
个答案
2
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
15
个答案
1
次被采纳
踩姑娘的小蘑菇
13
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Lu_盼盼
1
篇文章
3
次点赞
猪的行独
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部