MCU STM32 y sus librerías HAL para los periféricos

1,724 views
Skip to first unread message

Geni Suarez

unread,
Mar 2, 2017, 4:51:46 AM3/2/17
to Embebidos32
Alguien para dar consejos o debatir sobre el uso de sus librerías HAL para periféricos como el bus can?

Teóricamente ST te provee un stack de paquetes y librerías de bajo nivel para hacer tus diseños portables entre diferentes familias de STM32 F0:F4/L0:L4. Comencé a hacer mi código para armar unos drivers de más alto nivel que usaran las funciones de la HAL para cada periférico que voya usar del micro que tengo. Debugando he detactado comportamientos erráticos en alguna parte del código de la HAL para el controlador CAN. He leído en el foro que justamente en una de las funciones que uso para transmitir hay un bug y que están trabajando en arreglarlo para la próxima versión. Aunque estoy esperando confirmación por parte del soporte técnico si eso es así.  

Soy relativamente nueva en este mundillo y todavía no tengo criterio para opinar con argumentos. Pero alguien me dijo que el uso de estas HAL (una capa intermedia entre hw y el código de tu driver de siguiente nivel) no permitía tanta portabilidad como sugerían. Que era mejor que creara directamente mi propio driver de bajo nivel. Pero eso seguro va a hacer que sólo sirva para ser usado con el modelo de mcu que uso y no sé si me va a dar problemas cuando lo quiera llevar al mismo micro pero fuera de la placa para el que tengo el proyecto configurado. Estoy usando un kit para este micro pero la idea es llevarlo luego al mismo modelo de micro (sin kit) e integrarlo en un prototipo diferente. 

Les agradezco la atención. 

Un saludo a todos.




Hugo Mendiondo

unread,
Mar 2, 2017, 7:30:30 AM3/2/17
to Embebidos32
Hola, te puedo contar mi experiencia con ST y HAL.
Hace varios años que estoy trabajando con los micros STM32 y usando Cube para generar las librerias de bajo nivel, y si bien a veces es un tema comprender el uso de los drivers implementados en HAL, hay muchos ejemplos y soporte.
Y en mi opinión, la portabilidad es excelente.

Espero haber sido de ayuda, cualquier duda avisame.
Lamentablemente no usé el controlador de CAN

Saludos
Hugo

Geni Suarez

unread,
Mar 2, 2017, 9:52:33 AM3/2/17
to embeb...@googlegroups.com
Está bien Hugo, al menos es la opinión de alguien que ha trabajado por tiempo con este "pack" y puedo tener en cuenta. 
Justamente de ejemplo con HAL_CAN no estoy estoy encontrando muchos. 
Tú me puedes aclarar si cuando hablan de facilitar la portabilidad entre devices, se refieren a que sólo hay que cambiar una librería HAL por otra y el hardware en tu proyecto o implica más cambios? Qué puedes conservar de tu trabajo y qué partes no? 

Gracias por la molestia en responderme antes. 

Saludos.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es
---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/xs5q8w12kzo/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Hugo Mendiondo

unread,
Mar 2, 2017, 10:20:18 AM3/2/17
to embeb...@googlegroups.com
Hola,
Según la familia que estés trabajando, por ejemplo L0 o F1, etc. podés encontrar un pack de ejemplos en la página de ST, son pequeñas app que usan solo un periférico, o módulo. No tengo presente el de CAN porque no lo usé, pero bajá ese pack de software y seguro algún ejemplo hay. Creo que te tenés que registrar para poder bajarlo.
Por el lado de la portabilidad, el procedimiento que utilizo yo es:
  • Generar con cube el nuevo proyecto (esto genera la capa de HAL e inicializa los pines y periféricos según lo configures)
  • Luego con el proyecto ya creado, agregas tu código.

Por lo general no hace falta adaptar mucho, salvo lógicamente si un MCU tiene algún módulo que el otro no, o algo por el estilo.

El código de usuario, pasa derecho.

Un detalle, el código generado por Cube crea unos headers del tipo /* begin user code*/ y /* end user code*/ si respetas eso, podés regenerar el proyecto las veces que quieras sin problemas.

Bueno, una vez más espero haber sido de ayuda.

Saludos

Hugo


gerardo gimenez

unread,
Mar 2, 2017, 10:33:05 AM3/2/17
to embeb...@googlegroups.com
Hola,
Veo que las preguntas que haces es porque no tenés en claro la arquitectura del soft.

Yo adopté a STM hace como un año, las herramientas son muy buenas y las mantienen muy bien. Tenés dos compiladores free uno de ellos y otro de terceros.

Hace unos meses dieron un curso en Argentina te paso el link del ing de soporte que dio el curso, ahí tenés la presentación completa y muchos cosas mas.

Un tema que me pareció muy interesante es que la empresa tiene su mayoría accionaría publica, siendo del estado francés e italiano y un %30 privada, también de accionistas franceses e italianos!!! Un buen ejemplo de competitividad y crear industria... En fin!!! Me voy a comprar unas LEBACs...


Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Giménez Gerardo Daniel.

Geni Suarez

unread,
Mar 3, 2017, 4:19:40 AM3/3/17
to embeb...@googlegroups.com
Gracias Hugo por las sugerencias. Cube lo conozco porque ya he empezado varios proyectos con esta herramienta y la verdad que viene muy bien como punto de partida sobretodo para inicialización. Luego lo que hago es adaptar el código a una estructura un poco más modular. La verdad muy cómodo. Ahora estoy practicando y poniendo a prueba el micro con una plaquita, disco kit y el IDE Keil. Luego la idea es portarlo al mismo micro pero en otro hardware y con toda probabilidad a un L0 además de un L4. Con lo cual sí que me interesa una arquitectura portable usando la HAL o las LL, sobretodo si los que habéis experimentado salís satisfechos. 

Sobre el tema CAN ahí ando a ver si ST me confirman un bug en la función que me está dando problemas. El ejemplo que disponen es un único ejemplo para una placa diferente y la verdad más que la parte del código can que el ejemplo tiene se parece al mío. Lo he configurado con los mismos valores ya por probar a ver. Pero ando depurando y el hilo de ejecución hace un extraño incoherente en su parte de código HAL referente a la función de transmisión. 

Entra en un if cuando se da una condición y digamos que la instancia tiene una secuencia que acaba con un return VALORX. Curioso es que nunca llega a esta línea, sin embargo es capaz de salir, sale de la función antes de llegar a dicho punto. Lo malo es que no retorna nada, hice un switch case (con los posibles valores de retorno que existen) en la función desde dónde recibo el retorno de la llamada a la función del hal con el problema y sorpresa que no entra en ningún case. Considero que si no llega a una línea de código de la hal cuando pasa por una secuencia y no la completa es que no tiene que ver con mi código de usuario (que además es muy simplito para seguirlo bien y minimizar riesgo de fallos).  Para ser más concretos aquí dejo el caso:

En esta función hago mi llamada al HAL y es donde recibo el valor retornado (los cases han sido para las pruebas en modo depuración):

uint8_t App_Task_CAN_sendData(uint8_t* cBuffer) //que será llamada dsd main dentro de un bucle infinito
{       
    uint8_t temp;

    //paso los datos del buffer de mi app a los registros de datos de la estructura del handle can
    for (uint8_t index=0; index< DATABTXLONG; index ++)
    {
            HCAN_Struct.pTxMsg->Data[index]= cBuffer[index];
    }


    temp=HAL_CAN_Transmit(&HCAN_Struct, TIMEOUT);//aquí los transmito llamando a la funcion de la capa hal
    /*case para comprobar el retorno de la funcion*/
    switch (temp) 
    {

        case HAL_OK:

            TaskCan_Error_Handler();

        break;

        case HAL_TIMEOUT:

            TaskCan_Error_Handler();

        break;
        case HAL_BUSY:

            TaskCan_Error_Handler();

        break;
        case HAL_ERROR:

            TaskCan_Error_Handler();

        break;

        default:
        break;
    }

    return 0; //el hilo no entra en ningun case y salta directamente aquí 
}
Esta es la parte de la función en la hal que de la que hablo y donde pone return HAL_TIMEOUT, allí no llega, llega hasta la sentencia anterior, sale del while y se va al final de la función para salir, he añadido una foto para que apreciéis cómo tan si quiera me permite crearle un breakpoint:

 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) //entro aki al llamarla en fragmento de arriba
{
  ..........//hasta aqui todo perfecto
 /* Check End of transmission flag */
 while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox)))//queda esperando al flag de tx con exito
 {
   /* Check for the Timeout */
   if(Timeout != HAL_MAX_DELAY)
   {
     if((Timeout == 0) || ((HAL_GetTick()-tickstart) > Timeout))
     {  //si expira el timeout sin recibir el flag de tx completa entra en
       //esta condicion y deberia retornar a la llamada con este valor
       hcan->State = HAL_CAN_STATE_TIMEOUT; //de aquí no pasa
      /* Process unlocked */
      //__HAL_UNLOCK(hcan);// deje o quite esta línea pasa lo mismo (en el foro algunos recomiendan suprimir estas macros)
       return HAL_TIMEOUT; 
     }
   }
 }
 if(hcan->State == HAL_CAN_STATE_BUSY_TX_RX)
 {
   .........
 }
}//y salta hasta aquí
Independientemente de que se trate del hal dedicado a can creo que para el caso que estoy comentando no hace falta conocimiento ya que planteo más una duda de hilo de ejecución en una depuración. Y es que a mí no me parece muy normal que se produzca esa salto. No sé si eso lo pude provocar mi código o está claro que es un error en la hal o incluso del depurador. Yo no sé ya xD.
bug.jpg

Geni Suarez

unread,
Mar 3, 2017, 4:25:51 AM3/3/17
to embeb...@googlegroups.com
Grcias Gerardo por el aporte. Parece interesante :)

Gonzalo Cervetti

unread,
Mar 3, 2017, 2:32:47 PM3/3/17
to Embebidos32
Hola, ya que sacaron el tema aprovecho para consultar. ¿Con qué IDE están trabajando? Hice algunas pruebas con Atollic Truestudio, porque es gratis y no necesita siquiera registrarse. Sin embargo no es muy bueno a la hora de realizar debug, ¿Que me recomiendan? Gracias!

Geni Suarez

unread,
Mar 3, 2017, 2:36:47 PM3/3/17
to embeb...@googlegroups.com
No sabía que tenía esa pega. Pues es la próxima herramienta que tenemos pensado probar porque nos la han recomendado muchos compañeros que experimentaron con ella. Yo estoy usando Keil. Es gratis hasta 32kb de proyecto. 

Un saludo! 





Hugo Mendiondo

unread,
Mar 3, 2017, 3:08:27 PM3/3/17
to embeb...@googlegroups.com
Yo depende el proyecto uso KEIL o IAR.
KEIL es gratis para M0 y F0 si no me equivoco. IAR es gratis hasta 32K, pero trabajo con un cliente que tiene licencia.
También hay crack.
Me dijeron que hay un plug in bueno de IAR para eclipse, pero no lo probé.
Saludos

Libre de virus. www.avast.com

gerardo gimenez

unread,
Mar 3, 2017, 5:30:38 PM3/3/17
to embeb...@googlegroups.com
El ing de aplicaciones de ST usaba Atollic y IAR en el curso!!!

Yo estoy usando AC6. Cuando empecé Atollic no era free, y las licencias de IAR que tenemos son de 256K, y como estamos haciendo cosas con F7, opté por AC6.

El debugger es medio pelo, lo típico de un debugger en eclipse. No hice cosas jugadas, con tiempos duros, pero es lo próximo que tengo que hacer. Para eso tengo que hacer algunas librerías de métodos numéricos complejos, y tratar de exprimir al micro. Creo que ahí las herramientas se van a quedar cortas pero por ahora andan de diez.

La mejor herramienta de ST, sin lugar a dudas, es el STMCubeMx. Para micros grandes te salva la vida!!! Es muy cómoda cuando haces el PCB y vas viendo las opciones de configuración de los pines para el place & route y te ayuda a las configuraciones del micro que son un quilombo.

Bueno, no se los vendo más porque no me están pagando!!!

 




Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Giménez Gerardo Daniel.

Diego Turconi

unread,
Mar 3, 2017, 8:22:15 PM3/3/17
to embeb...@googlegroups.com
Hola gente,

Yo uso hace bastante IAR para ST y me resulta muy bueno, logico tengo el registrador (crack) y anda de 10 todo ... tambien esta como dijo Hugo el plugin de IAR para compilar con el Eclipse pero tampoco lo probe lamentablemente... Sino eclipse con GCC supongo tambien serviria pero bueno mejor tener un IDE bueno funcionando..

Saludos Diego

Gonzalo Cervetti

unread,
Mar 4, 2017, 9:28:15 AM3/4/17
to Embebidos32
Yo el problema que tuve con ATollic es a la hora de hacer debug. Me deja ver solamente las variables, pero no me deja calcular tiempos por ejemplo, o graficar las variables como vi que hacen otros IDE. Para cosas simples no hay problema, pero a veces me gustaría tener un poco mas de todas las herramientas disponibles que tiene. 
Saludos Gonzalo 
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/xs5q8w12kzo/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/xs5q8w12kzo/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Giménez Gerardo Daniel.

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32...@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32...@googlegroups.com.

Gustavo Maggiolo

unread,
Mar 4, 2017, 9:40:59 AM3/4/17
to Embebidos32
Hola grupo.
Yo en particular trabajo con Eclipse. Tengo el kit Lanin de Emtech y ahí venia ya un Eclipse configurado con los toolchain. 
Incluso pude generar proyectos para M0 (dado que el kit trae un M4) y me funciona bien, sólo que me anda en Windows Vista, no lo pude hacer andar en
win 10; también tengo el programador de ST (el STlinkv2).
En cuanto al STMCube me parece muy bueno, ya que al menos, a mi para empezar, que no conocía mucho, poder configurar el clock y hacer que los módulos internos trabajen a la velocidad que requería mi aplicación, fue realmente sencillo con el STMCube.

Esta bueno saber que hay más gente que trabaja con los STM32. 

Saludos

Dalmas Di Giovanni, Ariel

unread,
Mar 6, 2017, 6:00:54 AM3/6/17
to embebidos32
Hola a todos,
Yo uso el Coocox que es de soft. libre, muy cómodo, que está basado en eclipse. Es una buena herramienta, sobre todo posee una linda cantidad de ejemplos mediante una sistema de repositorios, lo cual cuando uno quiere usar un periférico nuevo te ayuda bastante

saludos,


Ariel


De: "Gustavo Maggiolo" <gustavod...@gmail.com>
Para: "embebidos32" <embeb...@googlegroups.com>
Enviados: Sábado, 4 de Marzo 2017 11:40:58
Asunto: [embeb32] Re: MCU STM32 y sus librerías HAL para los periféricos

Geni Suarez

unread,
Mar 7, 2017, 4:49:22 AM3/7/17
to Embebidos32
Cuando dices que no puedes graficar las variables que quieres decir? que no puedes visualizar sus contenidos? Porque ya hoy hemos pasado los 32k de keil xDD y estamos mirando qué tal se porta el atollic para migrar definitivamente a otra plataforma free que permita trabajar con Cube. Y yo por lo menos necesito depurar para ver dónde meto la pata xDD. 


Qué bien sí que seamos unos cuantos los que usamos hal, Cube y estos IDEs para aconsejar y compartir experiencias.

Saludos. 

Gonzalo Cervetti

unread,
Mar 7, 2017, 9:21:41 AM3/7/17
to Embebidos32
Hace un tiempo vi un IDE (no recuerdo el nombre) que funciona con el entorno de Visual Studio, que te permite dentro del Debug, graficar las funciones. Entonces, si tenés una variable que se incrementa contínuamente hasta que desborda, te muestra un gráfico que es un diente de sierra. Con Atollic podes ver el contenido de las variables, pero no hacer este tipo de cosas. Tampoco pude encontrar una forma de calcular los tiempo que se demora en ejecutar las distintas partes de mis programas. 

Geni Suarez

unread,
Mar 7, 2017, 9:59:51 AM3/7/17
to embeb...@googlegroups.com
Eso sí que no lo había visto nunca. Supongo que podría vivir sin eso entonces, ya que no me acostumbré nunca a usarlo. Aunque pinta genial y se ve útil. Pero bueno, de momento creo que me apaño con ver el contenido. 

Gracias por la información. 

--
-- Recibiste este mensaje porque estás suscripto al Grupo Google Embebidos32. Para postear en este grupo, escribe un email a embeb...@googlegroups.com. Para des-suscribirte, envía un email a embebidos32+unsubscribe@googlegroups.com. Para más opciones, visita el sitio del grupo en https://groups.google.com/d/forum/embebidos32?hl=es

---
Has recibido este mensaje porque estás suscrito a un tema del grupo "Embebidos32" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/embebidos32/xs5q8w12kzo/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

gerardo gimenez

unread,
Mar 7, 2017, 11:55:07 AM3/7/17
to embeb...@googlegroups.com
Hay varios Trace de terceros para STM/ARM que no son free, no los usé, pero parecen trace profesionales con todas las herramientas de análisis.

Para mirar variables en forma visual y ver mas o menos los tiempos ST tiene el STM-STUDIO-STM32, no es un trace completo, es más un visualizador. Osea solo accede al ETM por la JTag, pero está bastante bien.

El gran problema con CORTEX M7 es el de siempre... Hay un montón de fierros que no se saben como se usan !!! Pero bueno, ahí está la expertise!!!


Saludos!


Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a embebidos32+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Giménez Gerardo Daniel.
.
Reply all
Reply to author
Forward
0 new messages