Autor Tema: USB CDC con F4Discovery CubeMX  (Leído 263 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 159
USB CDC con F4Discovery CubeMX
« en: 16 de Abril de 2018, 00:18:51 »
Que tal,

Estoy empezando a familiarizarme (empecé el dia de hoy) con el USB de la STM32F4Discovery (o cualquier micro de ST) haciendo la configuración con el CubeMX, ¿Alguien ha utilizado este periferico en los micros de ST?

La primer configuración que quiero revisar es la de USB CDC para mandar/recibir informacion para/de la PC, pero no encontré mucha información al respecto, solo quejas en el foro de st xD.

Tengo entendido que al conectar un dispositivo USB CDC a la PC se genera un puerto COM virtual (como si estuvieramos utilizando un convertidor UART <-> USB), además de que no necesita de drivers para funcionar y que al abrir el puerto COM virtual se puede configurar con el baudrate que más nos convenga, al menos eso se podía al usar el USB CDC con otro microcontrolador.

La configuración en el Cube la hice como sigue (por si alguien detecta un error de novato):
1. Elegi la tarjeta y se inicializo con todos los perifericos por defecto.
2. Habilité el USB OTG FS en modo dispositivo.


3. Elegi la clase CDC.


4. Todo lo demás lo deje por defecto

5. Generé el proyecto y lo abrí con el IDE y compila sin errores, grabé la aplicación en el micro y me aparece el USB CDC en el administrador de dispositivos.




Se puede ver que el VID y PID configurados en el proyecto del CubeMX son los del puerto COM virtual que apareció en el administrador de dispositivos.

La documentación del USB en micros de ST viene en un documento separado, no esta en la documentación de las HAL, el documento es este STM32Cube USB device library.

Hasta ahora todo parece correcto, no he terminado de leer como se manda información a la PC, sería de ayuda si alguien que ya haya trabajado con este periferico me pudiera indicar si voy por buen camino. Los proyectos que vienen con las librerías del Cube no ayudan mucho xD.

Saludos,
Carlos

Desconectado Carl47D

  • PIC16
  • ***
  • Mensajes: 159
Re:USB CDC con F4Discovery CubeMX
« Respuesta #1 en: 22 de Abril de 2018, 00:09:03 »
Despues de comprobar que el USB CDC aparecia en el administrador de dispositivos quise abrir el puerto serial virtual con PuTTY, pero aparecia un error que me indicaba que no habia sido posible configurar el puerto serial, gracias a la magia del internet encontré un post en el foro de ST donde un usuario reportaba el mismo problema [1].

La solución es la última respuesta de aquel link:

Código: C
  1. // If you do not bind CDC interface to any UART, and just use bulk IN/OUT, this simple implementation is enough.
  2.  
  3. static uint8_t lineCoding[7]        // <------- add these three lines
  4.      // 115200bps,            1stop, no parity, 8bit
  5.   = {0x00, 0xC2, 0x01, 0x00,   0x00,   0x00,    0x08
  6. };
  7.  
  8. static int8_t CDC_Control_FS  (uint8_t cmd, uint8_t* pbuf, uint16_t length)
  9. {
  10.   /* USER CODE BEGIN 5 */
  11.   switch (cmd)
  12.   {
  13.   ...
  14.   case CDC_SET_LINE_CODING:
  15.       memcpy( lineCoding, pbuf, sizeof(lineCoding) ); // <-- add this line
  16.     break;
  17.  
  18.   case CDC_GET_LINE_CODING:  
  19.       memcpy( pbuf, lineCoding, sizeof(lineCoding) ); // <-- add this line
  20.     break;
  21.  

Luego de agregar las lineas anteriores al USB_CDC_if.c pude abrir el puerto serial en PuTTY, con la configuracion 115200bps 8N1.

Para mandar información del micro a la PC usamos la funcion CDC_Transmit_FS, por ejemplo:
Código: C
  1.   /* Infinite loop */
  2.   /* USER CODE BEGIN WHILE */
  3.   char *msg = "Hola CDC\r\n";
  4.  
  5.   while (1)
  6.   {
  7.           CDC_Transmit_FS(msg, strlen(msg));
  8.           HAL_Delay(500);
  9.  
  10.   /* USER CODE END WHILE */
  11.  
  12.   /* USER CODE BEGIN 3 */
  13.  
  14.   }
  15.  

Abrimos el puerto serial y vemos el mensaje "Hola CDC" apareciendo aprox. cada 500ms.



La solución funcionó pero aun no se el porque, no se menciona en la documentación de ST.

Saludos

[1] https://community.st.com/message/5123?commentID=5123#comment-5123
[2] https://github.com/biot/tokenline

Otro link de interes:
[3] https://community.st.com/message/158240-bug-cdccontrolfs-in-usbdcdcifc-is-empty


« Última modificación: 22 de Abril de 2018, 00:11:24 por Carl47D »