STM32移植CLion嵌入式开发RT-Thread移植CubeMx·

使用Clion移植RT-Thread嵌入式操作系统

Hugh

Hugh

1121 0

前言

Clion作为一款跨平台的 C/C++工程IDE,因其强大的功能、优异的人机界面以及丝滑的用户体验广受程序员的喜爱。RT-Thread作为一款国产开源嵌入式操作系统,从2006年发展至今展现了强大的生命力,组件丰富、安全易用、高度可伸缩性以及跨多款芯片平台等,自然受到众多嵌入式工程师的青睐,称之为目前国内第一嵌入式操作系统都不为过。因此,本节详细介绍使用 Clion 移植 RT-Thread进行嵌入式开发。

1.前期准备

1.运行环境windows10; 2.stm32f103x开发板一套; 3.安装好STM32CubeMX; 4.安装好Clion;

其中,需配置Clion满足嵌入式开发要求,如果没有安装可以参考《使用 CLion 进行嵌入式开发》

2.预期结果

使用 CubeMX 配置好工程,移植 RT-Thread 操作系统。使用 Clion 运行工程,编译、调试,并下载至 STM32F103RC开发板运行,通过串口输出调试信息。

3.使用CubeMX生成工程

step1:运行 CubeMX ,新建工程并选择芯片 STM32F103RCTx,如下图。

step2:系统时钟配置为外部时钟,如下图。

step3:使能下载调试接口 SWD,如下图,后续需要通过该接口下载程序至单片机。

step4:使能串口 uart1,如下图所示,串口用于输出调试信息。

step5: 安装 RT-thread 软件包(摘录于RTT官方教程) 要获取 RT-Thread Nano 软件包,需要在 CubeMX 中添加 https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

check 通过后,点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 3.1.3 软件包,选择该软件包,点击 Install Now,如下图所示:

点击安装之后,弹出 Licensing Agreement ,同意协议,点击 Finish,如下图所示:

等待安装完成,成功安装后,版本前面的小蓝色框变成填充的黄绿色,现象如下图所示:

至此,RT-Thread Nano 软件包安装完毕,退出 Manage embedded software packages 界面,进入 CubeMX 主界面。

step6:将 RT-thread添加至工程中,如下图。

其中,RT-Thread Nano 软件包中包含 kernelshell 两个部分,仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;选择 kernelshell 表示在使用 RT-Thread Nano 的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码,可按需选择。

如下图所示,选中 RT-Thread,其中③处为操作系统的参数设置,我们不做修改,保持默认值。

step7:RT-Thread 操作系统重定义 HardFault_Handler PendSV_Handler SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt , Pendable request , Time base :System tick timer

step8:配置工程

上图中,①、②分别为工程名字和存储地址,根据自己需要填写。③比较关键,由于后续需要使用clion,因此选择SWSTM32。因下载最新的固件版本需要时间,故这里取消④,点击⑤生产工程。

4.使用Clion打开工程并修改代码

step1:使用 clion打开工程,如下图所示,点击①Open or Import ,选择工程目录下的后缀名为 .ioc的文件,依次点击③、④。

step2:将 main.hmain()函数中所有初始化函数挪至 board.c文件的 rt_hw_board_init()函数中,如下图。

更新后,rt_hw_board_init()函数代码如下:

/**
 * This function will initial your board.
 */
void rt_hw_board_init()
{
    HAL_Init();  //from main
    SystemClock_Config();//from main
    /* System Clock Update */
    SystemCoreClockUpdate();

    /* System Tick Configuration */
    _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

    /* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif

#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif

    /* Initialize all configured peripherals */
    MX_GPIO_Init();//from main
    MX_USART1_UART_Init();//from main
}

step3:同时需将头文件 #include "stm32f1xx_hal.h", 上述挪动的函数及函数体添加至 board.c文件中:

#include "stm32f1xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
void Error_Handler(void);

step4:Clion 一般使用 gcc 编译器,而不是像 Keil-MDK 使用 ARMCC ,因此,需要将 startup 文件夹下 startup_stm32fxx.s 文件中 bl main 改成 bl entry该步骤尤为重要

step5:需要使用 RT-Threadrt_kprintf()打印调试信息至串口 uart1,需重定义函数 rt_hw_console_output(const char *str)如下,并将该函数放在 board.c文件中。

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')
        {
            HAL_UART_Transmit(&huart1, (uint8_t *)&a, 1, 1);
        }
        HAL_UART_Transmit(&huart1, (uint8_t *)(str + i), 1, 1);
    }
}

step6:main()函数中添加头文件 #include <rtthread.h>,并添加串口输出测试代码:

#include <rtthread.h>
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
 rt_kprintf("\r\nbuild RT-Thread on clion by www.rymcu.com!\r\n");
  while (1);
}

5.使用Clion编译工程并查看测试结果

点击 Build-->Rebuild Project完成代码编译,结果如下图②所示成功生成 .hex,.bin可执行文件,表明移植成功。

将上述可执行代码下载至开发板,串口 uart1连接至 PC,通过串口调试助手观察测试结果。串口调试助手设置为:115200--N--8--1

6.小节

至此,完成了 Clion移植 RT-thread嵌入式操作系统全过程:《github完整工程代码》

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人