打印
[STM32MP1]

STM32 CubeIDE 使用RT-Thread Nano

[复制链接]
598|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
AD, AN, ST
1、RT-Thread Nano pack 安装

打开 STM32 CubeIDE --------->Software Packs ------------>Manager Software Packs界面






  获取 RT-Thread Nano 软件包,需要在 STM32CubeIDE 中添加 http://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc




回到 Manage software packages 界面,就会发现 RT-Thread Nano 3.1.3 软件包,选择该软件包,点击 Install Now,如下图所示(颜色填充表示已安装):







2、创建工程添加 RT-Thread Nano

2.1 、创建一个基本工程

创建一个基本的工程文件,包含2个LED灯和USART1。










2.2、配置 Nano

勾选 RT-Thread




适配 RT-Thread Nano


中断与异常处理


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





3、工程代码修改

3.1 需要修改的部分

1 、修改启动文件 startup_stm32f103rctx.s
bl main 修改为 bl entry





3.2 、配置rt_kprintf端口输出

端口映射,函数可以放在main.c文件里面。









  • /* USER CODE BEGIN 4 */
  • 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);
  •         }
  • }
  • /* USER CODE END 4 */

[color=rgb(51, 102, 153) !important]复制代码




3.3 、编写线程文件

创建一个app_rt_thread.c文件用于保存线程代码




app_rt_thread.c文件内容:


  • #include "rtthread.h"
  • #include "main.h"
  • #include "stdio.h"
  • #include <finsh.h>
  • /* 定义线程控制块 */
  • //添加LED闪烁线程
  • 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);
  • int MX_RT_Thread_Init(void)
  • {
  •         //初始化线程
  •         rt_err_t rst;
  •         rst = rt_thread_init(&led_thread,
  •                                                 (const char *)"ledshine",  /* 线程名字 */
  •                                                 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);
  •         }
  • }
  • /*
  • *************************************************************************
  • * 线程定义
  • *************************************************************************
  • */
  • static void led_thread_entry(void *parameter)
  • {
  •         while(1)
  •         {
  •                 rt_kprintf("led1_thread running,LED1_ON\r\n");
  •                 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
  •                 rt_thread_mdelay(500);
  •                 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
  •                 rt_thread_mdelay(500);
  •         }
  • }
  • MSH_CMD_EXPORT(led_thread_entry,thread running);

[color=rgb(51, 102, 153) !important]复制代码


3.4 、main.c 修改




  • /* USER CODE BEGIN Includes */
  • #include "rtthread.h"
  • extern int MX_RT_Thread_Init(void);

[color=rgb(51, 102, 153) !important]复制代码





  • int main(void)
  • {
  •   /* USER CODE BEGIN 1 */
  •   /* USER CODE END 1 */
  •   /* MCU Configuration--------------------------------------------------------*/
  •   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  •   HAL_Init();
  •   /* USER CODE BEGIN Init */
  •   /* USER CODE END Init */
  •   /* Configure the system clock */
  •   SystemClock_Config();
  •   /* USER CODE BEGIN SysInit */
  •   /* USER CODE END SysInit */
  •   /* Initialize all configured peripherals */
  •   MX_GPIO_Init();
  •   MX_USART1_UART_Init();
  •   /* USER CODE BEGIN 2 */
  •   MX_RT_Thread_Init();
  •   /* USER CODE END 2 */
  •   /* Infinite loop */
  •   /* USER CODE BEGIN WHILE */
  •   while (1)
  •   {
  •           HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_2);
  •           rt_kprintf("led1_thread TEST\r\n");
  •           rt_thread_mdelay(100);
  •     /* USER CODE END WHILE */
  •     /* USER CODE BEGIN 3 */
  •   }
  •   /* USER CODE END 3 */
  • }

[color=rgb(51, 102, 153) !important]复制代码


串口输出:



使用特权

评论回复
沙发
belindagraham| | 2022-11-14 20:43 | 只看该作者
拿rtthread的nano精简版本进行开发。原因是其配合stm32cubemx开发太方便了。

使用特权

评论回复
板凳
pmp| | 2022-11-14 20:53 | 只看该作者
RT-THREAD STM32F的中断程序怎么写  

使用特权

评论回复
地板
pixhw| | 2022-11-14 21:14 | 只看该作者
对于资源少的STM32芯片,采用RT-THREAD NANO实现嵌入式实时操作系统是一个可行性选择

使用特权

评论回复
5
febgxu| | 2022-11-14 21:46 | 只看该作者
不错,最近开始学习RT-Thread操作系统相关的知识了。

使用特权

评论回复
6
earlmax| | 2022-11-14 22:33 | 只看该作者
RT-THREAD提供了用于STM32CUBEIDE/STM32CUBEMX的支持包,从而可以搭建资源占用最小化的Nano系统。

使用特权

评论回复
7
mollylawrence| | 2022-11-15 18:46 | 只看该作者
rt-thread是中国人自己开发的实时操作系统,和ucos类似

使用特权

评论回复
8
updownq| | 2022-11-15 19:41 | 只看该作者
在STM32 CubeIDE中使用RT-Thread Nano的步骤这么多吗  

使用特权

评论回复
9
lzmm| | 2022-11-15 20:35 | 只看该作者
怎么在STM32CubeMX中添加RT-Thread Nano内核?

使用特权

评论回复
10
pmp| | 2022-11-15 21:29 | 只看该作者
无论是FreeRTOS还是RT-Thread Nano,STM32 CubeIDE都可以方便地下载使用。

使用特权

评论回复
11
febgxu| | 2022-11-15 22:20 | 只看该作者
rt-thread可以移植到STM32上跑这个系统,rt-thread在发展阶段花费了大量精力和时间让这个系统更好的在stm32系列芯片上运行。

使用特权

评论回复
12
AloneKaven| | 2022-11-16 20:10 | 只看该作者
RT-THREAD和FreeRTOS哪个资源占用低啊?

使用特权

评论回复
13
gygp| | 2022-11-16 20:52 | 只看该作者
使用STM32官方推荐得FREERTOS可以吗?   

使用特权

评论回复
14
macpherson| | 2022-11-16 22:05 | 只看该作者
cubeMx 5版本可以直接用addition功能增加软件包,里面就有对rt-thread的支持。

使用特权

评论回复
15
漫过岁月| | 2022-11-24 23:20 | 只看该作者
期待楼主多分享分享这种教程,真的很好用

使用特权

评论回复
16
可爱的白兔先生| | 2022-11-24 23:52 | 只看该作者
cubeIDE真的不是很顺手啊,这个能用keil

使用特权

评论回复
17
情和欲| | 2022-11-25 00:24 | 只看该作者
RT-Thread Nano是什么,是开发板么?

使用特权

评论回复
18
喜爱弄人| | 2022-11-25 00:56 | 只看该作者
还得是国产的RTT啊,开发就是简单

使用特权

评论回复
19
极客晨星| | 2022-11-25 01:28 | 只看该作者
这个还得跑RTT啊?话说,RTT难不难上手呀

使用特权

评论回复
20
林间有新绿| | 2022-11-25 02:00 | 只看该作者
唉,看HAL好繁琐,就虽然容易理解,但是要跳转好几层,好麻烦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

3918

帖子

1

粉丝