ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RT-Thread nano 3.1.3 添加控制台与 FinSH

2020-01-15 11:40:49  阅读:992  来源: 互联网

标签:RT rt Thread nano UART huart1 thread Init GPIO


一、使用STM32CubeMX 5.5.0创建rt-thread nano工程

1.选择芯片,潘多拉开发板芯片为STM32L475VET6

在这里插入图片描述

2.设置PE7、PE8、PE9为推挽输出(用作验证)

在这里插入图片描述

3.添加RT-Thread nano 3.1.3 kernel

在这里插入图片描述

4.取消自动生成HardFault_Handler、PendSV_Handler、SysTick_Handler 代码

在这里插入图片描述

5.生成MDK工程文件

在这里插入图片描述

6.使用keil打开MDK工程,添加LED闪烁线程

在这里插入图片描述
在这里插入图片描述

//引入头文件
#include <rtthread.h>
//初始化静态线程结构体和线程栈
static struct rt_thread led_thread;
static char led_thread_stack[256];
//编写线程入口函数
static void led_thread_entry(void *parameter)
{
	while(1)
	{
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_RESET);
		rt_thread_mdelay(500);
		HAL_GPIO_WritePin(GPIOE, GPIO_PIN_7, GPIO_PIN_SET);
		rt_thread_mdelay(500);
	}
}
//测试线程
int main(void)
{
  HAL_Init();
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);
	rt_err_t rst;
	rst = rt_thread_init(&led_thread,
						"ledshine",
						led_thread_entry,
						RT_NULL,
						&led_thread_stack[0],
						sizeof(led_thread_stack),
						RT_THREAD_PRIORITY_MAX-2,
						20);
	if(rst == RT_EOK)
	{
		rt_thread_startup(&led_thread);
	}
}
7.编译成功,下载程序,LED正常闪烁!RT-Thread nano 3.1.3内核移植成功。

在这里插入图片描述

二、移植finsh组件

1.未移植finsh组件的工程目录结构如下

在这里插入图片描述

2.在STM32CubeMX中添加rt-thread shell组件

在这里插入图片描述

3.生成代码,工程结构如下:

在这里插入图片描述

4.在board.c\color{#FF3030}{board.c}board.c中增加以下代码
4.1引入头文件
#include "stm32l4xx_hal.h"
4.2添加代码
static UART_HandleTypeDef huart1;

static void MX_USART1_UART_Init(void)
{
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  if (HAL_UART_Init(&huart1) != HAL_OK)
  {
    ;
  }
}
//INIT_BOARD_EXPORT(MX_USART1_UART_Init);

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);
        }
}

char rt_hw_console_getchar(void)
{
        int ch = -1;
        if (__HAL_UART_GET_FLAG(&huart1, UART_FLAG_RXNE) != RESET)
        {
                ch = huart1.Instance->RDR & 0xff;
        }
        else
        {
                if(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_ORE) != RESET)
                {
                        __HAL_UART_CLEAR_OREFLAG(&huart1);
                }
                rt_thread_mdelay(10);
        }
        return ch;
}
4.3在rt_hw_board_init()中加入MX_USART1_UART_Init();
void rt_hw_board_init()
{
    /* System Clock Update */
    SystemCoreClockUpdate();
    /* 添加串口初始化代码 */
	MX_USART1_UART_Init();
    
    /* System Tick Configuration */
    _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

    /* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif

#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
5.成功

在这里插入图片描述

超级大洋葱806 发布了9 篇原创文章 · 获赞 2 · 访问量 1143 私信 关注

标签:RT,rt,Thread,nano,UART,huart1,thread,Init,GPIO
来源: https://blog.csdn.net/u014779536/article/details/103985723

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有