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

[复制链接]
 楼主| 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工程:
截屏2023-03-12 10.31.50.png
2、在工程的apllcations下面新建key.c,并把key.c加入工程中:
截屏2023-03-12 10.34.57.png
3、key.c内容如下:
  1. #include "key.h"
  2. #include <rtthread.h>
  3. #include <rtdevice.h>

  4. #define KEY2_PIN_NUM  1    //PA01
  5. #define LED3_PIN_NUM  69   //PE05

  6. static void led_toggle(void *args)
  7. {
  8.         uint8_t start_tick = 0;
  9.         start_tick = rt_tick_get()+20;
  10.         while(rt_tick_get()<start_tick);
  11.         if(rt_pin_read(KEY2_PIN_NUM) == PIN_LOW)
  12.         {
  13.                         rt_pin_write(LED3_PIN_NUM, !rt_pin_read(LED3_PIN_NUM));
  14.         }
  15. }
  16. static void key_test(void)
  17. {
  18.         rt_pin_mode(LED3_PIN_NUM,PIN_MODE_OUTPUT);
  19.         rt_pin_write(LED3_PIN_NUM,PIN_LOW);
  20.         rt_pin_mode(KEY2_PIN_NUM, PIN_IRQ_MODE_FALLING);
  21.         rt_pin_attach_irq(KEY2_PIN_NUM, PIN_IRQ_MODE_FALLING, led_toggle, RT_NULL);
  22.         rt_pin_irq_enable(KEY2_PIN_NUM,PIN_IRQ_ENABLE);
  23. }

  24. MSH_CMD_EXPORT(key_test,key test);

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

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做阻塞的消抖了。
drer 发表于 2023-4-7 15:16 | 显示全部楼层
看效果视频感觉好像楼主控制按键的长短不同 灯点亮的也不同啊
coshi 发表于 2023-4-7 15:44 | 显示全部楼层
貌似使用的是电平判断动作的是吗
kxsi 发表于 2023-4-7 16:09 | 显示全部楼层
为什么需要打开终端控制台才可以运行呢
wiba 发表于 2023-4-7 16:36 | 显示全部楼层
看到的是部分代码 点灯代码的启动需要上位机的通知?
 楼主| lulugl 发表于 2023-4-7 17:24 | 显示全部楼层
kxsi 发表于 2023-4-7 16:09
为什么需要打开终端控制台才可以运行呢

这个程序,不是开机就运行了,要运行keytest才配置好按键驱动。
 楼主| lulugl 发表于 2023-4-7 17:25 | 显示全部楼层
wiba 发表于 2023-4-7 16:36
看到的是部分代码 点灯代码的启动需要上位机的通知?

是的,要在终端上运行才可以。
 楼主| lulugl 发表于 2023-4-7 17:26 | 显示全部楼层
tpgf 发表于 2023-4-7 14:22
看名称是想要通过跑系统来点灯是吗

对的,如果不开终端,可以把程序放到main里开启。
houjiakai 发表于 2023-4-12 21:07 | 显示全部楼层
这个是自己移植的RT- Thread吗
youtome 发表于 2023-4-12 22:06 | 显示全部楼层
程序中还需要使用看门狗吗               
burgessmaggie 发表于 2023-4-12 22:15 | 显示全部楼层
APM32F107VCT6 能跑linux系统吗
 楼主| 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就行了。
nomomy 发表于 2023-4-13 20:39 | 显示全部楼层
APM32F107VCT6跑RT- Thread要多大的Flash比较好?
youtome 发表于 2023-4-13 20:59 | 显示全部楼层
在APM32F107VCT6上跑RT- Thread总是进入HardFault,不知是什么原因
albertaabbot 发表于 2023-4-13 21:06 | 显示全部楼层
对于APM32F107VCT6 嵌入式系统软件,如何选择操作系统
averyleigh 发表于 2023-4-13 21:17 | 显示全部楼层
为什么要用RT- Thread              
updownq 发表于 2023-4-13 21:35 | 显示全部楼层
如何在APM32F107VCT6 上移植Freertos
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部

180

主题

830

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部