基于STM32F407的USB转串口功能实现

发布时间:2024-03-21  

之前的文章中介绍过STM32的USB接口虚拟串口的功能。本篇文章在此基础上,以STM32F407为例,介绍USB转串口功能的实现。


要实现USB转串口的功能,需要将单片机真实串口(这里以USART1为例)的收发数据与USB口进行交互。用过USB虚拟串口的朋友可能知道,要实现该功能,还存在以下问题:


1. 电脑上设置的串口波特率不影响USB接口传输的速率。

2. 怎样获取电脑上串口助手设置的波特率,以设置USART1使其波特率与串口助手一致。

波特率设置

其实STM32CubeMX生成的程序中已经提供了相关的接口,只需要用户自己实现即可。打开usbd_cdc_if.c文件,CDC_Control_FS函数中,添加如下程序。

c123dff4-6bf9-11ee-939d-92fbcf53809c.png

其中上面的注释是系统生成的,根据注释添加相应的红框中的程序。LineCoding是一个结构体:

USBD_CDC_LineCodingTypeDef LineCoding ={    115200, /* 波特率*/    0x00,   /* 停止位-1*/    0x00,   /* 校验 - none*/    0x08    /* 数据位 8*/};

USBD_CDC_LineCodingTypeDef的格式也是系统定义好的。

添加完成后,在电脑的串口助手上更改波特率时,系统会调用这段程序,重新配置USART1的波特率,使两者保持一致。

剩下的功能就是数据转发,即将USB接收的数据通过USART1发送出去,将USART1接收的数据发送到USB接口。

USB数据转发到USART1

同样是在usbd_cdc_if.c文件中,修改USB接收函数CDC_Receive_FS。将原来的程序屏蔽,添加串口发送的程序。

c1306a58-6bf9-11ee-939d-92fbcf53809c.png

添加串口发送完成中断回调函数(前提是使能串口发送中断):

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){  USBD_CDC_ReceivePacket(&hUsbDeviceFS);}

USART1数据转发到USB

本例程是通过中断方式接收USART1数据,并通过接收超时时间来判断一帧数据接收完成。当然也可以通过其它方式实现转发,例程只是简单实现功能。

添加串口中断回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){  UserTxBufPtrIn++;  if(UserTxBufPtrIn == APP_RX_DATA_SIZE)//防止溢出  {    UserTxBufPtrIn = 0;  }  UR_Tick = 0;//接收计时器清零  UR_Flag = 1;//正在接收  HAL_UART_Receive_IT(huart, (uint8_t *)(UserTxBufferFS + UserTxBufPtrIn), 1);}

判断一帧数据接收完成后,通过USB接口转发出去。

if(UR_Flag == 2){  UR_Flag = 0;  CDC_Transmit_FS(UserTxBufferFS, UserTxBufPtrIn);  UserTxBufPtrIn = 0;}

通过以上设置,即可实现类似CH340等USB转串口芯片的功能。但STM32的USB接口功能更强大,可以实现USB复合设备,比如同时虚拟多个串口。以后有时间再做研究和大家分享。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    mini2440重新烧写supervivi方法;使用JLink V8烧写Nor Flash方法: 一. 做好准备工作: 比如安装JLink驱动USB转串口驱动(如果是笔记本)... 二. 将开......
    脑检查到该USB设备类型相同就去帮你安装相对于驱动,但有些由于系统没有自带有相对于的USB驱动程序,需要联网或者厂家资料自带有 就需要手动安装驱动,如USB转串口驱动,搞开发搭建前期时需要安装一大推驱动......
    基于STM32的Uart2串口问题;买了一块1元的活动板子,移植了RTT(RT-THREAD)的国人嵌入式操作系统。系统能够正常跑起来,接着就按照RTT的官网教程,写了一个串口驱动。 原来......
    四线) 此外还有采用USB进行程序烧写和数据输出:和电脑USB口连接也可以进行小负载驱动供电。 通常采用CH340G的芯片:实现USB转串口。使用该芯片将电脑的USB映射为串口使用,注意电脑上应安装串口驱动......
    四线) 此外还有采用USB进行程序烧写和数据输出:和电脑USB口连接也可以进行小负载驱动供电。 通常采用CH340G的芯片:实现USB转串口。使用该芯片将电脑的USB映射为串口使用,注意电脑上应安装串口驱动......
    的模块是一样的。用一根micro USB数据线,也就是目前手机常用的充电/数据线就行了,注意,不是TYPE-C数据线。连接电脑之后,会自动安装驱动程序,当然,要确保电脑是联网状态。驱动安装成功之后,就会在设备管理器中显示当前串口......
    当前系统是否支持USB转串口 #lsmod | grep usbserial 如果有usbserial说明系统支持USB转串口 第二步:安装minicom #apt-get install minicom......
    下载方式,而C51、C52与STC都是串口下载方式;其他方面基本大同小异 2.STC烧录步骤 (1)STC单片机烧录方式采用串口进行烧录程序,连接的方式如下图: (2)所以需要先确保USB转串口驱动......
    USB虚拟串口涉及的文件有下面三类: 底层 中间层 应用层 实际使用的时候只需要关心应用层即可。 在编译下载之前,我们需要在电脑安装STM32提供的虚拟串口驱动,这在......
    :Ubuntu 16.04 LTS amd64 单片机:某宝¥149开发板,芯片STC90C51,板子自带USB转串口芯片CH340G。Ubuntu好像自带了这个的驱动,不用另装驱动了。 本来......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>