《RT-Thread Nano 笔记》: 1、利用Cube MX+MDK内部PACK移植

     前言:个人使用以下方式移植,若使用Cube内部的RT软件包,则每次生成的时候都会重新加载RT软件包,之前编写的私有程序会丢失,截至2020年底,不知后面会不会改变。

一:创建基础Cube MX工程

系统滴答定时器由RTOS使用,所以HAL库的时基系统改为使用其它定时器。
在这里插入图片描述

Cube MX默认使能这三个中断,使用RTOS后需要去除默认使能,由RTOS接管。
在这里插入图片描述

二:使用MDK内部Manage Run-Time Environment 添加Nano源码

在这里插入图片描述

三:工程适配

1、在main头文件添加#include <rtthread.h>
2、删除/隐藏main里Cube 生成的HAL_Init();SystemClock_Config();

  /* 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();

使用新的函数封装系统HAL初始化函数:

void SYS_Init(void)
{
  HAL_Init();
  SystemClock_Config();
  //此函数内只封装这两个函数,一个是hal库初始化函数,一个是系统时钟配置函数
}

使用新的函数封装外设初始化函数:

void Peripheral_Init(void)
{
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  //以后有新的硬件初始化函数都放在此函数内
}

封装好后,在board.c中用extern声明,并在rt_hw_board_init中调用
仔细看

四:Nano配置

RT-Thread-Nano配置

五:在 RT-Thread Nano 上添加控制台与 FinSH

移植控制台/FinSH
(一)控制台
在main下方添加函数,实现控制台字符输出

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')
		{
			HAL_UART_Transmit(&huart1,(uint8_t *)&a,1,1);
		}
		HAL_UART_Transmit(&huart1,(uint8_t *)(str+i),1,1);
	}
}

(二)FinSH
在main下方添加函数,实现控制台字符输入

/***

控制台获取一个字符,即在该函数中实现 uart 获取字符,
可以使用查询方式获取(注意不要死等,在未获取到字符时,需要让出 CPU),也可以使用中断方式获取
**/
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;
}

STM32F103RC工程文件代码链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值