STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)
目录
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虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)相关推荐
- STM32 USB虚拟串口收发任意长度字节例程
STM32 USB虚拟串口收发任意长度字节例程 创建STM32 CubeMX工程 代码修改 收发任意长度测试 创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模 ...
- STM32 USB虚拟串口原理(上)
USB虚拟串口是使用USB的CDC(CDC为communication device class(virtual port com))类实现的一种通讯接口.使用STM32自带的USB slave功能可 ...
- 用STM32 USB虚拟串口替代UART
本文使用的库为 stsw_stm32121_V4.1.0,在STM32F103C8 上开发. 导入: 最近玩STM32时深感UART不方便,得用杜邦线把STM32和UART转USB模块连起来,于是了解 ...
- stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)
来源:公众号[鱼鹰谈单片机]作者:鱼鹰OspreyID :emOsprey本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你 ...
- stm32 usb 虚拟串口 相同_RTThread STM32 虚拟串口代码级移植
背景介绍: 关于"虚拟串口" Sugar 发过一篇<RT-Thread 使用 CubeMX 的 VCP(虚拟串口)> <软件架构训练计划>选择 CubeMX ...
- STM32 USB 虚拟串口 Virtual COM Port
简单粗暴,直接上操作 第一步,设备接口中的USB,完全默认即可: 第二步,配置中间件中的"USB_DEVICE". 然后生成代码. 在要使用虚拟串口发送数据的模块文件内,要包含发送 ...
- 【正点原子STM32连载】第五十八章 USB虚拟串口(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- STM32CUBEMX F103 HAL库开发之 USB虚拟串口
今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...
- USB虚拟串口实验_STM32F1开发指南——USB学习笔记
前言 STM32F103系列芯片都自带USB接口,不过STM32F103的USB都只能用来做设备,而不能用作主机. 目录: 53.1 USB简介 USBF103自带的USB符合USB2.0规范. ...
最新文章
- 【C++】拷贝控制与资源管理
- Spring boot添加员工
- 当一个程序员真正掌握算法之后,会变得有多强...
- pip安装deb_趟坑:使用pip安装TensorFlow
- ListView的Columns自适应内部文字
- 代理模式在Spring 源码中的应用
- (哈希)两数之和(leetcode 1)
- Win10的远程桌面
- latex ref引用章节号
- 国家标准《电子计算机机房设计规范》(gb50174-93),中华人民共和国国家标准电子计算机机房设计规范GB50174-93.doc...
- 爬虫学习之抓取今日头条街拍美图
- Java jna 中控考勤机_中控考勤机开发 jacob 实现监听
- does not have a companion object, and thus must be initialized here
- Ubuntu完全教程
- 解决word,ppt,excel图标为空白(适用于新电脑)
- Unknown column 'JOIN.id' in 'order clause'和 Unknown column 'XXXX.id' in 'order clause'的解决办法
- HTML给汉字头部添加拼音的标签
- python英文发音-利用Python制作查单词小程序(二):下载音频并播放单词读音
- 解读 CVSS 通用评分系统中最具争议的 Scope
- OA系统开发,了解O2OA开发平台,如何使用?