Android 将设备连接为USB设备,并将STM32连接为USB主机

Android 将设备连接为USB设备,并将STM32连接为USB主机,android,stm32,Android,Stm32,我想将Android设备作为USB设备连接到作为主机设备的STM32板 我的Android应用程序代码如下所示: 安卓清单 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.usb_connection"> <uses-feature android:name=

我想将Android设备作为USB设备连接到作为主机设备的STM32板

我的Android应用程序代码如下所示:

安卓清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.usb_connection">
<uses-feature android:name="android.hardware.usb.accessory" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>
然后尝试使用ADB命令连接设备。我已经用JAVA创建了一个桌面应用程序来运行ADB命令,它工作正常。但当我尝试从Android应用程序运行ADB命令时,它给出了java.io.IOException:Error running exec()。命令:[ADB,pull,…]工作目录:null环境:null

STM32固件是用C编写的


请帮帮我,我被困了很长时间。

你想在STM32方面做什么?您需要首先通过USB连接到Android设备,并确定(在STM32端)Android设备是否处于AOA模式(通过检查供应商和产品ID)。如果不是,您需要发送一些USB请求来切换它(我已经包括STM32 USBH库调用名):

USBH_GetProtocol版本 USBH_设置字符串0制造商名称 USBH_设置管柱1型号名称 USBH_设置管柱2说明 USBH_设置管柱3版本 USBH_设置字符串4 URI USBH_设置管柱5序列号 起动附件

您可以在此处看到更详细的过程说明:

完成此操作后,将断开与USB设备的连接(它将重置连接),并且需要重新执行枚举过程。这一次,供应商和产品ID应该是AOA设备的ID(0x18D1和0x2D00/1)。现在,您只需连接到它并使用一个相当标准的USBH_CDC通信过程,还有一些注意事项。当您尝试查找接口(在interface init函数中)时,您的子类是0xFF,协议将是0x00)

我花了一段时间让所有东西都能正常通信,所以有一个usb逻辑分析仪是一个非常方便的工具,可以确保所有东西都能正常通信

下面是一些其他资源,用于在STM32正常工作后让Android设备进行通信


嘿,这是我在Stm32上激活Android附件模式的库(在f4和f1系列上验证了cube Mx和HAL)和用于批量通信的USB类:


哦,感谢上帝,至少有一些关于如何使用可怕的STM32 IDE的手册:)我会尝试将这些代码应用到我的stm32g474板上。
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
Map<String,UsbDevice> deviceList = manager.getDeviceList();
UsbAccessory[] accessoryList = manager.getAccessoryList();