单片机学习小组
直播中

jackhui

11年用户 1070经验值
私信 关注

怎样在RT-Thread Studio上去完成点灯的设计呢

怎样在RT-Thread Studio上去完成点灯的设计呢?有何注意事项?

回帖(1)

张国厚

2022-3-1 13:37:20
硬件环境

自制的F767IGT6开发板,板载USB,UART1,CAN1,LED,按键等资源,SWD调试接口,其他引脚全部用插针引出

软件环境

RT-THread 4.0.2,开发环境为RT-Thread Studio 2.0.0
自制ST-Link-V2.1,CubeMX,Keil MDK,串口助手(哪个都可以用,建议用Putty,方便调试)等

新建工程

通过基于芯片的方式新建工程,
需要注意的是,此时新建的工程用的是HSI时钟,也就是片内高速时钟,晶振频率不准的,点灯无所谓,正式项目一般会用到外部晶振,此时需要做出修改,后续再学习,今天只点灯

生成工程后编译,无错误。写入芯片可以正常执行,Finsh控制台可以正常输出。
打开串口助手可以看到间隔1秒的输出显示


点灯踩坑


此时有个坑,按官方教程,工程会自动启动PIN设备,以及相关LED代码。
实际工程,确实启动了PIN设备,但没有生成LED驱动代码


#include

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include

int main(void)
{
    int count = 1;

    while (count++)
    {
        LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

按教程中的示例,咱给加上呗

//我的板子上的LED位于PB6和PH11
#define LED0_PIN    GET_PIN(B, 11)
#define LED1_PIN    GET_PIN(H, 6)

#include
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include

int main(void)
{
    int count = 1;
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);


    while (count++)
    {
        rt_pin_write(LED0_PIN, count % 2);
        rt_pin_write(LED1_PIN, (count+1) % 2);

        LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}

可是编译过不去,明明(我不是明明O_O )是按教程做的啊,卡了好久,重新生成工程,还是不行,按提示,是由于缺少rt_pin_write的头文件,好吧,加上,还是不行
后来求助william hill官网 ,被告知需要加入另外两个头文件

//按芯片生成的工程,需要手动添加以下头文件,及后续操作代码
#include
#include

再编译,OK,写入芯片,灯闪了。同时,打开串口助手,可以看见1秒次的串口数据发送。我用的是Putty,这个软件的好处是可以按Tab键进行指令补全,看官可以自己试一下RT-Thread的Finsh功能

终于从小白修炼到一灯大师了

完整代码如下


//我的板子上的LED位于PB6和PH11
#define LED0_PIN    GET_PIN(B, 11)
#define LED1_PIN    GET_PIN(H, 6)


#include

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include


//按芯片生成的工程,需要手动添加以下头文件,及LED操作代码
#include
#include


int main(void)
{
    int count = 1;

        //设定引脚状态
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);


    while (count++)
    {
            //两个灯交替点亮
        rt_pin_write(LED0_PIN, count % 2);
        rt_pin_write(LED1_PIN, (count+1) % 2);

        LOG_D("Hello RT-Thread!");
        rt_thread_mdelay(1000);
    }

    return RT_EOK;
}


举报

更多回帖

发帖
×
20
完善资料,
赚取积分