- 文章作者:Wendell
- 原文地址:https://www.jianshu.com/p/fd2491cb5b3f
- 转载请注明出处!
说明:
- 开发环境:keil MDK V5.21.1.0
- 硬件平台:STM32F429-apollo开发板(正点原子)
- Env工具:env_released_0.7.1
- RT-Thread版本: 3.1.1
- 本文以RT-Thread官网的AN0002 RT-Thread通用GPIO设备应用指南为依据,在STM32F429-apollo开发板上进行相应实验。
配置工程
在上一篇 AN0001 RT-Thread串口应用指南学习笔记 中已经完成了uart的学习,现在我们仍然使用上一篇中使用的工程文件,进行GPIO设备的学习。
在工程目录下右击,选择ConEmu Here,打开Env工具。在Env 命令行中输入menuconfig,按enter键进入配置界面,使用menuconfig工具配置工程,找到下图中间红框选项,路径在左上角红框内,使用空格键打开该选项,保存后退出。
Env 命令行中输入pkgs --update,按enter键进行软件包的更新,如果本地已经有所有需要的软件包,则不做改变,如果有缺少的软件包则会自动从GitHub库中下载。
加入代码
打开rt-thread学习准备一文中下载的“RT-Thread应用笔记资料(STM32F429阿波罗)”,在“通用GPIO设备应用笔记”文件夹下有代码文件 app_gpio.c、 app_gpio.h,将这两个文件拷贝到项目文件夹stm32f429-apollo\applications目录下。
Env工具是通过SConscript文件来组织文件的,手动添加的文件会在下次使用Env工具时被删除,因此修改SConscript文件才是正确的添加方法!使用notepad++打开applications文件夹中的SConscript文件,并按照图中位置添加app_gpio.c,保存后退出。
在Env命令行中使用scons --target=mdk5 -s命令重新生成工程并打开,可以看到app_gpio.c已经成功添加到application目录下!
在application.c文件中添加头文件
#include "app_uart.h"
使用如下函数代替application.c文件的rt_application_init()函数
int rt_application_init(void)
{
rt_thread_t tid;
tid = rt_thread_create("init",
rt_init_thread_entry, RT_NULL,
2048, RT_THREAD_PRIORITY_MAX/3, 20);
if (tid != RT_NULL)
rt_thread_startup(tid);
tid = rt_thread_create("gpio",
gpio_thread_entry,
RT_NULL,
1024,
3,
10);
/* 创建成功则启动线程 */
if (tid != RT_NULL)
rt_thread_startup(tid);
return 0;
}
编译后下载到开发板,指示灯DS0和DS1开始以1秒为周期闪烁,打开串口调试助手XCOM V2.0,按照自己计算机显示的com口编号配置好,依次按下按键KEY0、KEY1、KEY2、KEY_UP,串口输出如下图:
敲黑板!注意注意啦!
实验过程中发现使用中断方式的KEY0(其它三个按键使用的查询方式)行为异常,不能输出指定内容,和官方资料里给出的状态完全不一致。经各种检查测试后,考虑是按键没有上拉电阻,IO内部上拉能力有限导致状态不稳定,在按键KEY0脚外接上拉电阻1K(1K~10K均可)后成功治疗好该疑难杂症!