前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32F103移植RT-Thread Nano

STM32F103移植RT-Thread Nano

原创
作者头像
AnieaLanie
发布2021-12-27 10:31:39
8330
发布2021-12-27 10:31:39
举报
文章被收录于专栏:铁子的专栏铁子的专栏

1. RT-Thread Nano

1.1 RT-Thread Nano 简介

RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。

RT-Thread Nano 支持多种CPU 架构与内核源码,还具有可拆卸的 FinSH 组件,可拆卸以精简内核。

支持架构:ARM:Cortex M0/ M3/ M4/ M7 等、RISC-V 及其他。

功能:线程管理、线程间同步与通信、时钟管理、中断管理、内存管理。

1.2 STM32CubeMX添加RT-Thread系统组件

首先要获取 RT-Thread NANO软件包,https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc

然后在CubeMX中添加链接:

点击Help -> Manage embedded software packages

点击From URL,将链接地址添加到其中:

经过一段时间的解析后,点击Software Packs -> Manage Software Packs

找到RealThread一栏,下载并安装组件

1.3 STM32项目添加RT-Thread组件

STM32CubeMX添加了组件后,新建工程,点击 Software Packs -> Select Components

在其中可以看到RT-Thread的组件,添加RTOS Kernel组件

回到项目页面,可以看到最侧菜单栏里多了一个Software Packs,选上刚刚添加的 RTOS Kernel

1.4 配置工程项目

配置时钟

配置两个LED GPIO输出

配置RCC HSE高速时钟

配置系统时钟

因为RT-Thread定义了一些中断,所以在中断NVIC处取消以下中断

选择生成代码配置

选择为每部分生成独立的源文件和头文件,方便修改代码

点击Generate Code,生成项目。

1.5 添加代码

往Application/User/Core添加app_rt_thread.c文件,并添加如下代码

代码语言:javascript
复制
#include "rtthread.h"
#include "main.h"
#include "stdio.h"
 
struct rt_thread led_thread;
rt_uint8_t rt_led_thread_stack[128];
void led_task_entry(void *parameter);
 
//初始化线程函数
void MX_RT_Thread_Init(void)
{
    //初始化LED线程
    rt_thread_init(&led_thread,"led",led_task_entry,RT_NULL,&rt_led_thread_stack[0],sizeof(rt_led_thread_stack),3,20);
    //开启线程调度
    rt_thread_startup(&led_thread);
}
 
//主任务
void MX_RT_Thread_Process(void)
{
    printf("Hello RT_Thread!!!");
    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin, GPIO_PIN_RESET);
    rt_thread_delay(1000);
    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin, GPIO_PIN_SET);
    rt_thread_delay(1000);
}
 
//LED任务
void led_task_entry(void *parameter)
{
    while(1)
    {
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin, GPIO_PIN_RESET);
        rt_thread_delay(500);
        HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin, GPIO_PIN_SET);
        rt_thread_delay(500);
    }
}

往usart.c添加如下代码

代码语言:javascript
复制
/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */
​
/* USER CODE BEGIN 1 */
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}
/* USER CODE END 1 */

往main.c添加代码,并修改main函数:

代码语言:javascript
复制
/* USER CODE BEGIN PTD */
extern void MX_RT_Thread_Init(void);
extern void MX_RT_Thread_Process(void);
/* USER CODE END PTD */
​
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) {
    /* USER CODE END WHILE */
​
    /* USER CODE BEGIN 3 */
        
        MX_RT_Thread_Process();
    }
  /* USER CODE END 3 */
}
1.6 实验结果

两个LED分别以1s和2s为周期闪烁

2. 参考

[1] 基于 STM32CubeMX 添加 RT-Thread 操作系统组件(一)- 详细介绍操作步骤

[2] RT-Thread Nano 简介

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 RT-Thread Nano 简介
  • 1.2 STM32CubeMX添加RT-Thread系统组件
  • 1.3 STM32项目添加RT-Thread组件
  • 1.4 配置工程项目
  • 1.5 添加代码
  • 1.6 实验结果
  • 2. 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档