RT Thread Studio创建USB虚拟串口工程

MCU型号:STM32F103RET6

1.生成一个带串口输出的工程文件,新建RT-Thread项目工程文件。
在这里插入图片描述
2.查看电路图中的串口输出管脚,根据STMCubeMx软件可知此串口为USART1,选择芯片型号为STM32F103RET6,控制台串口选择UART1,发送脚:PB6,接收脚:PB7
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.设置下载bin文件的下载地址为:0x08000000。
在这里插入图片描述
4.代码编译后下载到电路板,连上串口调试助手可看到调试信息。
在这里插入图片描述
5.打开RT-Thread Settings设置设备驱动中的USB,USB设置如图所示,设置完成之后,记得保存,否则设置无效。
在这里插入图片描述
在这里插入图片描述
6.查看原理图中的外部晶振大小,由图可知为8MHz。
在这里插入图片描述
7.打开CubeMx_Settings配置USB虚拟串口。
在这里插入图片描述
8.配置外部晶振,配置USB,重新配置外部时钟,配置完之后生成工程文件
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
9.删除usb_device.h,usbd_cdc_if.h,usbd_conf.h,usbd_desc.h文件,去掉main.c文件中的#include “usb_device.h”

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

10.在stm32f1xx_hal_conf.h打开宏定义HAL_UART_MODULE_ENABLED.
在这里插入图片描述
11.1.将usbd_conf.c文件中的void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)和HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)拷贝到stm32f1xx_hal_msp.c文件中。

void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
{
   
   
  if(pcdHandle->Instance==USB)
  {
   
   
  /* USER CODE BEGIN USB_MspInit 0 */

  /* USER CODE END USB_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_USB_CLK_ENABLE();

    /* Peripheral interrupt init */
    HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
    HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 5, 0)
### RT-Thread Studio 中通过串口使用 Modbus 协议 #### 配置环境与创建工程 为了在RT-Thread Studio中设置Modbus协议并利用串口进行通信,首先需要确保开发环境中已经安装了必要的组件。可以在RT-Thread ENV工具里执行命令 `scons --target=eclipse` 来更新RT-Thread Studio中的工程项目[^1]。 对于具体的硬件平台,比如STM32F103,在RT-Thread Studio内可以通过点击菜单来创建新的RT-Thread项目,并选择相应的芯片型号作为目标设备[^2]。 #### 添加 FreeModbus 软件包 进入 **RT-Thread Settings** -> **软件包**, 查找并勾选 "Freemodbus: Modbus 主从堆栈" 选项以集成FreeModbus库到当前项目中[^3]。 #### 修改 UART 设置 打开工程后调整UART参数使之匹配实际需求。例如,如果计划使用UART1,则需确认其波特率、停止位及校验方式等都已按照预期设定好;特别是要注意使能状态和奇偶校验的选择应该同远端设备保持一致。假设现在要将从机地址设为5,并且关闭校验功能,则相应地更改这些配置项即可。 #### 编写应用代码 下面给出一段简单的C语言源码片段用于演示如何初始化一个Modbus RTU模式下的客户端实例: ```c #include <rtthread.h> #include <board.h> #include "mb.h" #include "mbconfig.h" /* 定义使用的串口号 */ #define MB_PORT USART1 int main(void) { /* 初始化Modbus接口 */ eMBInit(MB_RTU, 5, MB_BAUD_9600, MB_PAR_NONE); while (1) { rt_thread_mdelay(10); // 循环等待 /* 处理Modbus请求 */ eMBPoll(); } } ``` 这段程序实现了基本的功能框架,其中包含了对指定编号的寄存器读写的逻辑控制流程。需要注意的是,这里的实现仅作为一个起点,具体的应用场景可能还需要进一步扩展和完善。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值