Autor Tema: System Workbech y mis comienzos con ST  (Leído 12386 veces)

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

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #30 en: 13 de Abril de 2015, 19:57:31 »
dejo un link de una página muy interesante:

http://www.hotboards.org/index.php/es/

sds.

EDITO: No me habia dado cuenta del post anterior  :?
« Última modificación: 17 de Mayo de 2015, 20:53:05 por elgarbe »
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #31 en: 08 de Agosto de 2015, 19:50:13 »
Bueno, con la última actualizacion del SystemWorkbench (1.3) y las HAL 1.7 las cosas con st han mejorado notablemente. He estado trabajando bastante con una placa propia con un 411RE y creo que podría agregar algunos capítulos a esta guía.

Como primer tema debo recomendar trabajar con 2 workspace separados. En uno de ellos tendremos los proyectos generados con el CubeMx, en donde podremos configurar los periférios del micro y obtener todo el código de inicializacion. El problema con este workspace es que ada proyecto tendrá una copia de las librerías HAL que necesitemos y por lo tanto cada proyecto será super pesado, unos 60mb por ejemplo. En el otro workspace tendremos las librerías HAL como librerías estáticas externas y todos los proyectos del WorkSpace se linkearán con esta copia única, de este modo, los proyectos son bien chicos. La idea es que en este workspace, en cada proyecto traigamos el código generado por el cubemx del otro workspace y lo retoquemos aquí, incluso, lo ideal sería eliminar funciones de la HAL con código propio nuestro. A mi parecer, las HAL están bien cuando hay que probar PERIFERICOS rapidamente, sin demasiado estudio del reference manual, pero un equipo comercial no debería salir con las hal como parte de su firmware, primero porque puede haber bugs que no conocemos, segundo porque las hal están pensadas para ser "universales" y tienen muchísimo código que no sirve para nuestro proyecto final. Por ejemplo, la rutina que configura el clock del micro tiene código para configurar todas las fuentes de reloj, HSI, HSE, LSI, LSE, pero en nuestro proyecto final usaremos una sola fuente de reloj y el resto es código que ocupará flash de gusto.

En resumen, la idea de trabajo será 2 workspace, en uno usaremos el cubemx para generar código de inicializacion de los periféricos y en el otro usaremos dicho código generado para trabajarlo para nuestro proyecto.

Dicho esto, empiezo a preparar unos ejemplos de como arrancar...

Saludos!
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #32 en: 09 de Agosto de 2015, 15:18:45 »
Para estas pruebas voy a usar la STM32F4-Discovery ya que tiene varios led, un pulsador y varios periféricos.
Entonces arrancaremos con un workspace vacío en cual configuraremos, usano el cubemx integrado la placa.

Dentro del SystemWorkbench vamos a Windows -> Open perspective -> Other y elejimos STM32CubeMx. En el CubeMX elejimos nuevo projecto. En la ventana que se abre vamos a la pestaña Board Selection y elegimos la STM32F4Discovery.



Al finalizar nos aparece la ventana del micro con un monton de pines y periféricos preconfigurados. Vamos a dejar solo los LED y el pulsador activados y desactivaremos todo el resto.
 Para eso, arrancamos con PE3, le damos click y en la lista desplegable elegimos RESET STATE. Lo mismo con PC0, PC3, PA4 a PA7, PB10, PC7, PA9 a PA12, PC10, PC12, PD4, PD5, PB6, PB9, PE1, PB2, PC14 y PC15. De ese modo, solo dejamos configurados los 4 LED como salida y el pulsador como entrada. Nos debería quedar algo así:



Es importante NO guardar el proyecto hasta que generemos el código, ahi se va a guardar solo en la carpeta del nuevo proyecto generado.
Pasemos a la configuracion del reloj, vamos a la pestaña Clock Configuration:



como ven ya está configurado para trabajar con el cristal de 8MHz externo y con el PLL activado llevarlo a 168MHz. Por lo que no tocamos nada de acá.
Finalmente vamos a la pestaña Configuration, en ella podemos terminar de configurar los periféricos, el sistema de interrupciones y algún modulo middleware como freeRTOS. Por ahora dejamos todo como está:



Ahora vamos a Project->Setings. Le damos un nombre al proyecto, elegimos el system workbench como IDE, elegimos la carpeta del workspace y en la siguiente pestaña, code generator elegimos las siguientes opciones:





Finalmente vamos a Project->Generate Code. Al finalizar le damos Close al mensaje que aparece.

Ahora toca importar en el SW el proyecto generado. Esta parte aún no la han arreglado del todo y hay que hacer algunas cositas para dejarlo funcionando. Para eso seguimos esta guia: http://www.openstm32.org/Importing+a+STCubeMX+generated+project

Hecho eso, hacemos click derecho en el projecto->build con eso conseguimos compilar el proyecto y ver que está todo el código en orden.



Luego veremos el código generado y como pasarlo al workspace de trabajo.

Saludos

-
Leonardo Garberoglio

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2764
Re: System Workbech y mis comienzos con ST
« Respuesta #33 en: 09 de Agosto de 2015, 15:27:28 »
parece que poco a poco va mejorando ST, menos mal, por que eran insufribles.
Visita mi canal para aprender sobre electrónica y programación:

https://www.youtube.com/channel/UCxOYHcAMLCVEtZEvGgPQ6Vw

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: System Workbech y mis comienzos con ST
« Respuesta #34 en: 09 de Agosto de 2015, 15:36:15 »


Que chulada, yo hace tiempo que estoy liado con otros temas, y ya no puedo dedicarle ni un segundo a mis queridos STM32.

Si algún día tengo un rato libre, me volveré a poner con ellos, el problema es que me he metido ya de lleno en desarrollos comerciales, con clientes que piden y encargan cosas a medida, otros clientes piden productos estandar que tengo que ensamblar, y desgraciadamente eso ya no me deja tiempo para hacer lo que quiera.

Mi prioridad ahora mismo es invertir en herramientas de trabajo, para hacer las cosas rápido y con comodidad. A ver si me compro el cacharro ese para formatear y cortar los pines de los componentes pasantes, es de lo que poco que me queda por conseguir, después de haber comprado la batea de soldadura, además de la "Pick and Place".

Cada vez me gustan más y más lo STM32, el problema es que sin una formación profunda, no los puedo aplicar en productos comerciales, ojalá tuviera la soltura y conocimientos que tengo con los PIC, pero con los STM32, seguramente ya no volvería a usar ningún PIC.




Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #35 en: 09 de Agosto de 2015, 16:03:52 »
Bien, el proyecto generado por el CubeMX es un proyecto funcional con el que podríamos trabajar. A mí hay varias cosas que no me gustan, primero no puedo poner las HAL como librerías compartidas con todos los proyectos del workspace, por lo que cada proyecto tiene una copia de dichas librerías y son bastante pesadas. Cuando estoy trabajando con un proyecto suelo ir poniendo en marcha de aun periférico y cuando tengo el proyecto listo, funcionando, suelo hacer una copia y empiezao a agregar el código del siguiente periférico. Siempre me queda una copia de lo que venía haciedo. Los proyectos generados con cubemx no pueden copiarse/pegarse. Tampoco puedo renombrar el proyecto. La estructura de directorios dentro del eclipse es medio rara, son carpetas virtuales, agergar un archivo fuente suele ser medio complicado. No obstante todo eso, paso a explicar como está pensado el proyect creado paraa agregar código en él.

La primera parte de nuestro main luce así:

Código: [Seleccionar]
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"

/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

El cubemx tiene una técnica para que podamos modificar las configuraciones dentro del CubeMX sin perder el código que agregamos al proyecto. Para eso nos pone un grupo de comentarios, donde nosotros podemos escrivir código, por ejemplo:

Código: [Seleccionar]
/* USER CODE BEGIN Includes */

/* USER CODE END Includes */

se supone que si yo quiero incluir algún archivo propio, debo poner los include dentro de esos comentarios, de modo tal que si tengo que regenerar el proyecto desde el cubemx, no pierda esas líneas. Cualquier código que coloque fuera de esos comentarios el cubemx los eliminará.

Bien dentro della funcion main tenemos las 2 funciones principales para poner al micro a funcionar con las HAL:

Código: [Seleccionar]
 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();


La primera, inicializa todo lo necesario para que las librerías HAL puedan funcionar:

Código: [Seleccionar]
 * @brief  This function is used to initialize the HAL Library; it must be the first
  *         instruction to be executed in the main program (before to call any other
  *         HAL function), it performs the following:
  *           Configure the Flash prefetch, instruction and Data caches.
  *           Configures the SysTick to generate an interrupt each 1 millisecond,
  *           which is clocked by the HSI (at this stage, the clock is not yet
  *           configured and thus the system is running from the internal HSI at 16 MHz).
  *           Set NVIC Group Priority to 4.
  *           Calls the HAL_MspInit() callback function defined in user file
  *           "stm32f4xx_hal_msp.c" to do the global low level hardware initialization

Luego llamamos a la funcion que se encarga de "acelerar" el clock del micro a la frecuencia configurada en el cubemx. Hasta acá el micro corría a 16MHz usando reloj RC interno (HSI). Al pasar por dicha funcion el micro ya correrá a los 168MHz configurados.
Estas dos funciones son las que usaremos de entrada nuestro segundo workspace con un proyecto limpio.

Luego viene el siguiente código:

Código: [Seleccionar]
 /* Initialize all configured peripherals */
  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

Aquí tenemos otra funcion que generó el MX y que se encargará de configurar el GPIO de acuerdo a lo elegido en el cubemx:

Código: [Seleccionar]
void MX_GPIO_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct;

  /* GPIO Ports Clock Enable */
  __GPIOH_CLK_ENABLE();
  __GPIOA_CLK_ENABLE();
  __GPIOD_CLK_ENABLE();
  __GPIOB_CLK_ENABLE();

  /*Configure GPIO pin : PA0 */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : PD12 PD13 PD14 PD15 */
  GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

}

Como ven se configura el PA0 como entrada (pulsador azul) y los PD12 a 15 como salidas (los 4 led's)
Entramos en el bucle infinito donde pondremos nuestro código para jugar con los led y el pulsador.
Las placas de evaluacion vienen con un conjunto de librerías para usar el hardware que traen (BSP). Por lo que veo el cubemx no incluye un juego de esas librerías por lo que deberemos hacer las cosas usando las HAL directamente.
Para ello tenemos la funcion HAL_GPIO_WritePin.
Agreguemos el siguiente código:

Código: [Seleccionar]
 while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);
 HAL_Delay(500);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);
 HAL_Delay(500);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
 HAL_Delay(500);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_SET);
 HAL_Delay(500);
 HAL_GPIO_WritePin(GPIOD, GPIO_PIN_15, GPIO_PIN_RESET);
  }
  /* USER CODE END 3 */

Ahora veamos como hacer el debug del proyecto.
Primero debemos hacer un build del proyecto. Botón derecho sobre el proyecto y elegimos BUILD. Luego debemos hacer que el binario creado aparezca en el proyecto (otro bug del sistema) boton derecho sobre el proyecto y elegimos REFRESH. Luego apretamos en el pequeño triangulito al costado del bichito verde y elegimos como en la siguiente image:



con esto se crea de forma automática (algo ue se resolvió en la nueva version del SW, la 1.3) el script para el debug.
Se carga el programa y se nos detiene en la instruccion HAL_Init. Le damos a Resume y el código empieza a funcionar...
El resultado?

este:


en la proxima veremos como pasar esto al proyecto creado sin el cube y avanzar con la programacion.

Saludos!
« Última modificación: 09 de Agosto de 2015, 18:13:50 por elgarbe »
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #36 en: 09 de Agosto de 2015, 16:06:10 »
parece que poco a poco va mejorando ST, menos mal, por que eran insufribles.

si si... muy de a poco...  estoy metido en 2 proyectos que usan micros de ST y no me queda otra que sufrirlos... pero ya le estoy tomando cariño y por lo menos están metiéndole guita/tiempo a sus herramientas...

sds.
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #37 en: 09 de Agosto de 2015, 16:16:01 »


Que chulada, yo hace tiempo que estoy liado con otros temas, y ya no puedo dedicarle ni un segundo a mis queridos STM32.

Si algún día tengo un rato libre, me volveré a poner con ellos, el problema es que me he metido ya de lleno en desarrollos comerciales, con clientes que piden y encargan cosas a medida, otros clientes piden productos estandar que tengo que ensamblar, y desgraciadamente eso ya no me deja tiempo para hacer lo que quiera.

Mi prioridad ahora mismo es invertir en herramientas de trabajo, para hacer las cosas rápido y con comodidad. A ver si me compro el cacharro ese para formatear y cortar los pines de los componentes pasantes, es de lo que poco que me queda por conseguir, después de haber comprado la batea de soldadura, además de la "Pick and Place".

Cada vez me gustan más y más lo STM32, el problema es que sin una formación profunda, no los puedo aplicar en productos comerciales, ojalá tuviera la soltura y conocimientos que tengo con los PIC, pero con los STM32, seguramente ya no volvería a usar ningún PIC.

Quedate tranquilo que dentro de 5 años vas a volver a tener tiempo para jugar con estas cosas los findes... por lo menos a mi me tomó 5 años poner la empresa en marcha... ojo, no estoy ni cerca de estar al pedo, pero por lo menos ya no tengo que soldar transistores yo!  ;-)

yo creo que cuando tengas un nuevo proyecto con uC, vas a poder usar los STM32, ya estan con la madurez necesaria, creo que no te va a llevar mucho tiempo ponerlos en marcha, he visto tus post y sabes muchísimo asi que no creo que te sea complicado. Yo vengo trabajando 12 horas semanales en un proyecto comercial con el 411 y ya tengo muchas cosas funcionando. Configuro un codec de audio por I2C, envío y recivo sonido en full duplex por el I2S y haciendo uso del DMA, tengo funcionando el USB device como CDC, tengo algo de freeRTOS, lectura de un sensor MEMS por SPI y DMA a un par de MHZ... creo que con lo que estoy posteando ahora y la forma que encontré para trabajar entre el cubemx y con proyectos sin el cubemx las cosas caminan bastante bien.

En cuanto a poner en marcha la produccion, ánimo! que vas de 10!!! yo no sé como será en espeña, pero si estuvieses en argentina te diría que no tengas nada de miedo en comprar máquinas y equipos, en alguna le vas a errar y no te va a servir, pero no será dinero perdido, siempre hay mercado para re vender las máquinas, a mi me paso con una CNC para circuitos impresos (en mi empresa hacemos todo, desde el diseño del producto hasta los impresos y el armado SMT para llegar al producto final) y despues de unos meses la pude reubicar a otra gente que quería hacer cosas en MDF...

saludos!
-
Leonardo Garberoglio

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: System Workbech y mis comienzos con ST
« Respuesta #38 en: 09 de Agosto de 2015, 16:28:54 »
.

Ojalá llegue el día que pueda usar un STM32 en un producto comercial, le tengo muchas ganas, pero de momento no tengo ni lo fundamental para mi, que es un bootloader encriptado, imprescindible para poder dar actualizaciones a los clientes, sin que te copien el firmware. Toda la parte del PC, la tengo porque ya la hicé para los PIC32, y las rutinas en C para desencriptar en el micro, también las tengo.

Estuve mirando hace tiempo, y abri un post, para crear el bootloader, incluso hay por internet algunos proyectos de base de un bootloader casi completos, solo necesitan algún pequeño retoque, pero me desvíe a otros temas, y por el camino se quedo el tema sin acabarlo.

Lo de las herramientas, creo que por ahora todas las inversiones que he hecho han sido buenas, aunque algunas como la cortadora laser, todavía no le he sacado mucho rendimiento, pero ya llegará. Ahora espero con desesperación la llegada de la batea de soldadura, tengo muchas placas con componentes pasantes que soldar y pierdo muchisimo tiempo haciéndolo a mano.

En el último pedido que he hecho a los polacos metí otra barra de 1 kilo de estaño para la batea, y ya van 5 kilos, yo creo que será suficiente para poder soldar con comodidad sin que las patitas de los componentes toquen el fondo, y sin tener que gastarme una barbaridad de dinero para llenarla.
« Última modificación: 09 de Agosto de 2015, 16:34:14 por planeta9999 »

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: System Workbech y mis comienzos con ST
« Respuesta #39 en: 09 de Agosto de 2015, 19:03:29 »
Bien, avanzemos con lo que, para mí, es lo más importante, crear un proyecto vacío usando el system workbench y con las HAL como librerías externas. Para ello, creamos una nueva carpeta que será nuestro nuevo workspace, abrimos el SystemWorbench y hacemos el Switch de workspace a la nueva carpeta creada. Una vez hecho esto vamos a File->New->C Project, en la siguiente ventana ponemos el nombre del proyecto y elegimos AC6 STM32 MCU GCC como tipo de proyecto. En la siguiente pantalla dejamos elejidas las dos configuraciones, Debug y Release. En la siguiente pantalla buscamos nuestra discovery. Y finalmente, en la ultima pantalla elegimos Hardware Abstraction Layer (Cube HAL). Hecho esto ya tenemos nuestro proyecto "casi vacío" enlazado con las librerías HAL en nuestro workspace. Tendremos algo así:



En este caso, al generar el proyecto con el SW se nos agrega un include hacia unas utilidades para la discovery: stm32f4_discovery.h
Si seguimos dicho archivo, encontramos estas funciones:
Código: [Seleccionar]
/** @defgroup STM32F4_DISCOVERY_LOW_LEVEL_Exported_Functions
  * @{
  */
uint32_t BSP_GetVersion(void);
void     BSP_LED_Init(Led_TypeDef Led);
void     BSP_LED_On(Led_TypeDef Led);
void     BSP_LED_Off(Led_TypeDef Led);
void     BSP_LED_Toggle(Led_TypeDef Led);
void     BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef Mode);
uint32_t BSP_PB_GetState(Button_TypeDef Button);
Al final del .h mencionado. Estas son librerías a nivel de BOARD, mientras que las HAL son a nivel de HARDWARE.

Bien, pero como podemos ver nuestro main.c esta casi pelado. Bueno, comentar que siempre el inicio del código se encuentra en el archivo startup_stm32f407xx.s
Ahi se configuran los vectores de interrupcion, el stack, y el contador de programa apuntando al vector de reset.
Como ya vimos aquí se ejecuta la funcion SystemInit (que debe estar implementada en algún lado) antes de llamar al main. En este caso, como ya vimos, se encuentra en system_stm32f4xx.c.
Bien, todo esto ya esta visto y lo que nos queda es iniciar las HAL, reconfigurar el reloj y empezar a escrivir código.
Entonces simplemente escrivimos:

Código: [Seleccionar]
#include "stm32f4xx.h"
#include "stm32f4_discovery.h"

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);

int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* Configure the system clock */
SystemClock_Config();

for(;;);
}

/** System Clock Configuration
*/
void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
                              |RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);

  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

}

Como ven hemos traido el SystemClock_Config del proyecto generado con el CubeMX.
Hay un pequeño bug en la generacion de proyectos con el SW y es ue nos marca como type xxxx could not be resolved. Eso se soluciona regenrando los indices:



ya estamos en condiciones de hacer un build para ver que valla todo bien.
Ahora tenemos que hacer uso de las HAL o las BSP para usar los led de la placa.
Para eso tenemos 3 funciones que inicializa, enciende, apaga un led de la Discovery:

Código: [Seleccionar]
/**
  * @brief  Configures LED GPIO.
  * @param  Led: Specifies the Led to be configured.
  *   This parameter can be one of following parameters:
  *     @arg LED4
  *     @arg LED3
  *     @arg LED5
  *     @arg LED6
  * @retval None
  */
void BSP_LED_Init(Led_TypeDef Led)

/**
  * @brief  Turns selected LED On.
  * @param  Led: Specifies the Led to be set on.
  *   This parameter can be one of following parameters:
  *     @arg LED4
  *     @arg LED3
  *     @arg LED5
  *     @arg LED6 
  * @retval None
  */
void BSP_LED_On(Led_TypeDef Led)

/**
  * @brief  Turns selected LED Off.
  * @param  Led: Specifies the Led to be set off.
  *   This parameter can be one of following parameters:
  *     @arg LED4
  *     @arg LED3
  *     @arg LED5
  *     @arg LED6
  * @retval None
  */
void BSP_LED_Off(Led_TypeDef Led)

Entonces el código a agregar al main es el siguiente:

Código: [Seleccionar]
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* Configure the system clock */
SystemClock_Config();

BSP_LED_Init(LED4);
BSP_LED_Init(LED3);
BSP_LED_Init(LED5);
BSP_LED_Init(LED6);

while(1)
{
BSP_LED_On(LED4);
HAL_Delay(200);
BSP_LED_Off(LED4);
BSP_LED_On(LED3);
HAL_Delay(200);
BSP_LED_Off(LED3);
BSP_LED_On(LED5);
HAL_Delay(200);
BSP_LED_Off(LED5);
BSP_LED_On(LED6);
HAL_Delay(200);
BSP_LED_Off(LED6);
}
}

El resultado, el mismo!

Saludos!
-
Leonardo Garberoglio

Desconectado Robert76

  • PIC18
  • ****
  • Mensajes: 295
Re:System Workbech y mis comienzos con ST
« Respuesta #40 en: 28 de Octubre de 2019, 10:39:24 »
Buen día gente. Pensé qué sería mejor no abrír un nuevo tema por una consulta tan simple y ahí va.
Estoy iniciando en éste mundo de ST.
He descargado el IDE STM32CUBE MX.
Me parece una herramienta potente y pulida, ya que alberga la posibilidad de configuración de CUBE MX todo en uno.
El detalle viene que a la hora de empezar a manejar periféricos tan comunes como un LCD con el controlador HD44780, empiezo a darme contra la pared, al no encontrar ejemplos para ésta IDE, y lo poco que hay, hay que modificar (y me veo imposibilitado por novato)
Mi pregunta, existe algún repositorio de ejemplos para que uno pueda importar?
Seguramente lo que busco, está frente a mis ojos, pero honestamente no lo veo.
Muchas gracias!
« Última modificación: 28 de Octubre de 2019, 10:42:50 por Robert76 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7682
Re:System Workbech y mis comienzos con ST
« Respuesta #41 en: 28 de Octubre de 2019, 23:05:42 »
No que conozca Robert.

Pero si podes buscar en google "STM32 HD44780 github" ejemplo:

https://github.com/Derecho/stm32-hd44780/blob/master/hd44780/hd44780.c
https://github.com/4ilo/HD44780-Stm32HAL   <- usando HAL
https://github.com/firebull/STM32-LCD-HD44780-I2C <- con I2C/DMA
https://github.com/EarToEarOak/STM32F4-HD44780  Otro, por interrupciones, usando un timer para enviar las cosas. y HAL

Tenes para elegir :P
« Última modificación: 28 de Octubre de 2019, 23:12:39 por KILLERJC »

Desconectado Robert76

  • PIC18
  • ****
  • Mensajes: 295
Re:System Workbech y mis comienzos con ST
« Respuesta #42 en: 29 de Octubre de 2019, 16:35:26 »
Gracias por la info KILLER, 
todo lo que he encontrado ha sido prácticamente de Github.
Ahora me pongo a ver esos links.


 

anything