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)函数
#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
- 下载RT-Thread Studio 下载地址:https://www.rt-thread.org/page/studio.html
- 新建nano项目
- 选择对应芯片
4.在CubeMx Setting中配置时钟和外设然后保存即可,配置方法和直接在STM32cubemx中配置HAL裸机工程一样,不懂裸机工程配置可以参考06 CubeMX HAL库stm32作从机 硬件I2C中断接收无BUG程序
|