STM32 USB的实现和软件实现

发布者:JoyfulSpirit5最新更新时间:2024-12-27 来源: jianshu关键字:STM32  USB  软件实现 手机看文章 扫描二维码
随时随地手机看文章

STM32端USB的实现

笔者使用的是最经典的STM32的芯片STM32F103C8T6, 这几乎是市面上所有stm32最小系统板最为常用的主控MCU,由于项目需要拿出十年前的最小系统板,使用ST-Link烧录仍然能够使用. 我使用了ST意法半导体公司这几年主推的STMCubeMX根据芯片直接生成基本的C代码,并且使用ST公司HAL库. 这里说一下HAL库,我当年学习STM32的时候那时候基本主流都是使用库函数版本,后来ST公司意识到移植的问题所以推出了HAL(Hardware Abstract Layer)库,也是主推的方式,但是现在市面上仍然是寄存器版本,库函数版本,HAL库版本共存的状态,这里笔者参考了youtube上面的相关视频也是使用STMCubeMX直接生成了STM32的USB项目,并且烧录到芯片之后

image.png?imageView2/2/w/1000


烧录到芯片之后,芯片是可以被系统识别,拔插USB的时候系统就会有提示音.

image.png?imageView2/2/w/1000


USB的软件端实现

当系统可以检测到USB之后,笔者使用了LibUSBDotNet的C#来做上位机软件,然而这里遇到了问题,使用Libusbdotnet的库总是无法找到相关设备

 UsbDeviceFinder usbFinder = new UsbDeviceFinder(DeviceVid, DevicePid);//mUsbDevice无法找到设备,一直为null
 mUsbDevice = UsbDevice.OpenUsbDevice(usbFinder);

由于笔者对于第一次使用HAL库,一直不太清楚是否是没有配置成功导致的无法找到设备,后来我在Google上搜索相关的资料,在Github上找到了一些USB软件的项目,

关于usb调试的软件在市面上很难招,串口调试的一堆.这里我根据搜集的资料整理了相关的项目:

最推荐:  SHT
A USB HID Component for C#
HIDSharp
mikroElektronika USB(HID) Terminal

image.png?imageView2/2/w/1000


一个程序员总结的关于USB项目的合辑
当我使用SHT发现,数据是可以正常接受的,但是不清楚为什么libusbdotnet无法寻找到设备,后来继续搜索, 终于在StackOverflow上面找到了
https://stackoverflow.com/questions/25714930/libusbdotnet-no-devices-found-when-calling-usbdevice-alldevices

image.png?imageView2/2/w/1000


截图里面说的很明确,Libusbdotnet可以获取的是winusb, libusb,linux Libusb v1.x,结合我原来曾经的一点印象,我感觉应该是驱动的问题,下载了libusbdotnet的项目,里面有libusb-win32 Inf-Wizard,我打开安装驱动,出现了 system policy has been modified to reject unsigned drivers, 后来搜索发现需要使用管理员权限打开,然后顺利安装了驱动程序


image.png?imageView2/2/w/1000


image.png?imageView2/2/w/1000


此时再次拔插USB设备显示的是如下的方式


image.png?imageView2/2/w/1000

然后我根据libusbdotnet的历程写了上位机测试软件发现可以正常接受数据,此时就可以使用了.


image.png?imageView2/2/w/1000

关键字:STM32  USB  软件实现 引用地址:STM32 USB的实现和软件实现

上一篇:《嵌入式-STM32开发指南》第一部分 入门篇 - 第4章 库开发简介
下一篇:STM32和树莓派串口透传

推荐阅读最新更新时间:2026-03-25 10:42

基于μC/OS-Ⅱ的嵌入式USB控制软件实现
0 引言 2010年USB 3.0的正式推出象征USB传输极速时代的到来,但是嵌入式领域由于考虑成本等各方面因素很多仍采用USB 1.1协议。同时USB协议的主体框架并没有改变,因此研究USB 1.1协议在嵌入式系统上的实现对于USB 3.0协议的应用也是很好的铺垫。本文在以杭州中天32位RISC CPU CK510为内核的摩托罗拉HM1521_B芯片上,基于 C/OS-Ⅱ操作系统,实现对USB设备的读写控制。由于HM1521_B芯片只支持USB 1.1协议,所以本文实现的只是USB 1.1协议。USB是一种主从结构:主机Host和从机Device。所有的数据传输都由Host主动发起,而Device只是被动的负责应答。在USB O
[单片机]
基于μC/OS-Ⅱ的嵌入式<font color='red'>USB</font>控制<font color='red'>软件</font>的<font color='red'>实现</font>
基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
我们都知道硬件看门狗的目的:是用来监测系统,防止系统死机,并在死机的情况下使系统复位重启。 在RTOS操作系统中,如果任务(线程)较多,出现高优先级任务长时间占用CPU资源,低优先级任务长时间得不到执行这种想象,那么我们的系统就是具有Bug的系统。 如上描述,假如我们的线程没有死机,只是长时间得不到执行。在这种异常情况下,我们又不希望系统复位,只希望执行特定代码,那我们该如何来避免这种问题呢? Ⅰ 关于看门狗 硬件看门狗:利用一个定时器计数电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时“喂狗”。 因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内
[单片机]
基于<font color='red'>STM32</font>、FreeRTOS<font color='red'>实现</font>硬件看门狗+<font color='red'>软件</font>看门狗监测多任务的方法
STM32 IO模拟实现软件串口
最近项目中STM32的串口资源紧张,于是使用IO口进行模拟串口,现进行整理记录。 实现思路 IO口模拟串口的思路也比较简单,一切按照串口协议进行操作即可。 对于发送,计算好不同波特率对应的延时时间进行数据发送。 对于接收,稍微复杂。通过外部中断检测接收管脚的下降沿,检测到起始信号后开启定时器,定时器按照波特率设定好时间,每隔一段时间进入定时器中断接收数据,完成一个字节后关闭定时器。 测试Demo说明 TXD : PC13 RXD : PB14 波特率:9600 ,1-8-N Demo功能 接收11个数据,然后把接收到的数据发送出去。 程序实现 #define OI_TXD PCout(13) #define
[单片机]
STM32软件复位的实现方法
前些天写程序的时候,需要做一个自动复位的功能,也就是当收到外部通讯设备复位指令时,主设备立刻执行复位操作。当时是想到的用看门狗实现。但是觉得似乎不太妥当,因为看门狗的复位是需要一定的时间。而在这段时间内系统还是处于正常运行当中,而且所有中断都会正常响应。这恰好与要实现的功能南辕北辙。需求是当收到复位指令时,系统停止执行后面的所有操作,包含中断响应。所以看门狗无法实现。 我用的是STM32F103芯片,了解这颗芯片能用来复位的只有5种,外部复位、独立/窗口看门狗、软件复位功耗管理。看来我能用的也就只有软件复位了。但是我查了所有STM32F103芯片相关的资料,还是没有找到具体的实现方法,最多是提到过这种复位寄存器SYSRESET
[单片机]
STM32 USB OTG开发宝典:USB OTG核心技术与开发实战指南
【下载地址】STM32USBOTG培训资料 本开源项目提供了一套详尽的STM32 USB OTG培训资料,涵盖全速和高速模块的核心内容。这份资料深入解析了STM32微控制器中USB OTG模块的工作原理,从硬件设计到软件编程均有详细阐述,并附有实际开发案例供参考。无论是嵌入式系统开发工程师,还是对USB技术感兴趣的爱好者,都能从中获得实用的知识与技能。项目旨在帮助开发者更好地理解和应用USB OTG技术,提升开发效率与项目质量。欢迎广大开发者下载学习,共同进步。 项目地址: https://gitcode.com/Open-source-documentation-tutorial/1e262 项目介绍 在嵌入式系统开发领域,US
[单片机]
STM32单片机的usb上电和断电函数的定义
usb_pwr.c 这个文件看文件名就知道跟功耗有关了,有很多的状态:上电、掉电、挂起、恢复。 当首先是usb的上电和断电函数的定义了。 usb上电函数如下: /******************************************************************************* * Function Name : PowerOn * Description : 上电 * Input : None. * Output : None. * Return : USB_SUCCESS. ****************************************************
[单片机]
如何使用stm32 USB功能完成USB转串口功能
1. 开发环境 使用stm32f103c8t6,HAL库,使用CUBE自带的USB库。工程使用vscode+gcc编译,工程文件在文末链接下载,提供makefile和keil两个版本。 2. 功能介绍 使用stm32 USB功能完成USB转串口功能,使用引脚配置如下: 使用USART1作为调试信息输出,USART2作为串口输出,LED为系统指示。 3. CubeMX 配置 设置系统时钟为72MHZ,调试串口UASART1波特率为921600(选择高波特率,少占用中断时间),USART2波特率默认为115200,开启中断。 选择USB Device功能,速度为默认全速USB设备12MHZ,并使能USB_DEVICE库,选
[单片机]
如何使用<font color='red'>stm32</font> <font color='red'>USB</font>功能完成<font color='red'>USB</font>转串口功能
基于STM32单片机的USB时钟配置设计
1.首先要配置好系统的时钟如下: RCC_DeInit();//将外设RCC寄存器重设为缺省值 /*EnableHSE*/ RCC_HSEConfig(RCC_HSE_ON);//设置外部高速晶振(HSE) /*WaittillHSEisready*/ HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待HSE起振,等待外部的时钟起振 if(HSEStartUpStatus==SUCCESS) { /*EnablePrefetchBuffer*/ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能或者失能预取指缓存 /*F
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved