本帖最后由 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定位有关,毕竟有个大屏,面向界面方面测试更充分些。
|
详细细致