01_MDK Keil STM32CubeMx 不同开发环境下RT_Thread nano移植方法

02_RTT_Thread nano移植

一.RT-Thread 移植

方法一 源文件拷贝法

1.准备一份裸机工程
2.到rt-thread官网下载rt-thread-3.1.3_nano 源文件(https://www.rt-thread.org/page/download.html)
3.拷贝整个nano文件夹到裸机工程中
4.打开keil工程 新建RTThread/kernel;RTThread/port;RTThread/finsh 三个文件夹
5.在User 文件夹中添加 nano/bsp 文件夹的board.c ;rtconfig.h 文件
6.在RTThread/kernel中添加 nano/libcpu/cortex-m3 文件夹的cpuport.c;context_rvds.S 文件
7.在RTThrad/port中添加 nano/src 文件夹的全部文件
8.在RTThread/finsh中添加 nano/components/finsh 所有.c文件
9.打开Keil中Options for Target/C/C++ 加入.h文件路径
nano/include;nano/include/libc;nano/components/finsh;nano/bsp
10. 注释掉rtconfig.h第7行代码  (// #include "RTE_Components.h")
11.注释掉stm32f10x_it.c 第33行(void HardFault_Handler(void)),74行(void PendSV_Handler(void)),78行(void SysTick_Handler(void))的函数
12.在main.c 中添加头文件 #include <rtthread.h>
13.在board.c文件中加入rt_hw_console_output(const char *str) ;char rt_hw_console_getchar(void)函数

方法二 keil软件包添加

1.准备裸机工程,keil中下载RTThrad软件包 
2.keil中点击Manage Run-Time Environment 打钩 RTOS/RTThread/Kernel;shell 
3.注释掉stm32f10x_it.c 第33行(void HardFault_Handler(void)),74行(void PendSV_Handler(void)),78行(void SysTick_Handler(void))的函数
4.在main.c 中添加头文件#include <rtthread.h>
5.在board.c文件中加入头文件#include "usart.h" 并添加void rt_hw_console_output(const char *str) ;char rt_hw_console_getchar(void)函数
  • HAL库
#include "usart.h"
void rt_hw_console_output(const char *str)
{
	rt_enter_critical();
	while(*str!= '\0')
	{
		if(*str =='\0')
		{
			HAL_UART_Transmit(&huart1,(uint8_t*)'\r',1,10000);
		}
		HAL_UART_Transmit(&huart1,(uint8_t*)(str++),1,1000);
	}
	rt_exit_critical();
}

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;
}
  • 标准库
#include "usart.h"
void rt_hw_console_output(const char *str)
{
  rt_enter_critical();
	
	while(*str!='\0')
	{
    if (*str == '\n')
    {
       USART_SendData(USART1, '\r');
	     while(USART_GetFlagStatus(USART1, USART_FLAG_TC)== RESET);
    }
		USART_SendData(USART1, *(str++));
	  while(USART_GetFlagStatus(USART1, USART_FLAG_TC)== RESET);
	}
  rt_exit_critical();
}


char rt_hw_console_getchar(void)
{
    int ch = -1;
    if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
    {
        ch = (int)USART_ReceiveData(USART1);
    }
    else
    {
        if(USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET)
        {
            USART_ClearFlag(USART1,USART_FLAG_TC);
        }
        rt_thread_mdelay(10);
    }
    return ch;  
}

方法三 CubeMX 中添加 RT_Thread 软件包

博客链接:an0041-nano-port-cube在这里插入图片描述

二.加入finsh组件

FinSH简介

1.作用:RT的命令行组件,用于调试或查看系统信息.
2.通信方式:串口/以太网/USB

开启方法

1.加入finsh宏   #define RT_USING_FINSH
2.加入 char rt_hw_console_getchar(void) 函数
3.注释掉 #include "usart.h"  void uart_init(u32 bound)串口初始化的
//  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
4.在 board.c 中 void rt_hw_board_init()  加入硬件初始化函数 uart_init(115200);

三.移植过程中编译报Warning如何处理

1. 报obj警告

错误: ...\rt-thread-3.1.3_nano\src\object.c(262): warning:  #550-D: variable "obj" was set but never used
    解决: 打开 rtconfig.h 中48行 #define RT_DEBUG 宏

四.方法四 在RTT官方IDE中创建工程(更简单的办法)

博客地址:在 RT-Thread Studio 上使用 RT-Thread Nano

  1. 下载RT-Thread Studio 下载地址:https://www.rt-thread.org/page/studio.html
  2. 新建nano项目
    在这里插入图片描述
  3. 选择对应芯片
    在这里插入图片描述
    4.在CubeMx Setting中配置时钟和外设然后保存即可,配置方法和直接在STM32cubemx中配置HAL裸机工程一样,不懂裸机工程配置可以参考06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序
    在这里插入图片描述
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值