产品概述

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

小编 2024-10-06 产品概述 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单片机的低功耗模式进行测试时,遇到了一个比较棘手的问题。

就是当STM32单片机从停止状态被唤醒之后,笔者发现LED指示灯的闪烁频率变慢,并且STM32串口的通信出现了乱码。

程序如下:

//将串口接收口作为中断唤醒

void EXIT_UART_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource10); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line10; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);

}

void EXTI15_10_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line10) != RESET)

{

EXTI_ClearITPendingBit(EXTI_Line10);

}

}

//进入停止模式 任意外部中断唤醒 WKUP不能唤醒

void enter_stop_mode(void)

{

EXIT_UART_Init(); //RX引脚配置为外部中断

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); //开电源管理时钟

PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); //进入停机模式

}

为什么会出现这样的问题呢?

笔者参考了STM32的中文参考手册,发现了这样一段话:“当一个中断或是唤醒时间导致退出停止模式时,HSI RC振荡器会被选为系统时钟”。因此笔者经过了反复尝试得到了解决办法。

解决办法:

系统休眠之后,时钟会关闭以降低功耗。唤醒设备之后需要重新配置时钟和串口,否则因为时钟问题导致串口无法使用或者输出乱码。

Yunxion A和G系列产品一般选择USB充电模式,单片机的低耗模式,大大增加了产品的待机时长。

比如Yunxion G系列的产品除了定位跟踪,还具有环境监控功能,能帮助用户更好的获取周边环境的参数,比如生鲜冷链行业,如果在运输过程中,使用了该产品,除了能更准确更及时的获取到运输的进度与位置,还能通过监测环境的温湿度,防止在运输过程中造成生鲜变质等问题。

相关问答

单片机 用STC-ISP下载程序出现 串口 通信 失败 -ZOL问答

已经提示了,还有一个程序在使用串口,是不是打开串口调试助手了,把它关了,或者有其他什么程序正在用串口。如果不是,就是串口有问题,是用USB转串口的吧,要安装驱...

单片机串口 通信过程中电脑死机?

可能的原因:1.USB转串口线质量不好,或是驱动不良,或是此设备在win764位机上工作不正常。2.如果使用的是PL-2303HX系列的USB转串口线,那么在电脑打开串口后...

stc为什么检测不到 串口 ?

STC51单片机通过串口ISP方式烧录程序,用这种烧录方式,单片机必须是上电冷启动,这是STC单片机的设计使然。烧录程序时,下载软件老是显示“正在检查目标单片机...

为什么新唐N76E003 单片机 串口 烧录不了?

我以前写过一篇博客专门研究过。这是地址。http://blog.mangolovecarrot.net/2018/10/24/51/下面是转帖过来的。可以和STC单片机一样使用串口下载吗?答:...

串口 进入不了中断模式如何解决?

串口接收中断进不去,如何解决?是单片机的串口接收中断吗?要设置中断标志位呀,串口接收方式也要对呀,设置波特率。SCON=0X50;EA=1;ES=1;TMOD=0X20;TH1...

为什么我的 单片机 连接到电脑后设备管理器没有显示 串口 ?

有几个可能,COM-USB设备是否有问题,com口是否选择对了,或者是你单片机本身的故障。有几个可能,COM-USB设备是否有问题,com口是否选择对了,或者是你单片机本身...

单片机 下载程序找不到 串口 ?

当你在尝试下载程序到单片机时,如果系统提示找不到串口,那么可能是以下几个原因导致的:1.串口驱动程序未安装或者安装不正确。2.串口已被占用或者串口被禁...

串口 进入不了中断模式?

如果串口无法进入中断模式,可能有几个原因。首先,确保中断使能位已正确设置,并且中断优先级正确配置。其次,检查串口硬件连接是否正确,包括引脚连接和电源...

USB- 串口 线连接到电脑上后电脑没反应,设备管理器里找不到端口,但是51 单片机 学习板的指示灯是亮的?

灯亮,证明你的线可以供电,usb有四根线。usb转串口线不能保证不坏,驱动不知道能不能再win8用,目前两种可能,驱动问题,还有就是线坏了。没有了灯亮,证明你...

单片机 烧录, 串口 没法连接。com应该没有选错。-ZOL问答

苹果手机肿么打开apk是文件7467浏览6回答求推荐一款笔记本。工科研究生用,便于随身携带。平时做科研,处理数据,查阅文献。不玩网游和单机,至多玩棋牌游戏...

猜你喜欢