打印
[STM32H7]

【STM32H7S78-DK测评】7、配置USB Device-HID鼠标

[复制链接]
1491|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 sujingliang 于 2024-9-17 17:50 编辑

目的
将STM32H7S78-DK配置为USB鼠标。

为了实现这个功能折腾了好久,最后发现实现并不复杂。只是中间走了太多弯路,感觉是把所有方法都试了,最后可以了。
1、【例程入手有点难】STM32H7S78-DK有2个USB device例程,一个是USB声卡,一个是大容量存储(U盘),没有HID设备的例子。所以从例子入手好像不太直接。
2、【从零开始失败了】所以搜集了一些STM32H7配置USB鼠标的方法,但是一一试过,都无法被PC识别。
这里困难不小,可以说是从零开始。要配置鼠标、外部flash的支持,还有是选择低速USB_OTG_FS还是高速USB_OTG_HS,但无一例外都失败。
3、【照葫芦画瓢失败】软件包中有个NUCLEO-H7S3L8开发板的HID设备例子。所以想和这个例子做得完全一样应该可以。
于是照葫芦画瓢,配置GPDMA1、USB_DEVICE、UCPD1、USBPD,反正挺复杂的,但是还是不行。
4、【嫁接成功】回头又试以下STM32H7S78-DK自己的例子。USB声卡(Audio_Standalone)那个又失败了。u盘那个(MSC_Standalone)可以用,可以读写SD上的文件。前者用的是USB_OTG_FS,后者用的USB_OTG_HS,所以想将后者的IOC,修改下也许可行。

一、CubeMX配置
因为是修改自跑通的例程,所以外部flash、RAM不用做修改了。而对于u盘支持的配置都可以去掉,最后修改为HID设备。

1、RCC

2、SYS

3、USB_OTG_HS

4、USB_DEVICE




5、DEBUG
安全起见把DEBUG配置上

6、PWR


生成代码

二、代码
没有做任何修改
main非常简单,主要是MX_USB_DEVICE_Init
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* Enable the CPU Cache */

  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration--------------------------------------------------------*/

  /* Update SystemCoreClock variable according to RCC registers values. */
  SystemCoreClockUpdate();

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}


USBD描述
#define USBD_VID     1155
#define USBD_LANGID_STRING     1033
#define USBD_MANUFACTURER_STRING     "STMicroelectronics"
#define USBD_PID     22315
#define USBD_PRODUCT_STRING     "STM32 Human interface"
#define USBD_CONFIGURATION_STRING     "HID Config"
#define USBD_INTERFACE_STRING     "HID Interface"



三、效果

USB1连接PC,已识别


通过BUSHOUND查看

0x0483=1155,和程序中的USBD_VID是一致的

四、总结
1、USB DEVICE高速设备(USB1)配置成功,但是低速设备(USB2)还没调通一个程序。
2、CubeMX配置HID设备缺省是鼠标,可以修改描述符,改成键盘。
3、CubeMX生成STM32H7S78-DK的代码中有一个坑,keil boot工程中sct文件,地址大小配置成了LOAD_FLASH 0x08000000 0x08010000
应该为如下:
LOAD_FLASH 0x08000000 0x00010000  {    ; load region size_region
  ER_ROM 0x08000000 0x00010000  {  ; load address = execution address
4、如果出现ST-LINK怎么也连接不上MCU,可以尝试将boot0拨到1,这样keil应该可以识别,再烧个跑通的程序,可以救回来。
5、STM32H7S78-DK的例程不一定能跑起来,可能出现不能下载,下载后不运行,有的程序keil可以下载,有的CubeIDE可以下载。原因可能是需要硬件上做跳线,或者编译器上做配置。还有可能和玄学有关。
6、和一般STM32开发板对比,STM32H7S78-DK本身就是复杂,CubeMX配置要注意很多东西,遇到过丢文件、生成文件编译出错,不能下载等问题。
7、TouchGFX 4.24.0 Designer生成的工程可靠性就比较高,而且还能在TouchGFX 4.24.0 Designer编译下载。这可能和STM32H7S78-DK定位有关,毕竟有个大屏,面向界面方面测试更充分些。



使用特权

评论回复
评论
qintian0303 2024-9-17 20:05 回复TA
详细细致 
沙发
Amazingxixixi| | 2024-10-31 16:09 | 只看该作者
USB协议算是比较困难的,可以详细讲讲就好了

使用特权

评论回复
板凳
suncat0504| | 2024-10-31 17:09 | 只看该作者
开发USBHID的,一直都头疼,感觉很麻烦啊。谢谢楼主分享开发过程。

使用特权

评论回复
地板
地瓜patch| | 2024-10-31 18:12 | 只看该作者
bushund不会用,只会接受,不会发数据,建议楼主出个教程

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

73

帖子

0

粉丝