Fecha: enero 9, 2023
Autor: Guillermo Garcia
Categorías: Visual Studio Code Etiquetas: Development tools
Hemos instalado las herramientas necesarias en el primer artículo de la serie Visual Studio Code for ARM with CMake #1 Instalación. En este articulo vamos a crear una estructura de proyecto que utilizaremos a lo largo de esta serie.
Trabajaremos en un kit de desarrollo NUCLEO-G071RB. Recordemos que este entorno se puede configurar para cualquier plataforma basada en arquitectura ARM.
Table of Contents
Comenzaremos por definir una estructura de proyecto. Para organizar los archivos fuente donde estará nuestra aplicación principal y controladores.
Vamos a Visual Studio Code y crearemos una serie de carpetas donde organizaremos nuestros archivos fuente.
Aquí hay una descripción veamos qué tipo de archivo contendrá cada carpeta.
Sin embargo esta estructura de proyecto funciona para mí, pero realmente depende de usted cómo organiza los archivos.
Es momento de recolectar los controladores para nuestro MCU para esta serie hemos elegido un MCU muy básico porque queremos mantenerlo simple.
Para la plataforma STM32 proporciona los controladores HAL así que emplearemos estos controladores, para esto descargamos la librería para STM32G0 desde la página de ST.
Aquí tenemos todos los archivos fuente que necesitamos comencemos a colocar los archivos en las carpetas correspondientes.
Dentro de la librería STM32G0 encontramos los archivos necesarios para CMSIS agregamos los archivos de cabecera correspondiente a nuestro G071RB.
Aquí tenemos que buscar dentro de la librería STM32G0 para encontrar los archivos específicos para nuestro G071RB.
Dentro de la carpeta Device se agregan los archivos svd, estos archivos contienen una descripción sobre el hardware de MCU a nivel de periférico son importantes ya que nuestra herramienta de depuración necesita esta descripción para realizar el mapeo de los registros al momento de la depuración.
Estos archivos se pueden descargar desde la página de ST-svd.
Buscamos la carpeta de controladores para STM32G0, los colocamos dentro de esta carpeta. En la configuración de compilación elegiremos que controladores agregar al proceso de compilación.
Por ahora no colocaremos nada en esta carpeta más adelante en próximos artículos agregaremos soporte para SEGGER RTT y SystemView.
Crearemos nuestro archivo fuente de entrada main y la función principal.
main.c
#include "main.h" void SystemClock_Config(void); static GPIO_InitTypeDef GPIO_InitStruct = {0}; int main(void) { HAL_Init(); SystemClock_Config(); __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Pin = GPIO_PIN_5; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); while(1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); HAL_Delay(100); } return 0; } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4; RCC_OscInitStruct.PLL.PLLN = 70; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV10; RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV5; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV5; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { } }
main.h
#ifndef _MAIN_PROGRAM_ #define _MAIN_PROGRAM_ #ifdef __cplusplus extern "C" { #endif #include "stm32g0xx_hal.h" #include "stm32g071xx.h" #include "stm32g0xx.h" #ifdef __cplusplus } #endif #endif /* _MAIN_PROGRAM_ */
Deja una respuesta