STM32 软件复位并模拟USB拔插】的更多相关文章

最近做了个USB跟上位机的通信,需要软件对MCU进行复位,复位后如果USB没有拔插,PC就不会重新枚举USB为了解决这个问题,我做了软件复位跟,软件模拟USB拔插. 这里我用的是HAL库的软件复位,复位前先把中断关掉,再复位,代码如下: __set_FAULTMASK(); //关中断 NVIC_SystemReset(); //复位 至于怎么实现模拟USB拔插,则只需要在USB初始化前把PA12进行一个拉低——延时——拉高的操作即可,一般PC机可以通过检查USB的D+引脚来判断USB是否有变化…
源:STM32软件复位(基于库文件V3.5) void SoftReset(void) { __set_FAULTMASK(); // 关闭所有中端 NVIC_SystemReset();// 复位 } //在官方软件库的 core_cm3.h 文件里 直接提供了 系统复位的函数 static __INLINE void NVIC_SystemReset(void) { SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->A…
USBBroadcastReceiver.java package com.example.communication; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class USBBroadcastReceiver extends BroadcastRece…
我们做USB通信时,通信成功后,往往要检测USB设备的拔插状态,这里就USB拔插进行一下说明. 参考:https://www.imooc.com/article/17438 先说明一下,我这里只是用C#写上位机的自定义USB设备的检测,是调用window的DLL来实现USB设备通信的,具体通信过程说明,我会在后期补上. 要实现USB插拔检测,就不得不说到WM_DEVICECHANGE 消息了,当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,而WM_D…
近日,USB接口标准制定组织表示新一代USB接口将于明年年中亮相,而其名称目前被暂定为了USB Type-C.该组织表示USB Type-C标准将允许制造商采用更纤薄的接口设计,在实用性大大提高的同时还具有可扩展性,方便未来的硬件升级. 而对于用户来说,新一代USB接口最大的优点便是和苹果Lightning接口一样支持双向拔插,这意味着用户以后在使用USB接口时不再需要事先看看到底有没有插反了. 作为USB Type-C标准的支持厂家之一,英特尔表示用于传输数据.提供电能和输出视频的新一代USB…
// usb消息定义 public const int WM_DEVICE_CHANGE = 0x219; public const int DBT_DEVICEARRIVAL = 0x8000; public const int DBT_DEVICE_REMOVE_COMPLETE = 0x8004; public const UInt32 DBT_DEVTYP_PORT = 0x00000003; [StructLayout(LayoutKind.Sequential)] struct DE…
说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了. 在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记.最近想用起来,却发现就只有个名字在记忆中了. 好了,又扯了这么多,来回到正题. 首先按照技术博客一贯的作风,得先有个入口点,这里我就先从怎么使用这个UEventObserver开始一步步分析. 首先这玩样儿是java代码,所以你就别想着c++什么用了. 这里我举例了USB线插拔来分析,代码地址如下: frameworks/base/ser…
在Android里,用java通过实现BroadcastReceiver接口,就可以获得Intent消息.可是Delphi程序不能直接实现JBroadcastReceiver,如何能够实现类似Java的BroadcastReceiver功能呢? 幸运的是Delphi提供了TJFMXBroadcastReceiver类实现了BroadcastReceiver,我们便可以以此达到目的. 下面的程序片段举例,实现如何在Delphi下获取USB外设拔插的消息. uses System.SysUtils,…
RCC CSR寄存器会存储复位标示,可通过它来知道复位原因,来源: if(RCC_GetFlagStatus(RCC_FLAG_PINRST)) printf("PINRST\r\n"); if(RCC_GetFlagStatus(RCC_FLAG_PORRST)) printf("PORRST\r\n"); if(RCC_GetFlagStatus(RCC_FLAG_SFTRST)) printf("SFTRST\r\n"); if(RCC_G…
一.复位 stm32复位有三种类型,分别为系统复位.电源复位和备份域复位. 其中系统复位又分为: NRST引脚低电平(外部复位) 窗口看门狗计数结束 独立看门狗计数结束 软件复位 低功耗管理复位 二.待机唤醒 复位中提到的低功耗管理复位,其实就是在进入低功耗模式下产生的复位. 低功耗模式分为三种模式: 睡眠模式(CM内核停止工作,外设仍在运行) 停止模式(所有时钟都停止) 待机模式(1.2V域断电) 根据具体的情况,选择不同的模式.这里以待机模式为例,stm32进入待机模式后,当检测到外部复位(…