STM32CubeMX完美RT-THREAD项目创建流程说明(仅限个人备注)

如题。

因为官方使用cubemx生成后需要在board.c等写自定义代码,这样每次通过cubemx重新生成后会被覆盖。使用sub$$main 及super$$关键字使得在rtt在初始化之前可以通过外部进行相关配置,可以不改动rtt内核代码,即cubemx可以随意覆盖。
移植了finSH。

第一部分-安装RTT

  1. 安装RTT固件包
    https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc
  2. 安装3.1.3版本的RTT。(实测3.1.5不能部署在F1)

第二部分-CubeMX配置


我一般会把任务名长度限制改长。这样可以避免显示问题。


在这里插入图片描述
全开。这样可以动态创建线程。


在这里插入图片描述
可开可不开。我是在创建任务的时候就降低main函数优先级,把main当idle线程在用。


在这里插入图片描述
console的buffer我给提高了(记得对齐写256)。
在这里插入图片描述
finsh线程stack提高


剩下的就是按需配置外设

注意中断配置跟官方介绍不一样

在这里插入图片描述
重新定义HAL库时钟源(RTOS默认使用Systick)
在这里插入图片描述
按照如下配置(注意这个不能取消勾选!否则OS TICK或HAK_TICK不递增!)

第三部分 项目结构

包含如下两个文件:
rttinit.c

#include "rtthread.h"
#include "rttinit.h"

#include "usart.h"

#define UartHandle huart1

extern UART_HandleTypeDef huart1;

void $Sub$$rt_hw_board_init()
{
    extern void rt_hw_board_init(void);
    extern void $Super$$rt_hw_board_init(void);
		extern void SystemClock_Config();

		HAL_Init();
		SystemClock_Config();

		MX_USART1_UART_Init();
    $Super$$rt_hw_board_init();
}

void rt_hw_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char a = '\r';

    __HAL_UNLOCK(&UartHandle);

    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            HAL_UART_Transmit(&UartHandle, (uint8_t *)&a, 1, 1);
        }
        HAL_UART_Transmit(&UartHandle, (uint8_t *)(str + i), 1, 1);
    }
}
char rt_hw_console_getchar()
{
	int ch = -1;

    if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE) != RESET)
    {
        ch = UartHandle.Instance->DR & 0xff;
    }
    else
    {
        if(__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_ORE) != RESET)
        {
            __HAL_UART_CLEAR_OREFLAG(&UartHandle);
        }
        rt_thread_mdelay(10);
    }
    return ch;
}

注意更该几系固件包
rttinit.h

#include "rtthread.h"
#include "stm32f1xx_hal.h"

void $Sub$$rt_hw_board_init(void);
void rt_hw_console_output(const char *str);
char rt_hw_console_getchar(void);

默认串口1为终端串口

完毕。直接main.c下include rttinit.h就可以。

注意当while(1)中有代码,finSH才能正常交互。不知道啥问题。
在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值