RT-Thread控制台串口号切换到uart2方法

RT-Thread:4.0.3

由于默认的串口1使用起来不是很方便,研究下如何切换到串口2,记录如下

1、修改配置文件rtconfig.h

#define RT_CONSOLE_DEVICE_NAME "uart1"

改成

#define RT_CONSOLE_DEVICE_NAME "uart2"

 

注释掉下面一行

//#define BSP_USING_UART1

改成
#define BSP_USING_UART2

 

2、修改stm32f4xx_hal_msp.c文件

在函数HAL_UART_MspInit()中添加串口2的配置

  else if(huart->Instance==USART2)
  {
  /* USER CODE BEGIN USART2_MspInit 0 */

  /* USER CODE END USART2_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USART2_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**USART2 GPIO Configuration
    PA2     ------> USART2_TX
    PA3     ------> USART2_RX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN USART2_MspInit 1 */

  /* USER CODE END USART2_MspInit 1 */
  }

 

此处需要特别注意的是:

rtthread之所以没有把uart2加进去,是因为PA2、PA3两个管脚复用了,即可以用做串口2,也可以用作其他(如网口的ETH_MDIO、PWM_DAC)查看原理图可以发现。

还没有细看此代码中网口是否已经用到。如果用到网口上,那么这个串口2就不能再使用了

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述:这是一个数据采集的装置,本身没有什么亮点。主要是基于RT-Thread操作系统,驱动NB模块-BC26来实现数据的发送。值得一说的是RT-Thread本身有BC-26的驱动包。不过这里并没有使用,而是使用at-device软件包来驱动的BC26。因此稍微改一改内部的代码,就能驱动其他的AT设备。话回正题,我使用at-thread的目的就是驱动BC26建立TCP或UDP连接,使得板卡采集得到的数据能发送到我电脑上的TCP Server。当然,除了数据上传之外,也能实现上位机控制板卡。还有则是在代码中发现利用邮箱+消息队列来进行数据传输和通信真的很爽。 开发环境:硬件部分 ART-Pi (主控) BC-26 (NB-IOT模块) BHT11 (温湿度传感器) RT-Thread版本 RT-Thread V4.0.2 开发工具及版本 RT-Thread Studio V2.0.0 :RT-thread推出的IDE,免费。 Putty V0.73:开源免费的一款工具,我纯把他当成串口助手使用 花生壳 V5 :内网穿透工具。 网络调试助手(MetAssist V4.3.13):网上下的,应该比较出名。 RT-Thread使用情况描述:内核部分 调度器 消息队列 邮箱 组件部分 at_device UART 硬件框架描述先附图一张: 很简单的一个框架,总共只有主控,传感器,执行器,以及比较重要的云平台,这四大部分。传感器可以是任意传感器,只要发送的数值种类不一次性超出两种即可。执行器我在这里使用了板载的LED灯充当。云平台则是利用网络调试助手搭了一个TCP Server来充当。由于我个人没有固定外网IP,所以我如果直接使用网络助手,是无法将ART采集得到的数据传输到我的电脑上的。因此我利用花生壳将我的IP映射到了外网,使得板卡能连接到我创建的TCP Server上。 软件框架说明流程图如下: 本人并不是很会画流程图,所以辛苦大家看一看介绍吧。 其实在这个板卡中是要烧两套程序的,一套是bootloader负责初始化QSPI并且运行QSPI内的程序。所以这份程序是下载到片内Flash的。另一份则是具体的功能添加的比较多的程序。他是运行在QSPI中的。这两个程序必须先运行BootLoader否则QSPI中的程序是无法运行的。而由于BootLoader的职责是让程序从0x08000000跳转到0x90000000运行所以,如果QSPI中没有其他程序的话,Bootloader只会运行一次,表现的现象就是只打印一个LOGO。 其实在RT-Thread中其实有BC26的驱动包,可以直接拿来用,不需要自己再对BC26进行初始化,但是我这里使用的是at_device驱动包,所以自己要写一部分的代码,进行初始化。创建邮箱和消息队列则是为了两者相互配合一起实现发送同步消息的功能。 数据采集线程和数据发送线程之间使用消息队列+邮箱的方式实现消息同步,在这里数据采集线程可以有多个,而数据发送线程我这设立了一个。发送线程会将接收到的信息都发送到云平台中。 数据接收则是利用at_device中的代码实现的。利用内部的代码还可实现云平台发送消息控制板卡上的LED灯或者其他执行器。 软件模块说明消息队列+邮箱的消息同步方式 在使用消息队列+邮箱的方式来进行线程间消息同步的话需要先创建一个结构体,一个动态邮箱,一个消息队列。然后对结构体进行填充后利用消息队列发送出去,具体请看以下代码示例: //创建结构体部分 struct msg //消息队列发送此结构体的地址来实现线程间的同步 { char *str; int vol; float data1; int data2; struct rt_mailbox* ack; }; //创建动态邮箱部分 rt_mailbox_t mail_box1 = RT_NULL; //创建二氧化氮线程应答邮箱控制块 rt_mailbox_t mail_box2 = RT_NULL; //创建二氧化硫线程应答邮箱控制块 rt_mailbox_t mail_box3 = RT_NULL; //创建粉尘数据线程应答邮箱控制块 rt_mailbox_t mail_box4 = RT_NULL; //创建备用线程邮箱控制块 /**************创建多个应答邮箱******************/ int move_mail_box_sample(void) { mail_box1 = rt_mb_create("mail_box1", 1, RT_IPC_FLAG_FIFO); //创建动态邮箱1 mail_box2 = rt_mb_create("mail_box2", 4, RT_IPC_FLAG_FIFO); //创
RT-Thread作品秀】远程调试终端作者:钟良涛 概述本设计灵感来源于调试人员出差调试设备遇到困难时,提供指导的工程师可以远程实时查看调试数据,以提供指导。本设计实现了一个远程调试助手,ART-Pi接收到无线串口按一定协议发送的数据后,将数据解析并打包为json格式发送给订阅该话题的MQTT上位机。搭配ART-Pi Mate可实现多种通信接口的调试。 开发环境硬件:ART-Pi ART-Pi Mate(自主设计) RT-Thread版本:4.0.3 开发工具及版本:RT-Thread Studio 2.0.0 PyCharm20.2 Python3.7 RT-Thread使用情况概述组件:finsh、lwIP、SPI、串口、Pin 软件包:cjson、wlan_wiced、phaomqtt、AT command 内核:信号量、多线程 硬件框架硬件框图如上图所示,硬件部分由ART-Pi和ART-Pi Mate和以CC2530无线透传模块模拟的调试设备组成。其中ART-Pi Mate为专为ART-Pi设计的扩展板,包含LCD、UART、NRF24L01等功能。 以CC2530无线透传模块模拟待调试的设备,将该模块连接到PC机,按照固定的协议格式发送数据包到ART-Pi Mate上焊接的CC2530无线透传,ART-Pi以串口中断的方式进行数据读取并解析,随后将数据打包为Json格式通过Wifi发送至MQTT上位机。 软件框架说明该应用中软件分为嵌入式软件部分和桌面端软件。嵌入式软件实现调试终端的数据接收、解析、打包、发布等功能,桌面端软件实现数据的接收和显示功能。软件流程如上图所示,调试终端数据处理线程对CC2530无线透传模块发送的数据进行解析、打包,然后由MQTT客户端线程进行数据发布。桌面端软件的MQTT客户端线程订阅调试终端发送的话题,然后通过信号槽的方式通知Qt界面线程刷新界面以显示数据。 软件模块说明数据接收模块: 数据接收模块通过串口中断的方式实现,首先以中断的方式打开串口设备,然后每当有数据达到时,触发相应的中断回调函数,在中断回调函数里发送有数据到达的信号量,通知数据处理线程进行数据读取。 数据解包: 数据包的格式定义如下: 以状态机的方式进行数据解包,状态机转移图如下图所示: 数据打包: 该设计将JSON打包为如下格式: 演示效果演示视频: 比赛感悟通过本次比赛熟悉了rt-thread的操作系统以及rt-thread studio的使用方式,被rt-thread优雅的设计所折服。通过这次比赛,使用了rt-thread的线程、信号量、设备模型、组件、软件包等功能,在搭配rt-thread studio进行开发时,是非常的便捷的,直接在设置中打开对应的功能,rt-thread studio就会自动下载好相应的资源并为我们配置好,使原本复杂的配置过程简单化,极大程度的提高了开发效率。 在参赛过程中也遇到了不少问题,其中包括开发板启动不成功,最后通过重新刷写bootloader解决;还有出现了线程堆栈溢出,通过调整堆栈大小解决;还有自己编写的软件模块在重新配置软件包后在工程中消失的问题,最后重新新建源代码文件夹解决;选择MQTT软件包并使能例程后,源代码中没有对应代码,最后发现和软件包版本有关系。总之,开发过程中遇到了一些大大小小的问题,但解决问题的过程就是能力提升的过程,也很感谢主办方提供的这次宝贵的比赛机会。
作者:annysky 概述智能家居是目前最火热的应用方向,基于对物联网和智能家居的热衷和喜爱,以自己小屋为实际应用模板,将智能家居的设想变为现实状态。本智能家居应用平台基于STM32H7和STM32F4为主芯片进行设计,分为主控平台和网关平台。主控平台以ART-PI开发板为核心,主要任务是查询网关平台的数据信息、查询和设置参数、与云平台进行交互等;网关平台以STM32F407为核心,主要任务是采集数据和分析处理数据、并将主控平台下发的指令进行分析处理后来控制终端,该平台目前采集4路温湿度、1路电量、1路甲醛、1路PM2.5、2路烟雾报警、1路水浸报警、2路门锁状态的数据,输出控制1路加热和散热,通过CAN通讯与主控平台进行联络,并且使用屏进行显示各个状态,还可以使用WLAN与Onenet进行数据交互。后续根据需要在CAN网络上增加设备或模块(智能窗帘、CAN温湿度传感器、智能继电器、门禁系统、摄像头等),能够监测和控制终端产品。 开发环境硬件: (1)主控:ART-PI(STM32H750XB),ART-PI-DOCK扩展板(含屏) (2)网关:WT-19S42(STM32F407VGT6) (3)RT-Thread版本:RT-Thread V 4.0.3 (4)开发工具及版本:MDK 5.27,CANTest,XCOM V2.0,VGUS2020,DGUS_V759-t5l RT-Thread使用情况概述(1)内核部分:调度器,信号量,消息队列,libcpu/BSP。 调度器:创建多个线程来实现不同的工作。 信号量:用来同步线程。 消息队列:用来实现线程之间传递的数据。 libcpu/BSP:外设CAN驱动、UART驱动。 (2)组件部分:CAN框架,UART框架, CAN框架:使用FDCAN2框架来与网关平台进行数据交互,上层代码可以提高代码的可重用性。 UART框:使用UART框架来与ART-PI-DOCK扩展板进行数据交互。 (3)软件包部分: cJSON:C语言实现的极简的解析 JSON 格式的软件包。 WebNet软件包:由RT-Thread 自主研发的,基于 HTTP 协议的 Web 服务器实现,它不仅提供设备与 HTTP Client 通讯的基本功能,而且支持多种模块功能扩展,且资源占用少、可裁剪性强,充分满足开发者对嵌入式设备服务器的功能需求。 Onenet: RT-Thread 针对 OneNET 平台连接做的的适配,通过这个软件包,可以让设备在 RT-Thread 上非常方便的连接 OneNet 平台,完成数据的发送、接收、设备的注册和控制等功能。 硬件框架总方案原理图 智能家居应用平台方案原理图如图1所示,主要由两部分组成(目前状态,后续根据实际应用情况进行扩展),分别是主控平台和网关平台。 图1总方案原理图 主控平台: 主控平台的硬件分为两部分。一是ART-PI开发板,是由RT-Thread 设计的开源硬件,核心芯片是STM32H750XB,主频最高达480M,支持超低功耗。开发板板载功能众多,标配 TYPE-C 接口,板载 WIFI, 蓝牙配网,还有 LCD(RGB888),SDRAM, TF-Card, USB-OTG等应有尽有。 另外一部分是ART-PI-DOCK扩展板:根据ART-PI开发板的扩展接口自主设计的ART-PI-DOCK扩展板。主要的功能是通讯和人机交互,不参与对外设传感器或者模块的控制和信号采集(除光敏和温湿度)。板子主要包含以下几种功能: (1)2路CAN通讯 (2)1路485通讯; (3)1路232通讯; (4)1路TTL通讯; (5)1路WLAN网络通讯; (6)CAN匹配电阻设置; (7)主机ID设置; (8)1路温湿度传感器; (9)1路光敏传感器; (10)1路锂电池充电管理模块接口; (11)1路外设5V输入接口; (12)1路串口屏接口; (13)1路TFT液晶屏接口。 扩展板涵盖的功能非常全面,包含了目前应该最广泛的几种通讯方式和人机交互方式(可选),可适应不同应用场景。 图2 ART-PI-DOCK原理框图 网关平台 网关核心芯片是STM32F407VGT6,1024k Flash,192KB SRAM,工作频率为168 MHz。基于STM32F407强大的功能,在设计网关平台时,使用了符合IEEE 1588 v2标准要求的以太网MAC10/100,并使用了高达6个USART设备。另外使用了1路CAN,4路串行设备,12路开关量输入,8路开关量输出,各个接口均进行了标识。 图3网关平台原理框图 软件框架说明图4 主控平台软件流程图 图5 网关平台软件流程图 本项目采用的是主控与网关两个平台,主控平台完成对网关平台数据的处理显示,并对网关平台的参数
RT-Thread Studio 中使用串口设备,可以按照以下步骤进行: 1. 在设备管理器中找到串口设备,并记录下其名称和端口号。 2. 在 RT-Thread Studio 中创建一个名为 uart 的设备对象,并设置好其配置参数,如波特率、数据位、停止位和校验位等。 3. 在应用程序中调用相应的 API 函数来进行串口通信,如发送数据、接收数据等。 以下是一个使用串口设备的示例代码: ```c #include <rtthread.h> #include <rthw.h> #define UART_NAME "uart1" // 串口设备名称 #define UART_BUFSZ 128 // 缓冲区大小 static rt_device_t uart_dev; // 串口设备对象 static char uart_buffer[UART_BUFSZ];// 串口数据缓冲区 static void uart_thread_entry(void *parameter) { rt_size_t rx_len; while (1) { rt_memset(uart_buffer, 0, UART_BUFSZ); // 从串口设备中读取数据 rx_len = rt_device_read(uart_dev, 0, uart_buffer, UART_BUFSZ); if (rx_len > 0) { // 处理接收到的数据 rt_kprintf("Received: %s\n", uart_buffer); } // 延时一段时间 rt_thread_mdelay(10); } } int main(void) { // 初始化串口设备 uart_dev = rt_device_find(UART_NAME); rt_device_open(uart_dev, RT_DEVICE_FLAG_RDWR); // 创建串口线程 rt_thread_t tid = rt_thread_create("uart", uart_thread_entry, RT_NULL, 1024, 25, 5); rt_thread_startup(tid); return 0; } ``` 在上述代码中,首先通过 rt_device_find() 函数找到名为 uart1 的串口设备,并通过 rt_device_open() 函数打开该设备。然后创建一个名为 uart 的线程,该线程不断从串口设备中读取数据,并进行处理。可以根据实际需要修改线程的优先级、堆栈大小等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值