STM8 otros micros de 8 bits

STM8 en la STM8-SO8-DISCO ejemplo

Ahora que me he estado involucrado en los STM32 que son microcontroladores  de STMicroelectronics, quise explorar un poco su línea de micros de 8 bits ya que por ahí tenía la tarjeta STM8-SO8-DISCO. El repertorio de micros de 8 bits de STMicro no es tan grande como el de 32b, pero aquí hay un resumen:

  •  STM8S le llaman mainstream es para industrial, consumer, etc.
  • STM8L son ultra low power.
  • STM8AF y STMAL son para automotriz .

 Y como yo soy nueva en esto de los embebidos (fuera de hacer proyectos con Arduino) estoy explorando las opciones que tiene STMicro entre sus micros, sus herramientas y los compiladores.

Este post no es un tutorial si no una descripción de lo que hice para poder correr uno de los ejemplos de las librerías para un STM8S en la tarjeta STM8-SO8-DISCO.

 

 

Tarjeta STM8-SO8-DISCO

Imagen de STMicro. Esta tarjea tiene 3 microcontroladores de 8 bits de empaquetado SOIC, un socket para SOICs y el programdor ST-LINK/V2.

El compilador

Yo instalé un compilador que se llama Cosmic básicamente es gratis por un año y es ilimitado para los STM8. Al parecer solo la tienes que renovar cada año pero no tienes que pagar.

Entren a la página de Cosmic software y en la parte de abajo descarguen la paquetería.

Y el link no funcionará, pero viene otro link ahí abajo para que lo descarguen. 

Cuando instalen el Compilador también les va a instalar una IDE que se llama IDEA o algo así que es la de Cosmic Software. Yo nunca la usé porque mejor instalé la IDE de ST, que en teoría este compilador es 100% compatible.

La IDE

Yo usé la ST Visual Develop o mejor “conocida” como STVD.

Desafortunadamente ésta IDE tiene algunos bugs que ya son conocidos. Recuerden siempre leer los release notes o los manuales de usuario para que no les pase como a mi la primera vez que quise usar el debugger.

 

Me adelantaré un poco para que no se frustren tanto si tienen éste problema al hacer el debug. 

Ahora lo que tienen que hacer es abrir la línea de comandos como administrador. Y escribir los siguientes comandos:

Regsvr32 /u "C:\Program Files (x86)\Common Files\microsoft shared\DAO\DAO350.DLL"
Regsvr32 "C:\Program Files (x86)\Common Files\Microsoft shared\DAO\DAO350.DLL"

Sólo tengo éste pantallazo, pero debería verse así.

Las librerías

Por supuesto que los de ST tienen librerías para sus micros de 8bits para facilitarnos la existencia. Yo usé las librerías para STM8S/A que incluye ejemplos de periféricos estándard como GPIOs, I2C, SPI, CAN, interrupciones, etc. Ubiquen bien la carpeta de las librerías porque se necesitan cuando se cree un proyecto nuevo.

Proyecto base

Hay que abrir el STVD, yo creé un workspace y ahí mismo me dio la opción de crear un proyecto nuevo, aún no entiendo cómo agregar un proyecto nuevo a un workspace que ya tengo. En teoría los workspaces te sirven para tener varios proyectos conviviendo sin que haya conflictos. 

Recomiendo que guarden su workspace en alguna ruta que no tenga espacios ni caracteres raros, lo mismo para cuando creen su proyecto. 

Cuando vayan a crear su proyecto tienen que indicar la ruta al tool chain que instalaron del Cosmic Software, el mío quedó así:

C:\Program Files (x86)\STMicroelectronics\st_toolset\asm

Ahora escojan su MCU. La tarjeta que yo usé trae por default el STM8S001J3.

¡Listo! Ya tienen un proyecto (vacío). En su carpeta de librerías hay varios ejemplos que pueden utilizar como base, en este caso usé el de GPIO. 

..\STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Examples\GPIO\GPIO_Toggle\

 Pero,  ese proyecto está hecho para sabe qué tarjeta y sabe qué STM8, entonces hay que modificar algunos archivos. Empezando por el stm8s.h, descomenten la macro que corresponda al micro que vayan a usar. Pueden encontrar el archivo en esta ruta:

..\STM8S_StdPeriph_Lib\Libraries\STM8S_StdPeriph_Driver\inc\

Ese archivo hay que incluirlo en el proyecto, recomiendo que hagan un respaldo de las librerías porque hasta ahorita no he visto cómo hacer para que el proyecto del STVD te copie los archivos dentro del proyecto. Hay que hacer click derecho en la carpeta de Include Files y escoger la opción Add Files to Folder…

Hagan lo mismo para los archivos stm8s_conf.h y GPIOs de manera que el proyecto se vea así:

Ésta es la ruta del stm8s_conf.h:

..\STM8S_StdPeriph_Lib\Project\STM8S_StdPeriph_Template\

Para que no tengan que estar cambiando el stm8s_conf.h en cada proyecto, pueden incluirlo como definición en el compilador. En el menú de arriba: Project > Project Settings > C Compiler y seleccionen el proyecto, en este caso es test. Agreguen STM8S001 o el STM8 que estén utilizando.

Blinky

La STM8-SO8-DISCO tiene 3 STM8 (2 STM8S y 1 STM8L) y aparte un socket, si ustedes quieren utilizar otro STM8 de 8 pins, necesitarían retrabajar la tarjeta quitado unos solder bridges.

A continuación un pantallazo del esquemático, básicamente aquí vemos que el LED está conectado al pin 5 del STM32S001J3M3 (U2) por lo que necesitaríamos una configuración push-pull.

Estos micros sólo tienen 8 pines, revisando la hoja de datos del STM8S001J3, se puede ver que hay dos puertos conectados al pin 5:

  • PA3/ TIM2_ CH3[SPI_ NSS]\[UART1_TX] 
  • PB5/ I2C_ SDA[TIM1_ BKIN]

Pero el único que soporta el push pull según la tabla de descripción de pines es el PA3. Por eso usaremos este pin. Entonces, el LED verde está conectado al Pin 3 del GPIO Puerto A. 

#define LED_GPIO_PORT  GPIOA
#define LED_GPIO_PIN  GPIO_PIN_3

Lo primero que se hace en el main es configurar los GPIOs, en este caso el GPIOA pin 3 debe ser push pull, en la siguiente tabla vienen las referencias sobre las configuraciones de los pines.

La configuración del LED está dada por la siguiente sentencia:

 GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST);

El ejemplo trae un delay para controlar el tiempo de encendido y apagado, pueden jugar con estos valores. Otra de las API que ya están disponibles para los GPIOs es la función de hacer toggle a un pin. 

GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN);

Aquí les dejo el código del blinky que pueden copiar y pegar si están utilizando la STM8-SO8-DISCO.  

/**
  ******************************************************************************
  * @file    GPIO_Toggle\main.c
  * @author  MCD Application Team
  * @version V2.0.4
  * @date    26-April-2018
  * @brief   This file contains the main function for GPIO Toggle example.
  ******************************************************************************
  * @attention
  *
  * 

© COPYRIGHT 2014 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm8s.h" /** * @addtogroup GPIO_Toggle * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Evalboard I/Os configuration */ #define LED_GPIO_PORT GPIOA #define LED_GPIO_PIN GPIO_PIN_3 /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ void Delay (uint16_t nCount); /* Private functions ---------------------------------------------------------*/ /* Public functions ----------------------------------------------------------*/ /** * @brief Main program. * @param None * @retval None */ void main(void) { /* Initialize I/Os in Output Mode */ GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN, GPIO_MODE_OUT_PP_LOW_FAST); while (1) { /* Toggles LEDs */ GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PIN); Delay(0xFFFF); } } /** * @brief Delay * @param nCount * @retval None */ void Delay(uint16_t nCount) { /* Decrement nCount value */ while (nCount != 0) { nCount--; } } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Antes de compilar asegúrense de escoger el STM8 Cosmic como tool set, esto es en Project > Project Settings > General > Tool Set.

Para compilar pueden ir al menú que dice Build > Build (muy intuitivo) y no deberían de tener errores. Ahora al debugger.

El debugger

La tarjeta STM8-SO8-DISCO tiene integrado un ST-LINK/V2 que sirve como programador y debugger, en este caso utiliza Single Wire Interface Module (SWIM) para programar los STM8. 

Si ya lograron compilar, conecten su tarjeta con un cable USB a su computadora, hagan click en la D azul. Les pedirá confirmar si usrán el SWIM ST-Link, hagan click en OK.  

El STM8 está en halt, para continuar pueden hacer click en el icono que tiene una flechita hacia abajo, o utilizar la tecla F5. Esto reanudará la ejecución del programa.

 

La aplicación corriendo

¡Disfruten su Blink! Ojalá esto les haya servido como base si quieren utilizar las librerías que ya existen para los STM8 y si no, siempre pueden hacer sus aplicaciones a “más bajo nivel”. 

También estuve probando leer el botón, me encontré con un especie de bug al leer el pin. Al parecer el compilador no hace bien un cast al regresar el valor del pin pero aquí les dejo la referencia por si les sucede algo similar.

 

Las referencias

1 Comment

  1. Gustavo Reynaga

    Excelente!!
    Gracias por compartir.

    Reply

Submit a Comment

Your email address will not be published. Required fields are marked *