IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 02_MDK Keil STM32CubeMx 不同开发环境下RT_Thread nano移植方法 -> 正文阅读

[嵌入式]02_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程序
    在这里插入图片描述
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 11:05:27  更:2021-07-14 11:09:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 8:08:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码