Programación USB STM32F102

Actualmente estoy diseñando una placa para un chip STM32F102 que necesita poder usar el bus USB para transferir datos mientras el chip está funcionando. Sin embargo, también quiero poder programar el chip a través de USB mientras desarrollo el software.

Quiero asegurarme de que mientras diseñe la placa no haré nada que lo haga imposible más adelante, por lo que pido aclaraciones sobre algunas cosas.

En primer lugar, de acuerdo con el estándar USB, debido a que el STM32F1 admite USB de alta velocidad, tengo una resistencia pull-up en la línea D+.

Ahora, para arrancar desde el flash principal, el pin boot0 debe ser 0 lógico, así que lo conectaré a una resistencia desplegable en la placa. Para usar el cargador de arranque incluido (que creo que es lo que necesito para programar a través de USB), el pin boot0 debe ser 1 lógico y el pin boot1 (que es un gpio, sin embargo, es una entrada en el reinicio) debe ser 0 lógico.

Suponiendo que entiendo toda esta información correctamente, ¿cuál sería la mejor manera de poder programar el chip cuando se conecta un cable USB? ¿Puedo usar el usb V+ y GND para configurar los niveles lógicos necesarios en el pin de arranque? ¿O debería conectarlos a las placas V + y GND y usar un interruptor para configurar los pines de arranque en consecuencia?

Si se requiere alguna otra información, me complacerá ayudarlo a comprender mejor lo que necesito o estoy pidiendo.

Considere mirar los esquemas del Arduino de código abierto. Tiene la misma funcionalidad USB que estás buscando. Con el USB, puede alimentarlo, programarlo y usarlo como un puerto COM. Entre ese esquema y el cargador de arranque Arduino, gran parte del trabajo ya está hecho. Vale la pena echarle un vistazo.
Arduino usa un AVR, que no me da los mismos problemas que el STM32 con los dos pines de arranque, sin embargo, el STM32 se adaptará mejor a este proyecto, así que me quedo con eso. Qué hacer con los dos pines de arranque es mi principal problema.
No estoy diciendo que use Atmel uC, solo digo que podría usar el diseño del circuito USB como punto de partida. Eso y el cargador de arranque tendrían que ser portados al STM32. Aquí hay un "Arduino" usando el STM32. Tendría la funcionalidad exacta con USB que desea: emcu.it/ARDUINO-STM32/Arduino-and-STM32.html
De acuerdo, entiendo lo que dices, todavía tendría problemas para descifrar el uso del pin de arranque, pero ese enlace debería ser muy útil con eso, ¡gracias!

Respuestas (1)

Tengo malas noticias para usted: el STM32F102 (y sospecho que los dispositivos STM32F1xx en general) no tienen un cargador de arranque USB, solo un cargador de arranque UART. Necesita un STM32F2xx o STM32F4xx para cargar un cargador de arranque USB en la imagen de la ROM del sistema.

Tienes muchas alternativas, entre ellas:

  1. Use el cargador de arranque UART, posiblemente con un puente IC USB-UART como el FT232.
  2. Proporcione su propio cargador de arranque USB que cargue a través de algún otro mecanismo.
  3. Use un programador JTAG/SWD como el STLinkV2 (son realmente baratos, pero bastante lentos en lo que respecta a JTAG). Esta es su mejor opción porque significa que puede depurar al codificar.
STM32F3 generalmente también tiene un cargador de arranque USB, y puede estar a solo unos pines de distancia de la compatibilidad de diseño, aunque la interfaz de programación para los periféricos en chip puede ser bastante diferente. Sin embargo, definitivamente coloque un encabezado para usar un tablero de descubrimiento de $ 10 como un módulo SWD: es extremadamente útil. Y un encabezado para un UART para la salida de depuración cuando el software no funciona lo suficientemente bien como para mantener el USB.
Ah, ahora entiendo por qué estaba teniendo problemas para encontrar lo que quería, siempre que el usb aún se pueda usar para la comunicación, no es un problema grave, gracias.