Empezando con stm32
Observaciones#
Esta sección proporciona una descripción general de qué es stm32 y por qué un desarrollador puede querer usarlo.
También debe mencionar cualquier tema grande dentro de stm32, y vincular a los temas relacionados. Dado que la Documentación para stm32 es nueva, es posible que deba crear versiones iniciales de esos temas relacionados.
¿Qué es STM32?#
STM32 es una familia de microcontroladores Flash de 32 bits desarrollada por ST Microelectronics. Se basa en el procesador ARM® Cortex® ‑ M y ofrece una gama de productos de 32 bits que combina un rendimiento muy alto, capacidades en tiempo real, procesamiento de señales digitales y funcionamiento de baja potencia y bajo voltaje.
Puede encontrar una descripción detallada de cada serie, herramientas de desarrollo y decodificación de números de pieza en Wikipedia .
Producción en serie#
Cortex-M0 / -M0 + | Cortex-M3 | Cortex-M4 | Cortex-M7 | |
---|---|---|---|---|
Alto rendimiento: | STM32F2 | STM32F4 | STM32F7 , STM32H7 | |
Corriente principal: | STM32F0 | STM32F1 | STM32F3 | |
Ultra-baja potencia: | STM32L0 | STM32L1 | STM32L4 |
Tableros de desarrollo#
Núcleo STM32 ( mbed habilitado ) | Kits de descubrimiento | Tableros de evaluación | |
---|---|---|---|
Caso de uso típico: | Prototipos flexibles, comunidad. | Prototipos, demostraciones creativas. | Evaluación completa de las características |
Posibilidades de extensión: | +++ | ++ | ++ |
Conectividad | Arduino ™, ST, Morpho | S T | S T |
Versiones#
Versión | Fecha de lanzamiento |
---|---|
1.0.0 | 2016-11-01 |
Ejemplo de instalación por primera vez con LED parpadeante utilizando SW4STM32 y la biblioteca HAL#
( Nota: hay muchos IDE, toolchain y biblioteca que están listos para usar con STM32. La siguiente configuración requiere un mínimo esfuerzo para que funcione, pero es solo uno de los muchos. No dude en explorar otros, no es El propósito de este ejemplo es forzar a cualquiera a usar las herramientas que se utilizarán aquí.
Instalacion IDE#
System Workbench para STM32 : IDE gratuito en Windows, Linux y OS X. Fue construido por AC6 y está disponible para su descarga después del registro desde el sitio web de la Comunidad OpenSTM32 .
El IDE en sí está basado en Eclipse, pero viene con algunos extras para el desarrollo de STM32 como:
- Ac6 STM32 MCU GCC toolchain
- OpenOCD y GDB (arm-none-eabi-gdb) con configuraciones de depuración generadas automáticamente dependiendo de la placa de destino
- Opciones integradas para programar o borrar chip.
Para comenzar con STM32 antes de crear su propia placa, se recomienda experimentar con una placa Discovery , Nucleo o Eval , que viene con un programador / depurador SWD (Debug de cable en serie) a bordo llamado ST-Link.
Creando un proyecto#
Este ejemplo utilizará un kit de descubrimiento STM32F4 , que cuenta con un microcontrolador STM32F407VG. (Cualquier otra tabla puede ser usada también.)
- Abra SW4STM32 y cree un nuevo proyecto de C: Archivo → Nuevo → Proyecto de C
- Asígnele un nombre como "STM32F4_Discovery-Blinky" y, en la lista Tipo de proyecto, elija el proyecto MCU ejecutable / Ac6 STM32 . Por defecto, la única cadena de herramientas disponible es Ac6 STM32 MCU GCC . Haga clic en Siguiente.
- El siguiente paso es la configuración de Debug / Release , se puede omitir ahora haciendo clic en Siguiente.
- Selección de tableros Los tableros existentes se pueden seleccionar como en este ejemplo, se puede agregar el STM32F4 Discovery o los nuevos tableros personalizados.
- El siguiente paso es la configuración del firmware del proyecto . Elija entre No firmware , Standard Peripheral Library (SPL) o Hardware Abstraction Layer (HAL). Se cuestiona cuál es el más adecuado para el desarrollo, pero esta pregunta está fuera de alcance en este ejemplo. Este ejemplo utilizará la biblioteca HAL ya que es compatible actualmente con ST Microelectronics. La herramienta de software adicional disponible para HAL es STM32CubeMX , que es un generador de código de inicialización. Además, los paquetes de software STM32CubeFx o STM32CubeLx disponen de varias aplicaciones de ejemplo. Descargue el firmware de destino si falta y se recomienda seleccionar las opciones "Agregar controladores de bajo nivel en el proyecto" y "Como fuentes en la aplicación" . Por último, haga clic en Finalizar.
Aplicación de LED de parpadeo#
Como este proyecto se creó con un STM32F4 Discovery, ya hay varias funciones listas para usar en la carpeta / STM32F4_Discovery-Blinky / Utilities / STM32F4- project / que se pueden usar para conectar los periféricos del kit Discovery (acelerómetro, audio). , LEDs, pulsador). En este ejemplo, se
void BSP_LED_Init(Led_TypeDef Led)
las void BSP_LED_Init(Led_TypeDef Led)
y void BSP_LED_Toggle(Led_TypeDef Led)
del archivo stm32f4_discovery.c para parpadear el LED verde, que es LED4
. Para decidir qué LED es cuál usa los esquemas del kit Discovery .
Los nombres de puerto y pin reales ya están ocultos por algunos
#define
y enum
, use Ctrl + Click para rastrearlos.- Dentro de
main
, llame a la funciónHAL_Init()
que restablece todos los periféricos, inicializa la interfaz de Flash y el Systick. (Systick se utilizará para generar un retraso para el parpadeo). - El reloj del sistema tiene que ser configurado. Se puede hacer usando la función de configuración del reloj STM32CubeMX o por el manual de referencia. En este ejemplo, el reloj del sistema es alimentado por el PLL interno (Phase Locked Loop), que proviene de un oscilador de cristal externo (HSE) de 8 MHz. Los preescaladores se han configurado para alcanzar la frecuencia máxima disponible, que es de 168 MHz en el caso del Descubrimiento F4.
- Inicialización de los periféricos, en este caso un pin GPIO.
- Dentro de un bucle sin fin, llame al LED para alternar y la función
HAL_Delay()
.HAL_Delay()
usa elSystick
y genera un retraso en milisegundos.
El código completo es el siguiente:
#include "stm32f4xx.h"
#include "stm32f4_discovery.h"
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();
/* Initialize one of the LED GPIO pin */
BSP_LED_Init(LED4);
while(1)
{
BSP_LED_Toggle(LED4);
HAL_Delay(1000); // in miliseconds
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 168000000
* HCLK(Hz) = 168000000
* AHB Prescaler = 1
* APB1 Prescaler = 4
* APB2 Prescaler = 2
* HSE Frequency(Hz) = HSE_VALUE
* PLL_M = (HSE_VALUE/1000000u)
* PLL_N = 336
* PLL_P = 2
* PLL_Q = 7
* VDD(V) = 3.3
* Main regulator output voltage = Scale1 mode
* Flash Latency(WS) = 5
* @param None
* @retval None
*/
void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
// Enable Power Control clock
__PWR_CLK_ENABLE();
// The voltage scaling allows optimizing the power consumption when the
// device is clocked below the maximum system frequency, to update the
// voltage scaling value regarding system frequency refer to product
// datasheet.
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
// Enable HSE Oscillator and activate PLL with HSE as source
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;
// This assumes the HSE_VALUE is a multiple of 1MHz. If this is not
// your case, you have to recompute these PLL constants.
RCC_OscInitStruct.PLL.PLLM = (HSE_VALUE/1000000u);
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
// clocks dividers
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
| 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);
}
Construir con el martillo y descargue la aplicación haciendo clic derecho en la carpeta del proyecto y seleccionando la opción Destino → Programa chip ....
Otra forma de descargar es utilizando debug . Para ello, haga clic en la flecha al lado del icono de error en la barra de herramientas y abra el menú Configuración de depuración ... Cree una nueva configuración de depuración de Ac6 STM32 y, si el campo de la Aplicación C / C ++ está vacío, complete lo siguiente:
Debug \ STM32F4_Discovery-Blinky.elf
El marco genera y completa automáticamente otros parámetros de depuración, como el archivo de configuración de OpenOCD y los puertos Telnet y GDB utilizados. Finalmente, haga clic en el botón Depurar
0 comentarios:
Publicar un comentario