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