技术文档

单片机无法识别 单片机虚拟串口无法被识别,这个方法学到了

小编 2024-11-25 技术文档 23 0

单片机虚拟串口无法被识别,这个方法学到了

解决 STM32H750 USB 虚拟串口无法被识别

大家好,我是一哥,之前有同学私信我,USB串口老是无法识别,本文就是介绍这个情况的。

现象

板子和电脑联调的时候发现,USB线插入板子以后电脑不识别虚拟串口,通过禁用设备再启用,能够正常工作。也能够按一下复位键才能识别。

以前似乎没有这个问题,但记不清详细情况了。

电路

D+通过一.5K电阻上拉, 调试时整个板子通过与电脑连接的USB口供电, 即插上USB线才初始供电。

查找

由于通过禁用,启用能正常工作,于是有了上一篇文章

python–禁用、启用串口设备。

后来发现,如上操作之后,有时候依然不能正常工作,表现为设备管理器中该设备为未识别的设备,于是判断是板子上出了问题。

换板子发现,故障反复,所以排除硬件问题。

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程和毕业设计指导,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像白色字体加我也能领取哦,记得口令一哥///

开发 STM32 的时候,须要串口、调试器等等外接设备来方便调试,可是对于我来说,那一大堆的线实在不够优雅。而通过 USB-DFU 下载程序、USB 虚拟串口打印信息,则只有一根 USB 即可搞定,非常简洁。

可是今天在用 CubeMX 开发 STM32H750VBT 的时候,USB 总是没法被识别。经过了一阵的探索,终于找得到了问题的理由——时钟配置。在此记录一下。

首先我先在网上查找了有关的资料,一般来说,STM32 USB 虚拟串口没法被识别可能有两种情况:

堆栈设置太小,USB 没法完成初始化,在 CubeMX 上设置大一点。

电脑端运用了 USB 分线器,把 USB 直接连接到电脑上。

两种方法我都尝试了,没效。其次我就初始思考,是不是由于 STM32H750 的时钟主频太高了(400MHz),导致时钟出错?其次我就把主频设置为了 100MHz,欸?结果能够了,终于被识别到了。但是把主频设置为 200MHz 就又不行了。可是我用 H7 不就是为了高主频吗?低主频还有什么意义?

进一步我猜想,USB 外设时钟有一个最高限速,说不定只有把 USB 外设时钟限制好就能够了。果真,在网上浏览有关信息的时候看到一篇文章,提到了 USB 时钟频次应该设置为 48MHz,我也才知道了原来 CubeMX 中 STM32H750 还能设置 USB 外设的时钟。

在 Clock Configuration 中配置 USB Clock Mux 为 RC48 ,能够获得精确的 48MHz,否则在其他频次时 USB 初始化会发生错误。

这一点在《STM32H750 Reference Manual》中 P2619 也有说明 ,即 USB OTG 的接收到的时钟应为 48MHz。

在USB设备连上主机以后, 主机检测到D+或D-上的电平变化, 识别出有设备接入。于是开始与从设备的握手过程。

但是我板子上的片上外设比较多,CubeMX生成USB的初始化代码又放在比较靠后的位置,造成USB初始化还未完成,主机已经等待超时,造成握手失败。

将初始化代码前移以后,即可正常工作。

CubeMX生成的代码有坑,不是一次两次了,甚至HAL库自带的初始化代码不能驱动硬件我也遇到过,平常心,问题解决就好

需要学习单片机的朋友 ,做毕业设计的同学,参加竞赛,关注我们,口令一哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

入坑嵌入式STM32之keil软件无法识别单片机

今天学习嵌入式单片机STM32,开发板电源仿真器都接好了,准备跑程序测试,开始打开keil软件,打开魔术棒配置仿真器Debug,没想到keil没识别到单片机内核,第一次遇到这个问题,突然之间懵住了。刚开始之前还跑过其他程序,都没啥问题,运行都很正常,现在突然出现这个问题百思不得其解,于是我先老老实实检查下自己的连接,用的是SWD下载方式,怀疑自己把线连错了,反反复复看了好几遍,重新上电,重新插拔仿真器,还是不行,依然识别不到,如下图:

识别不到蓝色框中的型号

然后我就抱着试试的态度,重新换个程序,可是依然识别不到,我就开始回忆之前做了什么,明明之前还是好的,为什么现在不行了。是自己身上的静电不小心通过引脚打坏了单片机,我想不至于,里面都是一些PN结,不至于这么容易被打坏,用万用表测试单片机的引脚PA13(TMS)和引脚PA14(TCLK)都是正常的,猜测还是自己哪里操作不当引起的,于是上网查了下,说原因第一个有可能程序跑飞导致的,第二个时钟配置问题所致,第三个供电电源不稳定导致,我想我的可能是程序跑飞了,于是我先按照网上说的把BOOT0拉高,BOOT1为低电平,配置为从系统内存中启动,然后设置魔术棒里面的Debug,如下图所示:

设置红框中的Connect中的选项

所有配置完以后,检查好后重新上电,打开魔术棒中的debug,识别到了单片机,重新编译下程序,程序下载成功,然后按下板子复位键,程序运行正常,然后断电,重新把BOOT0拉低,Debug里面的Connect配置为原来模式Normal,换个程序重新下载,依然可以成功下载。通过这次问题,让我学到了新的东西。更激发了我的兴趣,虽然过程很漫长,但是耐心下去一定会找到问题所在。仅以此共勉,哪里有不足之处多多指教。

加油,30岁的自己!

相关问答

51 单片机无法识别 ?

以下是我的回答,51单片机无法识别可能有几个原因。首先,检查系统驱动是否正确安装。在Windows系统中,51单片机需要安装相应的驱动程序才能被识别为串口设备。...

51 单片机 烧录检测不到串口?

1、下载模块没有加载驱动程序。2、下载工具软件没有选对串口号。3、下载模块损坏。为了保证成功下载,还需要注意引脚连接是否正确,下载模块的TXD要接单片机...

在电路板上如何辨别 单片机 -ZOL问答

你应该问多少温度不会把器件焊坏,而不该问焊接用的电烙铁多少瓦不会焊坏单片机。器件的封装引脚与内核电路引线的连接处处理,电路的半导体材质特性以及器件的封...

8051 单片机 能直接 识别 的语言是?

8051单片机能够直接识别的语言是机器码,也就是二进制代码,文件是*.bin。51单片机最常用的编程语言是汇编语言和keilC语言,但软件对上述语言进程编译之后,生...

单片机识别 高电平最低需要多少伏?

单片机采用的是TTL电平,标准TTL输入高电平最小2V,输出高电平最小2.4V,典型值3.4V,输入低电平最大0.8V,输出低电平最大0.4V,典型值0.2V。各个厂家生产的器件会...

单片机 怎么 识别 串口发送过来的数据?我们知道发送数据的时候有起始位和停止位,接受是不是也有起始位?

设置好单片机的工作方式,单片机会自动识别接收到数据的起始位和停止位,你取走的是除掉了起始位和停止位后,真正的数据,而发送时的起始位和停止位也是由单片机...

单片机 如何 识别 串口的数据是中文还是字母?

串口有两种通讯模式,一种是十六进制模式,一种是文本模式。选择文本模式就可以发送中文。其实文本模式发送的ASCII码,接收时再转换回相应字符(包括中文)。串口...

单片机 IO如何 识别 交流信号是否接入?

1.首先220直接接5V就不行,是要烧掉的。2.你的分压电路也不行,由于是交流,实际上那个电容并不是滤波用,而且他也参与分压,具体原理请参考租容分压电路3.其实...1...

单片机 共阳极和共阴极的分辨?

对于单片机电路板上使用的LED数码管,仅从外形上是无法区分共阴极还是共阳极的,最简单的办法是万用表测量法。在数码管的背面,也就是引脚一侧,数码管一般有10...

单片机 语音 识别 算法代码?

单片机语音识别算法的代码相对复杂,需要使用适合的语音识别算法库和单片机开发工具。一个简单的示例代码如下:```c#include单片机语音识别算法的代码相对复杂...

猜你喜欢