目录

1、参考链接:

2、虚拟串口硬件说明

2.1、程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻。

2.2、需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动重启。

3、不同时钟源(内部RC、外部晶振)的USB时钟的配置方式

3.1、直接使用外部时钟8M晶振

3.2、时钟内部RC电路做系统时钟源

4、配置内部RC并倍频的方式说明:


官方代码移植有修改请参考以下链接,我们只针对其不足做补充说明。

1、参考链接:

  • STM32虚拟串口移植(提供了可用的源码,需要简单修改):https://www.cnblogs.com/hiker-blogs/p/stm32_usb.html

  • 官网虚拟串口里程移植,虚拟串口用到的文件介绍:https://blog.csdn.net/sz189981/article/details/65948071

  • USB较为详细的介绍、以及虚拟串口移植:https://blog.csdn.net/rannar/article/details/81589472

  • 配置内部时钟方式:https://blog.csdn.net/qhw5279/article/details/77016341

  • STM32各种时钟说明、配置方式说明:https://www.cnblogs.com/worldsing/p/3433529.html

  • 使用内部RC振荡为系统提供时钟,HSI倍频设置:https://blog.csdn.net/qq_22520215/article/details/72846555

  • STM32外部时钟稳定性问题:https://blog.csdn.net/unsv29/article/details/40947639

2、虚拟串口硬件说明

USBF103自带的USB符合USB2.0规范。

在USB主机上(电脑上),D-和D+都接了15K下拉电阻到地,所以没有设备接入时,D+和D-都是低电平。

在USB设备中(STM32主板),如果是高速设备,D+上接一个1.5K上拉电阻到VCC;如果是低速设备,D-上接入一个1.5k

上拉电阻到VCC。这样主机就能判断是否有设备接入,接入的设备是高速还是低速设备。

我们将STM32的USB口当高速设备使用:D+必须有一个1.5K上拉。

2.1、程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻。

2.2、需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动重启。

  需要修改hw_config.c 文件中的函数:

  • void Set_System(void)函数中配置PD6引脚为输出PP模式

#define USB_DISCONNECT                      GPIOD#define USB_DISCONNECT_PIN                  GPIO_Pin_6#define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOD/******************************************************************************** Function Name  : Set_System* Description    : Configures Main system clocks & power* Input          : None.* Return         : None.*******************************************************************************/
void Set_System(void)
{GPIO_InitTypeDef GPIO_InitStructure;QUEUE_PacketCreate(&m_QueueUsbComRx, m_UsbComRxBuf, sizeof(m_UsbComRxBuf));QUEUE_PacketCreate(&m_QueueUsbComTx, m_UsbComTxBuf, sizeof(m_UsbComTxBuf));/* Enable USB_DISCONNECT GPIO clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_DISCONNECT, ENABLE);/* Configure USB pull-up pin */GPIO_InitStructure.GPIO_Pin = USB_DISCONNECT_PIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_Init(USB_DISCONNECT, &GPIO_InitStructure);/* Configure the EXTI line 18 connected internally to the USB IP */EXTI_ClearITPendingBit(EXTI_Line18);EXTI_InitStructure.EXTI_Line = EXTI_Line18;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}
  • 配置ENABLEUSB线的函数:一定要在ENABLE的时候让D+的上拉电阻是使能状态,也就是PNP的上激光的B级(1脚)给低电平

/*******************************************************************************
* Function Name  : USB_Cable_Config
* Description    : Software Connection/Disconnection of USB Cable
* Input          : None.
* Return         : Status
*******************************************************************************/
void USB_Cable_Config (FunctionalState NewState)
{if (NewState ==ENABLE) //(NewState == DISABLE)   //使能的时候D+ 上拉有效{GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);}else{GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);}
}

3、不同时钟源(内部RC、外部晶振)的USB时钟的配置方式

3.1、直接使用外部时钟8M晶振

系统时钟倍频为72M,配置USB时钟分频为1.5倍,72/1.5 = 48M (USB时钟是48M)

hw_config.c 文件中USB时钟配置如下:

/*******************************************************************************
* Function Name  : Set_USBClock
* Description    : Configures USB Clock input (48MHz)
* Input          : None.
* Return         : None.
*******************************************************************************/
void Set_USBClock(void)
{/* Select USBCLK source */RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);/* Enable the USB clock */RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
}

3.2、时钟内部RC电路做系统时钟源

内部RC输出8M,我们倍频为48M。

然后设置USB时钟分频为1倍。

hw_config.c 文件中USB时钟配置如下:

/*******************************************************************************
* Function Name  : Set_USBClock
* Description    : Configures USB Clock input (48MHz)
* Input          : None.
* Return         : None.
*******************************************************************************/
void Set_USBClock(void)
{/* Select USBCLK source */RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_Div1);/* Enable the USB clock */RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
}

4、配置内部RC并倍频的方式说明:

参考了几位博主的方式,均失败,直接程序无法运行。

之后用以下方式解决:

1、不改变原来系统时钟配置方式;

2、按照博客在main.c定义这个博客的前两个函数:https://blog.csdn.net/qhw5279/article/details/77016341

3、删除其中中断向量表的设置。

4、在main函数开始位置调用此函数,进行系统时钟配置。 Stm32_Clock_Init(12);

5、为使delay_ms()等函数时钟准确,应在system_stm32f10x.c中将#define SYSCLK_FREQ_48MHz  48000000解除屏蔽

STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)相关推荐

  1. STM32 USB虚拟串口收发任意长度字节例程

    STM32 USB虚拟串口收发任意长度字节例程 创建STM32 CubeMX工程 代码修改 收发任意长度测试 创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模 ...

  2. STM32 USB虚拟串口原理(上)

    USB虚拟串口是使用USB的CDC(CDC为communication device class(virtual port com))类实现的一种通讯接口.使用STM32自带的USB slave功能可 ...

  3. 用STM32 USB虚拟串口替代UART

    本文使用的库为 stsw_stm32121_V4.1.0,在STM32F103C8 上开发. 导入: 最近玩STM32时深感UART不方便,得用杜邦线把STM32和UART转USB模块连起来,于是了解 ...

  4. stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)

    来源:公众号[鱼鹰谈单片机]作者:鱼鹰OspreyID   :emOsprey本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你 ...

  5. stm32 usb 虚拟串口 相同_RTThread STM32 虚拟串口代码级移植

    背景介绍: 关于"虚拟串口" Sugar 发过一篇<RT-Thread 使用 CubeMX 的 VCP(虚拟串口)> <软件架构训练计划>选择 CubeMX ...

  6. STM32 USB 虚拟串口 Virtual COM Port

    简单粗暴,直接上操作 第一步,设备接口中的USB,完全默认即可: 第二步,配置中间件中的"USB_DEVICE". 然后生成代码. 在要使用虚拟串口发送数据的模块文件内,要包含发送 ...

  7. 【正点原子STM32连载】第五十八章 USB虚拟串口(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  8. STM32CUBEMX F103 HAL库开发之 USB虚拟串口

    今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...

  9. USB虚拟串口实验_STM32F1开发指南——USB学习笔记

    前言 STM32F103系列芯片都自带USB接口,不过STM32F103的USB都只能用来做设备,而不能用作主机. 目录: 53.1 USB简介 USBF103自带的USB符合USB2.0规范.   ...

最新文章

  1. 【C++】拷贝控制与资源管理
  2. Spring boot添加员工
  3. 当一个程序员真正掌握算法之后,会变得有多强...
  4. pip安装deb_趟坑:使用pip安装TensorFlow
  5. ListView的Columns自适应内部文字
  6. 代理模式在Spring 源码中的应用
  7. (哈希)两数之和(leetcode 1)
  8. Win10的远程桌面
  9. latex ref引用章节号
  10. 国家标准《电子计算机机房设计规范》(gb50174-93),中华人民共和国国家标准电子计算机机房设计规范GB50174-93.doc...
  11. 爬虫学习之抓取今日头条街拍美图
  12. Java jna 中控考勤机_中控考勤机开发 jacob 实现监听
  13. does not have a companion object, and thus must be initialized here
  14. Ubuntu完全教程
  15. 解决word,ppt,excel图标为空白(适用于新电脑)
  16. Unknown column 'JOIN.id' in 'order clause'和 Unknown column 'XXXX.id' in 'order clause'的解决办法
  17. HTML给汉字头部添加拼音的标签
  18. python英文发音-利用Python制作查单词小程序(二):下载音频并播放单词读音
  19. 解读 CVSS 通用评分系统中最具争议的 Scope
  20. OA系统开发,了解O2OA开发平台,如何使用?

热门文章

  1. Tomcat成功安装后,无法打开欢迎页面
  2. 如何更换计算机中音乐的播放器,电脑中自定义更换QQ音乐歌曲封面图的操作步骤...
  3. 模拟双色球彩票开奖结果:随机生成一注双色球彩票,判断其是否中奖,奖金为多少。
  4. 基于javaweb的足球俱乐部管理系统
  5. 移动元素(秋季每日一题 35)
  6. Telink BLE 开发环境搭建
  7. 单链表建立——头插法和尾插法
  8. 将一个任意整数插入到已排列的整型数组中,插入后,数组中的数仍保持有序...
  9. GOOGLE的高级搜索使用技巧(转)
  10. 在Mac中保护私密文件,隐藏文件