Dispositivo USB de descubrimiento STM32F7 CDC usando CubeMX

Lo que quiero hacer es enviar algunos bytes con el descubrimiento STM32F7 a mi computadora portátil, a través de USB CDC (HS o FS). Probé el ejemplo de comunicación virtual proporcionado por Keil Microvision para que el hardware esté bien, pero necesito hacerlo usando STM32CubeMX. Las bibliotecas son diferentes y la mejor suerte que tuve fue ver Virtual Com Port en el administrador de dispositivos. pero Hyperterminal o Putty no pueden detectarlo y no hay envío ni recepción de datos. Adjunté mi enlace de código de muestra y la configuración del reloj, así que agradezco si alguien pudiera ayudarme y decirme cuál es el problema.

Mi código de muestra

Configuración del reloj

Este no es un problema que pueda resolverse fácilmente en sitios como e.se. He trabajado mucho con STM32 USB, y CubeMX tiene ejemplos de VCP que probablemente puedas aprovechar para que el tuyo funcione. Es un proceso un poco tedioso y puede llevarlo al sórdido punto débil de la operación USB de bajo nivel.
Esto funcionó para mí: stackoverflow.com/a/33555364/3820025 Asegúrese de instalar el controlador STM32 VCP correctamente (lea los comentarios también debajo de la respuesta).

Respuestas (1)

Finalmente encontré la solución. El problema estaba relacionado con el tamaño del montón. Aumenté el tamaño del montón en el archivo de inicio de 200 bytes a 400 bytes, por lo que funciona de maravilla. Pero todavía no se ha resuelto todo el problema. cuando uso Keil rtx, deja de funcionar. El problema anterior vuelve a aparecer. Creo que se trata del tamaño de la pila en la configuración de rtx, pero con algunos cambios, todavía no funciona.

Editado: después de muchos desafíos funcionó. En este enlace, describe algunos consejos sobre el uso de RTOS-RTX con Stm32CubeMX. Una de las cosas que debe hacer es establecer la prioridad del temporizador SysTick en el valor más bajo. Esto entra en conflicto con las interrupciones USB. Para usar USB-CDC con RTOS-RTX en Stm32CubeMX, debe establecer la prioridad de la interrupción global USB-OTG, más baja que el temporizador SysTick. Entonces, establecer la prioridad de SysTick en 14 y USB-OTG en 15 resuelve el problema.