stm32-es.pdf

stm32 #stm32 Tabla de contenido Acerca de 1 Capítulo 1: Empezando con stm32 2 Observaciones 2 ¿Qué es STM32? 2

Views 116 Downloads 1 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Citation preview

stm32

#stm32

Tabla de contenido Acerca de

1

Capítulo 1: Empezando con stm32

2

Observaciones

2

¿Qué es STM32?

2

Producción en serie

2

Tableros de desarrollo

2

Versiones

3

Examples

3

Ejemplo de instalación por primera vez con LED parpadeante utilizando SW4STM32 y la biblio

3

Instalacion IDE

3

Creando un proyecto

3

Aplicación de LED de parpadeo

6

Capítulo 2: Entornos de desarrollo integrado (IDE)

10

Introducción

10

Observaciones

10

Examples

14

SW4STM32: System Workbench para STM32

14

Introducción

14

Instalación

15

IAR-EWARM

15

Introducción

15

Instalación

16

Atolico - TrueSTUDIO

16

Introducción

16

Instalación

16

Coide

17

Introducción

17

Instalación

17

Capítulo 3: UART - Receptor / transmisor asíncrono universal (comunicación serie) Introducción

18 18

Examples

18

Aplicación de eco - biblioteca HAL

18

Transmita gran cantidad de datos utilizando DMA e interrupciones - biblioteca HAL

19

Creditos

23

Acerca de You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: stm32 It is an unofficial and free stm32 ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official stm32. The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners. Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected]

https://riptutorial.com/es/home

1

Capítulo 1: 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 + Alto rendimiento:

Cortex-M3

Cortex-M4

Cortex-M7

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:

+++

++

++

https://riptutorial.com/es/home

2

Conectividad

Núcleo STM32 ( mbed habilitado )

Kits de descubrimiento

Tableros de evaluación

Arduino ™, ST, Morpho

ST

ST

Versiones Versión

Fecha de lanzamiento

1.0.0

2016-11-01

Examples 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.) https://riptutorial.com/es/home

3

1. Abra SW4STM32 y cree un nuevo proyecto de C: Archivo → Nuevo → Proyecto de C 2. 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.

3. El siguiente paso es la configuración de Debug / Release , se puede omitir ahora haciendo clic en Siguiente. 4. 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.

https://riptutorial.com/es/home

4

5. 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.

https://riptutorial.com/es/home

5

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 .

https://riptutorial.com/es/home

6

Los nombres de puerto y pin reales ya están ocultos por algunos #define y enum , use Ctrl + Click para rastrearlos. 1. Dentro de main , llame a la función HAL_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). 2. 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. 3. Inicialización de los periféricos, en este caso un pin GPIO. 4. Dentro de un bucle sin fin, llame al LED para alternar y la función HAL_Delay() . HAL_Delay() usa el Systick 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

https://riptutorial.com/es/home

7

* Main regulator output voltage * Flash Latency(WS) * @param None * @retval None */ void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct;

= Scale1 mode = 5

// 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

https://riptutorial.com/es/home

8

botón Depurar. Lea Empezando con stm32 en línea: https://riptutorial.com/es/stm32/topic/7617/empezando-constm32

https://riptutorial.com/es/home

9

Capítulo 2: Entornos de desarrollo integrado (IDE) Introducción El propósito de este tema es enumerar todos los entornos de desarrollo integrado (IDE) que se pueden usar para desarrollar software para microcontroladores STM32. Los ejemplos deben contener: 1. Lista de las características principales del IDE. 2. Lista de los sistemas operativos soportados por el IDE. 3. Proceso de instalación. 4. Pasos de configuración adicionales (si los hay).

Observaciones IDE listados por ST Microelectronics: Número de pieza

Descripción general

Coide

CooCox CoIDE, un entorno de desarrollo de software gratuito y altamente integrado para MCU ARM Cortex

Cosmicida

Cosmic ARM / Cortex "M" Herramientas de desarrollo cruzado para el microcontrolador STM32

CrossWorks

Rowley Associates CrossWorks, entorno de desarrollo integrado con descarga y depuración JTAG Flash

DS-5

ARM Development Studio 5 (DS-5) proporciona las

https://riptutorial.com/es/home

Estado de comercialización

Activo

Activo

Activo

Activo

Proveedor

Tipo de software

CooCox

Suites de desarrollo SW

Cósmico

Suites de desarrollo SW

Rowley

Suites de desarrollo SW

BRAZO

Suites de desarrollo SW 10

Número de pieza

Descripción general

Estado de comercialización

Proveedor

Tipo de software

Activo

Emprog

Firmware

Hitex

Suites de desarrollo SW

IAR

Suites de desarrollo SW

Activo

Keil

Suites de desarrollo SW

Suites de desarrollo SW

Firmware

mejores herramientas de su clase para la gama más amplia de plataformas basadas en procesadores ARM

EMP-Thunder

Emprog ThunderBench, herramientas de desarrollo C / C ++ completamente integradas y bien diseñadas para ARM Cortex

Hitop5

Interfaz de usuario universal, IDE y depurador para todas las herramientas de desarrollo de Hitex

IAR-EWARM

IAR Entorno de desarrollo integrado y optimización del compilador C / C ++ para ARM Cortex-M

MDK-ARMSTM32

Entorno de desarrollo de software MDK-ARM para MCU basadas en Cortex-M

MULTI

Desarrollo integrado y entorno de depuración de GreenHills para aplicaciones integradas que utilizan C y C ++

Activo

Software GreenHills

Hombres-

Nucleus SmartFit

Activo

Gráficos Mentor

https://riptutorial.com/es/home

Activo

Activo

11

Número de pieza

Descripción general

Nucleus-SF

para STM32

PER-trazador

Percepio analizador de trazas en tiempo de ejecución para MCU STM32

PLSUDE-STM32

Plataforma de depuración y emulación con soporte optimizado de rastreo y flash para MCU basadas en STM32 Cortex-M por herramientas de desarrollo PLS

RIDE-STM32

Entorno de desarrollo integrado de marca Raisonance para MCU STM32

SOMN-DRT-IDE

SOMNIUM DRT Cortex-M IDE

SW4STM32

System Workbench para STM32: IDE libre en Windows, Linux y OS X

TASKINGVXSTM32

Herramientas del compilador y depurador C / C ++ de Altium para MCU basadas en ARM

TrueSTUDIO

La principal herramienta de desarrollo de C / C ++ para el desarrollo de STM32, con su conjunto de características inigualables e

https://riptutorial.com/es/home

Estado de comercialización

Proveedor

Activo

Percepio

Tipo de software

Por favor

Suites de desarrollo SW

Raisonance

Suites de desarrollo SW

SOMNIO

Suites de desarrollo SW

Activo

AC6

Suites de desarrollo SW

Activo

TAREA

Firmware

Atolico

Suites de desarrollo SW

Activo

Activo

Activo

Activo

12

Número de pieza

Descripción general

Estado de comercialización

Proveedor

Tipo de software

Activo

sistema de iSistema

Suites de desarrollo SW

Mikroelectronika

Suites de desarrollo SW

Mikroelectronika

Suites de desarrollo SW

Mikroelectronika

Suites de desarrollo SW

integración sin precedentes.

iSYSwinIDEAEApen

La plataforma de desarrollo de software ilimitado gratuito de iSYSTEM para todos los dispositivos basados en STM32 Cortex-M

mikroBasicPRO

MikroElektronika Compilador básico con todas las funciones que hace que el desarrollo de STM32 sea adecuado para todos

mikroCPRO

MikroElektronika compilador ANSI C con todas las funciones para dispositivos STM32. Cuenta con un IDE intuitivo, potente compilador con optimizaciones avanzadas.

mikroPascalPRO

MikroElektronika compilador Pascal completo para dispositivos STM32. Tiene un IDE intuitivo con soporte de acoplamiento, muchas funciones, editor de texto avanzado, muchas herramientas disponibles, bibliotecas y ejemplos.

https://riptutorial.com/es/home

Activo

Activo

Activo

13

Número de pieza

Descripción general

Estado de comercialización

Proveedor

Tipo de software

winIDEA-STM32

La solución completa de prueba y desarrollo de software de iSYSTEM para los MCU STM32

Activo

sistema de iSistema

Firmware

Examples SW4STM32: System Workbench para STM32

Introducción System Workbench para STM32 es un IDE gratuito en Windows, Linux y OS X. Descripción de ST Microelectronics : La cadena de herramientas System Workbench, llamada SW4STM32, es un entorno de desarrollo de software multisistema gratuito basado en Eclipse, que admite la gama completa de microcontroladores STM32 y placas asociadas. La cadena de herramientas SW4STM32 se puede obtener en el sitio web www.openstm32.org, que incluye foros, blogs y capacitaciones para soporte técnico. Una vez registrado en este sitio, los usuarios recibirán instrucciones de instalación en la página Documentación> Sistema de Workbench para continuar con la descarga de la cadena de herramientas gratuita. La cadena de herramientas System Workbench y su sitio web colaborativo han sido creados por AC6, una compañía de servicios que brinda capacitación y consultoría en sistemas integrados. Este producto es suministrado por un tercero no afiliado a ST. Para obtener la información más reciente sobre la especificación, consulte el sitio web del tercero: www.ac6.fr. Características clave • Soporte completo para microcontroladores STM32, tableros Nucleo STM32, kits Discovery y tableros de evaluación, así como firmware STM32 (biblioteca de periféricos estándar o STM32Cube HAL) • GCC C / C ++ compilador • Depurador basado en GDB • Eclipse IDE con gestión de trabajo en equipo. • Compatible con plug-ins Eclipse • Soporte ST-LINK https://riptutorial.com/es/home

14

• No hay límite de tamaño de código • Soporte para múltiples sistemas operativos: Windows®, Linux y OS X®

Instalación 1. Vaya a: http://www.openstm32.org/HomePage . 2. Regístrese e inicie sesión en el sitio. 3. Vaya a: http://www.openstm32.org/Downloading+the+System+Workbench+for+STM32+installer . 4. Descarga la última versión para tu sistema operativo. 5. Ejecute el instalador descargado.

IAR-EWARM

Introducción IAR Entorno de desarrollo integrado y optimización del compilador C / C ++ para ARM Cortex-M. Descripción de ST Microelectronics : IAR-EWARM es una suite de desarrollo de software que se entrega con archivos de configuración de dispositivos listos para usar, cargadores de flash y 4300 proyectos de ejemplo incluidos. IAR Embedded Workbench es compatible con otros compiladores compatibles con ARM®EABI y es compatible con los siguientes puntajes ARM® para STM32: Características clave 1. Componentes clave: • Entorno de desarrollo integrado con herramientas de gestión de proyectos y editor. • Optimizador de C y C ++ altamente optimizado para ARM® • Comprobación automática de las reglas de MISRA C (MISRA C: 2004) • Cumplimiento de ARM® EABI y CMSIS • Amplio soporte de sistema de destino HW • Sondeos de depuración en circuito opcionales I-jet y JTAGjet ™ • Depuración de energía para visualizar el consumo de energía en correlación con el código fuente • Bibliotecas en tiempo de ejecución incluyendo código fuente • Reubicación del ensamblador ARM® • Linker y herramientas bibliotecarias • Depurador C-SPY® con simulador ARM®, compatibilidad con JTAG y compatibilidad con la depuración en hardware basada en RTOS • Plugins RTOS disponibles de los proveedores de sistemas IAR y RTOS • Más de 3100 proyectos de muestra para paneles de evaluación de muchos fabricantes diferentes • Guías de usuario y referencia en formato PDF.

https://riptutorial.com/es/home

15

• Ayuda en línea sensible al contexto 2. Soporte específico del chip: • 4300 proyectos de ejemplo incluidos para tableros de evaluación STMicroelectronics • Soporte para aplicaciones de 4 Gbyte en modo ARM® y Thumb® • Cada función se puede compilar en modo ARM® o Thumb® • Generación de código de coprocesador de punto flotante vectorial VFP • Soporte intrínseco NEON ™ 3. Soporte de depuración de hardware: • STMicroelectronics ST-LINK V2: admite dispositivos STM32 • STMicroelectronics ST-LINK: admite dispositivos STM32 4. Soporte RTOS: consultar el sitio web de IAR http://www.iar.com 5. Dispositivos compatibles: consulte el sitio web de IAR http://www.iar.com

Instalación Atolico - TrueSTUDIO

Introducción C / C ++ IDE para desarrollo ARM. Atollic TrueSTUDIO® se prueba y verifica en los siguientes sistemas operativos: • • • • • • • •

Microsoft® Windows®Vista (versión de 32 bits) Microsoft® Windows® Vista (versión de 64 bits) Microsoft® Windows® 7 (versión de 32 bits) Microsoft® Windows® 7 (versión de 64 bits) Microsoft® Windows® 8 (versión de 64 bits) Microsoft® Windows® 10 (versión de 64 bits) Se espera soporte para Linux a finales de 2016 Q4 Se espera soporte para Mac OS X 2017 Q2

TrueSTUDIO solo está disponible como una aplicación de 32 bits .

Instalación El producto Atollic TrueSTUDIO se entrega como un instalador ejecutable. Asegúrese de que la cuenta de usuario, desde la que se inicia el instalador, tenga privilegios administrativos. No hay necesidad de registro o conexión a internet durante la instalación. Cuando TrueSTUDIO está instalado, se ejecutará en modo Lite si no se detectan licencias. 1. Vaya a: http://atollic.com/resources/downloads/ . 2. Descarga la última versión estable o la última versión beta. 3. Ejecuta el instalador. https://riptutorial.com/es/home

16

Coide

Introducción CooCox CoIDE, un entorno de desarrollo de software gratuito y altamente integrado para MCU ARM Cortex. Descripción de ST Microelectronics : CoIDE es un entorno de desarrollo de software gratuito basado en la cadena de herramientas Eclipse y GCC, que se ha personalizado y simplificado para ofrecer a los usuarios un acceso fácil a los microcontroladores ARM® Cortex®-M. Este producto es suministrado por un tercero no afiliado a ST. Para obtener información completa y actualizada sobre las especificaciones y los paquetes de las piezas compradas, consulte el sitio web de terceros www.coocox.org. Características clave • Soporte completo para microcontroladores STM32, placas STM32 Nucleo y bibliotecas de software STM32Cube. • Compilador GCC C / C ++. • Depurador basado en GDB. • Eclipse simplificado IDE. • Soporte ST-Link. • Soporte multilenguaje: inglés, chino.

Instalación Lea Entornos de desarrollo integrado (IDE) en línea: https://riptutorial.com/es/stm32/topic/7741/entornos-de-desarrollo-integrado--ide-

https://riptutorial.com/es/home

17

Capítulo 3: UART - Receptor / transmisor asíncrono universal (comunicación serie) Introducción Este tema trata sobre la comunicación en serie utilizando el periférico receptor / transmisor asíncrono universal (UART) de los microcontroladores STM32.

Examples Aplicación de eco - biblioteca HAL En este ejemplo, el microcontrolador devuelve los bytes recibidos al remitente utilizando la interrupción UART RX. #include "stm32f4xx.h" UART_HandleTypeDef huart2; /* Single byte to store input */ uint8_t byte; void SystemClock_Config(void); /* UART2 Interrupt Service Routine */ void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&huart2); } /* This callback is called by the HAL_UART_IRQHandler when the given number of bytes are received */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart->Instance == USART2) { /* Transmit one byte with 100 ms timeout */ HAL_UART_Transmit(&huart2, &byte, 1, 100); /* Receive one byte in interrupt mode */ HAL_UART_Receive_IT(&huart2, &byte, 1); } } void uart_gpio_init() { GPIO_InitTypeDef GPIO_InitStruct; __GPIOA_CLK_ENABLE(); /**USART2 GPIO Configuration PA2 ------> USART2_TX

https://riptutorial.com/es/home

18

PA3 ------> USART2_RX */ GPIO_InitStruct.Pin = GPIO_PIN_2 | GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_LOW; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void uart_init() { __USART2_CLK_ENABLE(); huart2.Instance = USART2; huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart2); /* Peripheral interrupt init*/ HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); } int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); uart_gpio_init(); uart_init(); HAL_UART_Receive_IT(&huart2, &byte, 1); while(1) { } }

Este ejemplo utiliza un descubrimiento STM32F4 (STM32F407VG), GPIO y los valores de función alternativos deben cambiarse de acuerdo con el microcontrolador STM32 en uso.

Transmita gran cantidad de datos utilizando DMA e interrupciones - biblioteca HAL En este ejemplo, se transferirán 2000 bytes utilizando las interrupciones DMA, Transmit Half Half y Transmit Complete para obtener el mejor rendimiento. La primera mitad del búfer de transmisión se carga con nuevos datos por parte de la CPU en la devolución de llamada de interrupción de la mitad completa de transmisión, mientras que la segunda mitad del búfer está siendo transmitida por el DMA en segundo plano.

https://riptutorial.com/es/home

19

Luego, en Transmit Complete ( Final de transmisión), la CPU carga la segunda mitad del búfer de transmisión, mientras que la DMA transmite la primera mitad (previamente actualizada) en segundo plano. #include "stm32f4xx.h" uint8_t dma_buffer[2000]; volatile uint8_t toggle = 0; UART_HandleTypeDef huart2; DMA_HandleTypeDef hdma_usart2_tx; void uart_gpio_init() { GPIO_InitTypeDef GPIO_InitStruct; __GPIOA_CLK_ENABLE(); /**USART2 GPIO Configuration PA2 ------> USART2_TX PA3 ------> USART2_RX */ GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF7_USART2; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } void uart_dma_init() { /* DMA controller clock enable */ __DMA1_CLK_ENABLE(); /* Peripheral DMA init*/ hdma_usart2_tx.Instance = DMA1_Stream6; hdma_usart2_tx.Init.Channel = DMA_CHANNEL_4; hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE; hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE; hdma_usart2_tx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; hdma_usart2_tx.Init.Mode = DMA_NORMAL; hdma_usart2_tx.Init.Priority = DMA_PRIORITY_LOW; hdma_usart2_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; HAL_DMA_Init(&hdma_usart2_tx); __HAL_LINKDMA(&huart2,hdmatx,hdma_usart2_tx); /* DMA interrupt init */ HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); } void uart_init() { __USART2_CLK_ENABLE(); huart2.Instance = USART2;

https://riptutorial.com/es/home

20

huart2.Init.BaudRate = 115200; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart2.Init.OverSampling = UART_OVERSAMPLING_16; HAL_UART_Init(&huart2); /* Peripheral interrupt init*/ HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); } /* This function handles DMA1 stream6 global interrupt. */ void DMA1_Stream6_IRQHandler(void) { HAL_DMA_IRQHandler(&hdma_usart2_tx); } void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&huart2); } void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { uint16_t i; toggle = !toggle; for(i = 1000; i < 1998; i++) { if(toggle) dma_buffer[i] = '&'; else dma_buffer[i] = 'z'; } dma_buffer[1998] = '\r'; dma_buffer[1999] = '\n'; } void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart) { uint16_t i; for(i = 0; i < 1000; i++) { if(toggle) dma_buffer[i] = 'y'; else dma_buffer[i] = '|'; } } int main(void) { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); uart_gpio_init();

https://riptutorial.com/es/home

21

uart_dma_init(); uart_init(); uint16_t i; for(i = 0; i < 1998; i++) { dma_buffer[i] = 'x'; } dma_buffer[1998] = '\r'; dma_buffer[1999] = '\n'; while(1) { HAL_UART_Transmit_DMA(&huart2, dma_buffer, 2000); } }

El ejemplo fue escrito para una placa de descubrimiento STM32F4 (STM32F407VG). La instancia DMA apropiada, el canal UART-DMA, GPIO y la configuración de la función alternativa deben cambiarse de acuerdo con el microcontrolador STM32 en uso. Lea UART - Receptor / transmisor asíncrono universal (comunicación serie) en línea: https://riptutorial.com/es/stm32/topic/9707/uart---receptor---transmisor-asincrono-universal-comunicacion-serie-

https://riptutorial.com/es/home

22

Creditos S. No

Capítulos

Contributors

1

Empezando con stm32

Bence Kaulics, Community

2

Entornos de desarrollo integrado (IDE)

Bence Kaulics

3

UART - Receptor / transmisor asíncrono universal (comunicación serie)

Bence Kaulics

https://riptutorial.com/es/home

23