在STM32F103C8T6上使用RT_Thread Nano移植控制台和Finsh

news2024/9/22 21:17:12

一、移植环境

开发环境:Keil MDK 5.33

硬件平台:STM32F103C8T6 

RT_Thread版本:RT-Thread Nano V3.1.5

二、在RT-Thread Nano V3.1.5添加uart控制台

1.需要在rtconfig.h开启以下两个宏

        1)#define RT_USING_CONSOLE

        2)#define RT_CONSOLEBUF_SIZE          128

2. 实现串口初始化如下代码,并在board.c文件的rt_hw_board_init()函数中调用UART_Init();

static UART_HandleTypeDef UART1_Handler;
void UART_Init(void)
{
    //UART 
    UART1_Handler.Instance = USART1;					  //USART1
    UART1_Handler.Init.BaudRate     = 115200;
    UART1_Handler.Init.HwFlowCtl    = UART_HWCONTROL_NONE;
    UART1_Handler.Init.Mode         = UART_MODE_TX_RX;
    UART1_Handler.Init.OverSampling = UART_OVERSAMPLING_16;
    UART1_Handler.Init.WordLength   = UART_WORDLENGTH_8B;
    UART1_Handler.Init.StopBits     = UART_STOPBITS_1;
    UART1_Handler.Init.Parity       = UART_PARITY_NONE;
    HAL_UART_Init(&UART1_Handler);					    //HAL_UART_Init()
}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
    //GPIO¶Ë¿ÚÉèÖÃ
    GPIO_InitTypeDef GPIO_Initure;

    if(huart->Instance == USART1) 
    {
        __HAL_RCC_GPIOA_CLK_ENABLE();				
        __HAL_RCC_USART1_CLK_ENABLE();				

        GPIO_Initure.Pin = GPIO_PIN_9;				//PA9
        GPIO_Initure.Mode = GPIO_MODE_AF_PP;		
        GPIO_Initure.Pull = GPIO_PULLUP;			
        GPIO_Initure.Speed = GPIO_SPEED_FREQ_HIGH;		
        HAL_GPIO_Init(GPIOA, &GPIO_Initure);	   	

        GPIO_Initure.Pin = GPIO_PIN_10;				//PA10
		GPIO_Initure.Mode = GPIO_MODE_INPUT;		
        GPIO_Initure.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOA, &GPIO_Initure);	   	
    }
}

3. 实现控制台输出函数app_console_output();并在board.c文件的rt_hw_console_output(const char *str)函数里调用

void app_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char a = '\r';

    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            HAL_UART_Transmit(&UART1_Handler, (uint8_t *)&a, 1, 1);
        }
        HAL_UART_Transmit(&UART1_Handler, (uint8_t *)(str + i), 1, 1);
    }
}

至此就完成uart控制台的输出打印了,现在就可以在程序中使用如rt_kprintf("hello LED!\n");看到串口的输出打印了;

验证结果

 三、Finsh移植

1. 将RT_Thread Nano源码目录下的components文件夹中的finsh里面所有文件添加到工程中

2. 在rtconfig.h中包含如下文件

        #include "finsh_config.h" 

3. 实现控制台字符输入函数app_console_getchar();并在finsh_port.c文件中的rt_hw_console_getchar(void)函数里面调用此函数

char app_console_getchar(void)
{
    /* Note: the initial value of ch must < 0 */
    int ch = -1;

	if (__HAL_UART_GET_FLAG(&UART1_Handler, UART_FLAG_RXNE) != RESET)
    {
        ch = UART1_Handler.Instance->DR & 0xff;
    }
    else
    {
        if(__HAL_UART_GET_FLAG(&UART1_Handler, UART_FLAG_ORE) != RESET)
        {
            __HAL_UART_CLEAR_OREFLAG(&UART1_Handler);
        }
        rt_thread_mdelay(10);
    }
    return ch;
}

至此Finsh已经移植完成,可以在控制台进行命令输入了

验证结果

移植完成,如果你的控制台还不能实现命令的输入,看到相应的结果,请检查各个函数的名称是否正确,也记得再检查一遍串口的接收引脚初始化是否正常。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ITK (1)窗宽窗位的意义与设置

背景与意义 医学图像与传统可视化图像相比&#xff0c;其具有更大的“灰度”范围。如&#xff0c;普通图像&#xff08;灰度图像&#xff09;的灰度范围一般是256级&#xff08;即图像中最亮的点的灰度值定义为0&#xff0c;最亮的定义为255&#xff0c;也就是2^8&#xff0c;…

【图像处理OpenCV(C++版)】——2.1 深入理解OpenCV之Mat类及相关成员函数

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

【论文阅读31】《OptCuts: Joint Optimization of Surface Cuts and Parameterization》

目录 一些疑惑 0 引言 1 introduction 2 related work 2.1 parameterization with fixed connectivity 2.2 Separate Cut Computation 3 problem statement ​编辑​ 3.1 数学形式1 3.2 数学形式2 3.3 能量函数 3.3.1 接缝线长度&#xff08;归一化&#xff09;&am…

程序员们,你会考虑使用中文编程吗?

众所周知&#xff0c;编程语言有一条无形的“鄙视链”。 Java和C#相互不服&#xff0c;并且看不起写Python的&#xff0c;Python看不起PHP&#xff0c;PHP看不起前端。而中文编程就在这个语言“鄙视链”的底端艰难生存。 有人对中文编程嗤之以鼻&#xff0c;相比于“人生苦短…

免费网课题库系统接口

免费网课题库系统接口 本平台优点&#xff1a;免费查题接口搭建 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a;题库后台http://daili.jueguangzhe.cn/ 题…

[附源码]计算机毕业设计JAVA职业中介信息管理系统

[附源码]计算机毕业设计JAVA职业中介信息管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

Java进阶——IO流(I)

文章目录IO流一、文件1.1、文件流1.2、常用的文件操作1.2.1、创建文件对象相关构造和方法1.2.2、获取文件的相关信息1.2.3、目录的操作和文件删除二、IO流原理及流的分类2.1、Java IO流的原理2.2、流的分类2.3、IO流常用的类2.3.1、InputStream&#xff1a;字节输入流FileInput…

SSH 远程连接协议详解

一、SSH 协议 1、SSH 协议简介 SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录会话和其他网络服务提供安全性的协议。 SSH使用最多的是远程登录和传输文件,实现此功能的传统协议都不安全(ftp、telnet等),因为它们使用明文传输数据,而SSH在传输过程中的…

【云原生.docker】docker部署Redis集群

1、镜像拉取 docker pull redis:5.0.5 2、容器启动 docker run -d --nameredis-6400 --net host --privilegedtrue -v /home/dev/toms/docker_redis/data/redis-6400:/data redis:5.0.5 --cluster-enabled yes --appendonly yes --port 6400 & docker run -d --nameredis-…

在抖音及一些直播上,如何进行违禁词在线检测呢?

本文首发于&#xff1a;行者AI谛听 随着直播行业的兴起&#xff0c;越来越多的网红主播纷纷加入&#xff0c;平台的审核能力也面临着巨大的挑战&#xff0c;相对于平台的严格监管&#xff0c;很多主播也需要进行深层学习&#xff0c;避免在直播中出行违规。 其实很多主播在直播…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java小型餐饮综合管理系统j1c7m

首先选择计算机题目的时候先看定什么主题&#xff0c;一般的话都选择当年最热门的话题进行组题&#xff0c;就比如说&#xff0c;今年的热门话题有奥运会&#xff0c;全运会&#xff0c;残运会&#xff0c;或者疫情相关的&#xff0c;这些都是热门话题&#xff0c;所以你就可以…

文档对象模型 (DOM) :初学者介绍和指南

果你已经使用JavaScript一段时间了&#xff0c;你可能相当熟悉DOM&#xff08;文档对象模型&#xff09;和CSSOM&#xff08;CSS对象模型&#xff09;脚本。除了 DOM 和 CSSOM 规范定义的接口之外&#xff0c;CSSOM 视图模块中还指定了方法和属性的子集&#xff0c;从而提供了用…

Vue3知识点之数据侦测

Vue 的核心之一就是响应式系统&#xff0c;通过侦测数据的变化&#xff0c;来驱动更新视图。 实现可响应对象的方式 通过可响应对象&#xff0c;实现对数据的侦测&#xff0c;从而告知外界数据变化。实现可响应对象的方式&#xff1a; getter 和 setterdefinePropertyProxy …

IB课程工具书单,助力你考高分

亚马逊汇总了近期最畅销的IB课程工具书单&#xff0c;该书单以购买量和评分进行综合排名。其中的许多书籍都是IBDP学生可选用的绝佳工具书&#xff01;1、Physics for the IB Diploma Coursebook 这本书涵盖了IB 2016年首考的物理课程要求。这本课程手册的第六版针对IB物理教学…

写出go程序

1.安装go包 下载地址&#xff1a;https://golang.google.cn/dl/ 2.安装vscode 下载地址&#xff1a;https://code.visualstudio.com/ 安装好后 以打开文件夹形式打开.go文件。 该文件自己创建一个即可。

怎么视频提取音频文件?分享这3种简单实用的提取方法

不知道大家平时用手机刷视频的时候&#xff0c;会不会被一些好听的背景音乐给吸引了呢&#xff1f;这些背景音乐大多都是网友们自己合成导入视频上传的&#xff0c;可能在许多音乐平台都不能找到音源播放。遇到这样的情况&#xff0c;大家一定都很苦恼吧&#xff1f;但其实&…

Fluorescein(5-isomer)-DBCO,2054339-00-1,二苯基环辛炔-FITC(5-异构体)

一、理论分析&#xff1a; 中文名&#xff1a;二苯基环辛炔-FITC(5-异构体)&#xff0c;二苯并环辛炔-荧光素(5-异构体) 英文名&#xff1a;DBCO-FITC(5-isomer)&#xff0c;5-FITC-DBCO&#xff0c;Fluorescein(5-isomer)-DBCO CAS号&#xff1a;2054339-00-1 化学式&#xff…

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)实践技术应用

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

代码随想录第一天

专题&#xff1a;数组 题目&#xff1a;二分查找 题目要求&#xff1a; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。…

信号相角位移量的计算与信号位移计算-附Matlab代码

一、初始相角的位移量 在信号处理中正弦信号经常表示为 x(n)Acos⁡(2πf0n/fsθ)x\left( n \right)A\cos (2\pi {{f}_{0}}n/{{f}_{s}}\theta )x(n)Acos(2πf0​n/fs​θ)&#xff0c;其中 fs{{f}_{s}}fs​是采样频率&#xff0c; f0{{f}_{0}}f0​是正弦信号的频率&#xff0c;…