打印
[活动]

【APM32F107VCT6 MINI开发板测评】第N种点灯之二——RT- Thread按键中断点灯

[复制链接]
1246|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lulugl|  楼主 | 2023-3-12 11:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lulugl 于 2023-3-12 11:08 编辑

按键控制,是单片最常用的功能。SDK在\APM32F10x_SDK_V1.8\Examples\EINT\EINT_Config示例中做出了按键的DEMO,我这里向大家介绍用RT-Thread的PIN来实现key的按键控制LED灯。
1、在的rtthred-master-bsp中打开keil工程:

2、在工程的apllcations下面新建key.c,并把key.c加入工程中:

3、key.c内容如下:
#include "key.h"
#include <rtthread.h>
#include <rtdevice.h>

#define KEY2_PIN_NUM  1    //PA01
#define LED3_PIN_NUM  69   //PE05

static void led_toggle(void *args)
{
        uint8_t start_tick = 0;
        start_tick = rt_tick_get()+20;
        while(rt_tick_get()<start_tick);
        if(rt_pin_read(KEY2_PIN_NUM) == PIN_LOW)
        {
                        rt_pin_write(LED3_PIN_NUM, !rt_pin_read(LED3_PIN_NUM));
        }
}
static void key_test(void)
{
        rt_pin_mode(LED3_PIN_NUM,PIN_MODE_OUTPUT);
        rt_pin_write(LED3_PIN_NUM,PIN_LOW);
        rt_pin_mode(KEY2_PIN_NUM, PIN_IRQ_MODE_FALLING);
        rt_pin_attach_irq(KEY2_PIN_NUM, PIN_IRQ_MODE_FALLING, led_toggle, RT_NULL);
        rt_pin_irq_enable(KEY2_PIN_NUM,PIN_IRQ_ENABLE);
}

MSH_CMD_EXPORT(key_test,key test);

4、骗译下载,打开终端控制台,执行key_test
 \ | /
- RT -     Thread Operating System
/ | \     5.0.0 build Mar 12 2023 10:21:19
2006 - 2022 Copyright by RT-Thread team
System Clock: 72000000
msh >ek
msh >ke
key_test
msh >key_test
msh >
5、按下KEY1就可以实现控制LED3的翻转。


使用特权

评论回复
沙发
tpgf| | 2023-4-7 14:22 | 只看该作者
看名称是想要通过跑系统来点灯是吗

使用特权

评论回复
板凳
qcliu| | 2023-4-7 14:52 | 只看该作者
仔细看了一下代码  没有看明白楼主是如何做的防抖啊

使用特权

评论回复
地板
lulugl|  楼主 | 2023-4-7 15:06 | 只看该作者
本帖最后由 lulugl 于 2023-4-7 15:08 编辑

        start_tick = rt_tick_get()+20; //先定一个超时的计数

        while(rt_tick_get()<start_tick);  //等待超时
其实吧这个还是不是完成非阻 塞式的消抖。如果对实时性要求再高,用开设一个任务,然后用rt_thread_delay来做延时。这个只跑一个线任务,所以就用了while做阻塞的消抖了。

使用特权

评论回复
5
drer| | 2023-4-7 15:16 | 只看该作者
看效果视频感觉好像楼主控制按键的长短不同 灯点亮的也不同啊

使用特权

评论回复
6
coshi| | 2023-4-7 15:44 | 只看该作者
貌似使用的是电平判断动作的是吗

使用特权

评论回复
7
kxsi| | 2023-4-7 16:09 | 只看该作者
为什么需要打开终端控制台才可以运行呢

使用特权

评论回复
8
wiba| | 2023-4-7 16:36 | 只看该作者
看到的是部分代码 点灯代码的启动需要上位机的通知?

使用特权

评论回复
9
lulugl|  楼主 | 2023-4-7 17:24 | 只看该作者
kxsi 发表于 2023-4-7 16:09
为什么需要打开终端控制台才可以运行呢

这个程序,不是开机就运行了,要运行keytest才配置好按键驱动。

使用特权

评论回复
10
lulugl|  楼主 | 2023-4-7 17:25 | 只看该作者
wiba 发表于 2023-4-7 16:36
看到的是部分代码 点灯代码的启动需要上位机的通知?

是的,要在终端上运行才可以。

使用特权

评论回复
11
lulugl|  楼主 | 2023-4-7 17:26 | 只看该作者
tpgf 发表于 2023-4-7 14:22
看名称是想要通过跑系统来点灯是吗

对的,如果不开终端,可以把程序放到main里开启。

使用特权

评论回复
12
houjiakai| | 2023-4-12 21:07 | 只看该作者
这个是自己移植的RT- Thread吗

使用特权

评论回复
13
youtome| | 2023-4-12 22:06 | 只看该作者
程序中还需要使用看门狗吗               

使用特权

评论回复
14
burgessmaggie| | 2023-4-12 22:15 | 只看该作者
APM32F107VCT6 能跑linux系统吗

使用特权

评论回复
15
lulugl|  楼主 | 2023-4-12 23:03 | 只看该作者
burgessmaggie 发表于 2023-4-12 22:15
APM32F107VCT6 能跑linux系统吗

2.2 Cortex-M能跑linux吗?
不能!

Cortex-M系列处理器是没有内存管理单MMU。

linux是非实时性操作系统,多进程是其主要特点。
多进程依赖于内存管理单元MMU。换而言之,Linux操作系统对MMU具有极强的依赖性。

所以cortex-M不建议跑Linux!

cortex-M可以跑实时操作系统,因此不涉及到线程间的地址空间分配,不需要使用MMU,例如ucos、 FreeRTOS、 RT-Thread等。

所以极海这个最好是RT-Thread就行了。

使用特权

评论回复
16
nomomy| | 2023-4-13 20:39 | 只看该作者
APM32F107VCT6跑RT- Thread要多大的Flash比较好?

使用特权

评论回复
17
youtome| | 2023-4-13 20:59 | 只看该作者
在APM32F107VCT6上跑RT- Thread总是进入HardFault,不知是什么原因

使用特权

评论回复
18
albertaabbot| | 2023-4-13 21:06 | 只看该作者
对于APM32F107VCT6 嵌入式系统软件,如何选择操作系统

使用特权

评论回复
19
averyleigh| | 2023-4-13 21:17 | 只看该作者
为什么要用RT- Thread              

使用特权

评论回复
20
updownq| | 2023-4-13 21:35 | 只看该作者
如何在APM32F107VCT6 上移植Freertos

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

715

帖子

9

粉丝