野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

这篇具有很好参考价值的文章主要介绍了野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MCU:STM32F103VET6

开发环境:STM32CubeMX+MDK5

 

实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可。在野火的指南者中,是没有这一类的视频和示例的,博主使用这款开发板实现USB虚拟串口。

首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

此时,双击完后会关闭此界面,然后打开一个新界面。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

然后,我们开始基本配置。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

现在我们选择一个LED作为系统LED,该步骤可以忽略,只是本人喜欢这样子。以硬件原理图的绿灯为例子。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

基本配置除了时钟树外,基本上已经配置好了。

现在来配置USB_Device。STM32F1系列USB只支持USB_Device。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

选中USB类型后,还需要细化其中的类型。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

一切配置都是基于硬件原理图的。硬件配置除常规配置外,还是需要看硬件原理图的。在硬件原理图中,可以看到只有PD6拉低时,USB才使能。(针对野火指南者开发板)

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

现在配置时钟树

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

配置完成,完善工程,生成工程。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

到此,STM32CubeMX工具的使用结束!可以发现在桌面已经生成了USB_VPC工程。

 

USB虚拟串口还需要装驱动才能被是识别到,在Win7、Win8机型PC中需要到ST官网下载。win10及以上机型在本地已有驱动,无需安装。

使用MDK5打开USB_VPC工程打开。点击魔法棒,勾选微库。选择对应的下载器,勾选下载完复位允许。USB线一端接开发板USB_Device,一端接PC。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

现在可以开始实验了,实现VPC的发送与回传,并重定向printf函数。

在此之前,简单描述一下生成的USB文件以及重要函数。

野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

然后再插播一条,看帖子说是,刚下载完程序时,是识别不出端口的。需要在上电的情况下从PC那拔插一次USB线。然后可以使用一个函数解决这个问题。可以在gpio.c中写入函数,然后记得在头文件声明。使用要在MX_USB_DEVICE_Iint()之前。

(我没遇到这个问题,但是我还是放到工程了,但是我没用这函数。)

 1 /* USER CODE BEGIN 2 */
 2 /*USB 重新枚举函数*/
 3 void USB_Reset(void)
 4 {
 5     GPIO_InitTypeDef GPIO_InitStruct = {0};
 6     
 7     __HAL_RCC_GPIOA_CLK_ENABLE();
 8     
 9     GPIO_InitStruct.Pin = GPIO_PIN_12;
10     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
11     GPIO_InitStruct.Pull = GPIO_NOPULL;
12     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
13     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
14     
15     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_RESET);
16     HAL_Delay(100);
17     HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,GPIO_PIN_SET);
18 }
19 /* USER CODE END 2 */

 

实验环节:发送与回传

在main.c中(截取片段,修改部分)

 1 /* Private includes ----------------------------------------------------------*/
 2 /* USER CODE BEGIN Includes */
 3 #include "usbd_cdc_if.h"
 4 /* USER CODE END Includes */
 5 
 6 /* Private typedef -----------------------------------------------------------*/
 7 /* USER CODE BEGIN PTD */
 8 
 9 /* USER CODE END PTD */
10 
11 /* Private define ------------------------------------------------------------*/
12 /* USER CODE BEGIN PD */
13 /* USER CODE END PD */
14 
15 /* Private macro -------------------------------------------------------------*/
16 /* USER CODE BEGIN PM */
17 
18 /* USER CODE END PM */
19 
20 /* Private variables ---------------------------------------------------------*/
21 
22 /* USER CODE BEGIN PV */
23 
24 /* USER CODE END PV */
25 
26 /* Private function prototypes -----------------------------------------------*/
27 void SystemClock_Config(void);
28 /* USER CODE BEGIN PFP */
29 
30 /* USER CODE END PFP */
31 
32 /* Private user code ---------------------------------------------------------*/
33 /* USER CODE BEGIN 0 */
34 
35 /* USER CODE END 0 */
36 
37 /**
38   * @brief  The application entry point.
39   * @retval int
40   */
41 int main(void)
42 {
43   /* USER CODE BEGIN 1 */
44     char str[] = "Hello World!\r\n";
45   /* USER CODE END 1 */
46 
47   /* MCU Configuration--------------------------------------------------------*/
48 
49   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
50   HAL_Init();
51 
52   /* USER CODE BEGIN Init */
53 
54   /* USER CODE END Init */
55 
56   /* Configure the system clock */
57   SystemClock_Config();
58 
59   /* USER CODE BEGIN SysInit */
60 //    USB_Reset();
61   /* USER CODE END SysInit */
62 
63   /* Initialize all configured peripherals */
64   MX_GPIO_Init();
65   MX_USB_DEVICE_Init();
66   /* USER CODE BEGIN 2 */
67 
68   /* USER CODE END 2 */
69 
70   /* Infinite loop */
71   /* USER CODE BEGIN WHILE */
72   while (1)
73   {
74     /* USER CODE END WHILE */
75     CDC_Transmit_FS((uint8_t*)str, 14);
76     HAL_Delay(2000);
77     /* USER CODE BEGIN 3 */
78   }
79   /* USER CODE END 3 */
80 }

在usbd_cdc_if.c中(截取片段,修改部分)

 1 /**
 2   * @brief  Data received over USB OUT endpoint are sent over CDC interface
 3   *         through this function.
 4   *
 5   *         @note
 6   *         This function will issue a NAK packet on any OUT packet received on
 7   *         USB endpoint until exiting this function. If you exit this function
 8   *         before transfer is complete on CDC interface (ie. using DMA controller)
 9   *         it will result in receiving more data while previous ones are still
10   *         not sent.
11   *
12   * @param  Buf: Buffer of data to be received
13   * @param  Len: Number of data received (in bytes)
14   * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
15   */
16 static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
17 {
18   /* USER CODE BEGIN 6 */
19     CDC_Transmit_FS(Buf, *Len);
20     
21   USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
22   USBD_CDC_ReceivePacket(&hUsbDeviceFS);
23   return (USBD_OK);
24   /* USER CODE END 6 */
25 }

实验结果(波特率随意选)

 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)

 

 实验环节:打印重定向

 在usbd_cdc_if.c中(截取片段,修改部分),声明在usbd_cdc_if.h文件。

 1 /* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
 2 #include "stdarg.h"
 3 #include "stdio.h"
 4 
 5 uint8_t usbtemp[64];
 6 void usbvcom_printf(const char *format,...)
 7 {
 8     uint16_t     len;
 9     va_list     args;
10     
11     va_start(args, format);
12     len = vsnprintf((char *)usbtemp, sizeof(usbtemp)+1, (char *)format, args);
13     va_end(args);
14     
15     CDC_Transmit_HS(usbtemp, len);
16 }
17 
18 /* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */

然后就可以像printf那样使用了,实测过是正常的!

 

时代越来越好,开发效率越来越高,希望能帮助到你!!!

还有就是,开源万岁。 文章来源地址https://www.toymoban.com/news/detail-473347.html

到了这里,关于野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 野火STM32F103驱动GT911触摸芯片

    芯片介绍 GT911 是专为 7”~8”设计的新一代 5 点电容触控 方案,拥有 26 个驱动通道和 14 个感 应通道,以满足更高的 touch 精度要求。 GT911 可同时识别 5 个触摸点位的 实时准确位置 , 移动轨迹 及 触摸面积。 并可根据主控需要,读取相应点数的触摸信息。 芯片原理图 管脚定

    2024年02月06日
    浏览(28)
  • 利用是stm32cubemx实现双极性spwm调制 基于stm32f407vet6

    【双极性SPWM调制讲解以及基于stm32的代码生成-哔哩哔哩】 https://b23.tv/ytFxdkL 双极性spwm调制虽然没有单极性好用,但比单极性要简单易懂一些,以下教程是如何利用stm32实现双极性spwm调制.   •T1,T2不能同时导通,T3,T4也不能同时导通,否则短路烧管子。 •解决方法:T1与T2用高

    2024年02月15日
    浏览(19)
  • GD32F103VET输出PWM波形

    GD32F103VET将TIMER0_CH3映射到PE14引脚,使其输出PWM波形。测试时,使用示波器看PE14引脚输出的波形,效果更直观。 TIMER0之PWM输出引脚映射如下: TIMER0_REMAP[1:0]=\\\"00\\\"(没有映射): TIMER0_CH0默认被映射到PA8引脚 TIMER0_CH1默认被映射到PA9引脚 TIMER0_CH2默认被映射到PA10引脚 TIMER0_CH3默认被映射

    2024年02月14日
    浏览(15)
  • STM32F407VET6核心板下载器连接方法

    最近总有学生问STM32F407VET6核心板下载器连接方法怎么样连接,抽空写了个博客说明下接法吧,如果大家看完博客还问的话,那多少有点不礼貌了哈。 硬件购买链接:https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-14787471870.9.7dec6865WB5Rn5id=557094417101 其它的板子连接就不一样是这样了

    2024年02月14日
    浏览(27)
  • stm32f407VET6 系统学习 day01 GPIO 配置

    GPIO,即通用I/O(输入/输出)端口,是STM32可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F407有7组IO。分别为GPIOA~GPIOG,每组IO有16个IO口,共有112个IO口  通常称为 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中

    2023年04月09日
    浏览(20)
  • [STM32] - STM32F407VET6使用STM32CubeMX配置FatFs,以及挂载时返回03错误码问题的解决

    为测试新买的开发板TF卡读写是否正常,使用STM32CubeMX(后简称CubeMX)进行代码构建。生成代码后烧录测试,发现在挂载TF卡时无法成功,返回值为错误3( FR_NOT_READY )。经排查后问题已解决,遂记录配置过程供大家参考,并讲解挂载时返回错误3的解决方式。 ①为了输出TF卡(

    2024年02月22日
    浏览(25)
  • STM32开发(十二)STM32F103 功能应用 —— NTC 温度采集

    👈《上一篇》  🏡《主目录》  👉《下一篇》 了解STM32 片内资源ADC。本实验是基于STM32F103开发 实现 NTC温度采集。 NTC温度采集实现: 1、使用查表方式。可参考

    2024年02月03日
    浏览(18)
  • LVGL触摸移植——stm32野火F103

    目录 系列文章目录 章目录 目标 一、认识端口文件 二、使能 lv_port_indev.c  三、接口函数 1.输入设备初始化 四、Main函数 五、过程中的疑难杂症 1.内存不足 2、LCD白屏 五、效果 总结 在显示的基础上添加触摸输入 提示:以下是本篇文章正文内容,下面案例可供参考 这两个是

    2024年02月11日
    浏览(20)
  • 【正点原子STM32连载】 第十章 STM32CubeMX简介 摘自【正点原子】STM32F103 战舰开发指南V1.2

    1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html STM32CubeMX是由ST公司开发的图形化代码自动生成工具,能够快速生成初始化代码,如配置GPIO,时钟树

    2024年01月15日
    浏览(24)
  • STM32F103实现USB虚拟串口

            今天分享一下STM32F103如何实现虚拟串口,目标是让新手也能上手,如果谁没看懂或者照着做功能没有实现可以私信我,只要我看到一定回复。        本次使用的是STM32F103C8T6核心板,按以下步骤新建一个STM32CubeMX工程。        步骤一 :先输入MCU型号搜索芯片,软件

    2024年02月09日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包