Cubeide新建RT-thread(3.1.5)工程记录

cubeide版本1.8,rt-thread版本3.1.5,实验平台正点原子精英板(F103ZET6)

声明;本文参考了rt-thread官方教程以及一些博主的记录,仅供学习记录使用,方便以后查阅。

1、准备rt-thread包

进入包管理页面,选择网络获取,之后输入网址
在这里插入图片描述

https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

2、添加包

在这里插入图片描述
三个都勾上即可
在这里插入图片描述

可见多出如下选项
在这里插入图片描述
这里选择内核版本,其他参数默认,我大概看了下其他参数,跟官方说的影响不大
在这里插入图片描述
之后常规操作一下,就是建立一个带串口1和led的工程
在这里插入图片描述
取消使用一些中断,这些中断在rt-thread里面被复用了
具体为 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断
在这里插入图片描述

后面选择好时钟以及debug就可以生成代码了
在这里插入图片描述

3、修改代码

直接编译会报错,因此需要修改代码

首先是看一下这个目录
在这里插入图片描述
因为我之前一直这里报错,不知道啥原因,他自己定义了一个串口二的初始化函数,然后还有重定向输入输出,但是一直报错,干脆就给他删掉重写一个就完事了

删掉串口定义和输入输出函数,在main.c中添加(末尾处添加即可)

char rt_hw_console_getchar(void)
{
    int ch = -1;
    if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
    {
        ch = huart1.Instance->DR & 0xff;
    }
    else
    {
        if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE) != RESET)
        {
            __HAL_UART_CLEAR_OREFLAG(&huart1);
        }
        rt_thread_mdelay(10);
    }
    return ch;
}
void rt_hw_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char a = '\r';
    __HAL_UNLOCK(&huart1);
    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            ITM_SendChar(a);
            HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1);
        }
        HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1);
    }
}

下面需要修改下启动文件
在这里插入图片描述
注释bl main,替换为bl entry
在这里插入图片描述

4、编写rt-thread线程

新建一个rtthread_test.c文件,加入下面代码

#include "rtthread.h"
#include "main.h"
#include "stdio.h"


static struct rt_thread led_thread;
static char led_thread_stack[256];

static void led_thread_entry(void *parameter);

int MX_RT_Thread_Init(void)
{
    //初始化线程
    rt_err_t rst;
    rst = rt_thread_init(&led_thread,
                         (const char *)"ledtest", /* 线程名字 */
                         led_thread_entry,         /* 线程入口函数 */
                         RT_NULL,                  /* 线程入口函数参数 */
                         &led_thread_stack[0],
                         sizeof(led_thread_stack),   /* 线程栈大小 */
                         RT_THREAD_PRIORITY_MAX - 2, /* 线程的优先级 */
                         20);                        /* 线程时间片 */
    if (rst == RT_EOK)
    {
        rt_thread_startup(&led_thread); //创建线程
    }
    return 0;
}


static void led_thread_entry(void *parameter)
{
    while (1)
    {
        rt_kprintf("rt-thread_test\r\n");
        HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_5);
        rt_thread_mdelay(1000);
    }
}

线程含义参数理解

在下面官网文档可以获取

https://www.rt-thread.org/document/api/group___thread.html#gacd985aa60939b95e510f144610f001b9

如下图所示

main.c中引入

#include "rtthread.h"
extern int MX_RT_Thread_Init(void);

初始化引入

  MX_RT_Thread_Init();

while循环中引入

  	HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
  	rt_kprintf("mian_test\r\n");
  	rt_thread_mdelay(500);

结果如下
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桃成蹊2.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值