Pequeña introducción
Una vez, cuando conduje al siguiente departamento alquilado, encontré un cierto inconveniente, lo cual fue bastante molesto: el interruptor de la luz en la habitación principal estaba detrás de una pared del gabinete, que estaba atornillada a la pared, y su reorganización era imposible porque Tomó mucho tiempo y esfuerzo. Tenía muchas ganas de resolver este problema y se me ocurrió una idea: ¡hacer un control remoto para controlar la iluminación!
Fue con la idea de crear mi propio control remoto para controlar la luz en la habitación que comenzó mi pasión por la electrónica, los microcontroladores y varios dispositivos de radio.
Lista de artículos:
- Comenzar a estudiar STM32 o administrar la luz de forma inteligente
- Procedimientos iniciales STM32: operaciones de bits
- Primeros pasos STM32: ¿Qué son los registros? ¿Cómo trabajar con ellos?
Después de eso, comencé a estudiar este tema, me familiaricé con los conceptos básicos de la electrónica, ejemplos de dispositivos y aprendí cómo las personas implementan dichos dispositivos. Después de buscar información sobre cómo comenzar a estudiar microcontroladores, descubrí qué es Arduino, con qué comen y cómo trabajar con ellos. La solución fácil parecía muy atractiva, porque hasta donde yo entendía en ese momento, el código se construirá una o dos veces. Pero después de concluir que no sabía lo que estaba sucediendo dentro del microcontrolador fuera del marco de los bocetos de Arduino, decidí buscar una opción más interesante, lo que implicaba un estudio profundo e inmersión en la jungla de la tecnología de microcontroladores.
La compañía en la que trabajo tiene un departamento de desarrollo, y decidí contactar a los ingenieros para orientarme en el camino correcto y mostrar dónde comenzar a resolver mi problema. Me desaconsejaba mucho estudiar Arduino y tenía en mis manos una bufanda verde desconocida e incomprensible en la que había inscripciones, letras y diversos componentes electrónicos.
Todo esto para mí en ese momento parecía incomprensiblemente complicado, e incluso llegué a cierta confusión, pero no me iba a negar a implementar la tarea. Así que me familiaricé con la familia de microcontroladores STM32 y la placa STM32F0-Discovery, después de estudiar cuál me gustaría apilar mi dispositivo para los fines que necesito.
Para mi gran sorpresa, una comunidad tan grande, artículos, ejemplos, diversos materiales sobre STM no estaban en la misma abundancia que para Arduino. Por supuesto, si busca, hay muchos artículos "para principiantes" que describen cómo y dónde comenzar. Pero en ese momento me pareció que todo esto es muy complicado, muchos detalles que fueron interesantes para la mente inquisitiva de un principiante, las cosas no se contaron. Aunque muchos artículos se caracterizaron como "aprender para los más pequeños", no siempre fue posible lograr el resultado deseado con su ayuda, incluso con ejemplos de código ya preparados. Es por eso que decidí escribir una breve serie de artículos sobre programación en STM32 a la luz de la implementación de una idea específica: un panel de control de iluminación en la sala.
¿Por qué no AVR / Arduino?
Anticipando las declaraciones de que sería demasiado pronto para que un principiante sin experiencia se apresure a estudiar un MK tan complejo como STM32 de inmediato. Le diré por qué decidí seguir este camino sin entrar y conocer a la familia de procesadores Atmel y ni siquiera considerar a Arduino como una opción. .
En primer lugar, la relación precio-funcional jugó un papel decisivo, la diferencia es visible incluso entre uno de los MK más baratos y más simples de ST y el ATMega bastante "gordo":
Después de ver diferencias significativas entre el precio y las capacidades de AVR y STM32, decidí que no usaré AVR en mi desarrollo =)
En segundo lugar, anteriormente intenté por mí mismo determinar el conjunto de habilidades que habría recibido para cuando alcanzara el resultado deseado. En caso de que decidiera usar Arduino, sería suficiente para mí copiar las bibliotecas terminadas, poner un boceto y listo. Pero comprender cómo funcionan los autobuses digitales, cómo funciona un transmisor de radio, cómo está todo configurado y utilizado, en esta situación, nunca habría venido. Para mí, elegí el camino más difícil y espinoso, de modo que en el camino para lograr el resultado, obtendría la máxima experiencia y conocimiento.
En tercer lugar, cualquier STM32 puede ser reemplazado por otro STM32, pero con mejores características. Además, sin cambiar el circuito de conmutación.
En cuarto lugar, las personas con desarrollo profesional tienen más probabilidades de usar MK de 32 bits, y con mayor frecuencia son modelos de NXP, Texas Instruments y ST Microelectronics. Sí, y en cualquier momento podría acudir a mis ingenieros del departamento de desarrollo y averiguar cómo resolver un problema en particular y obtener asesoramiento sobre cuestiones que me interesan.
¿Por qué empezar a explorar los microcontroladores STM32 con una placa Discovery?
Como ya entendieron, comenzaremos a conocer y estudiar el microcontrolador STM32, queridos lectores, con el uso de la placa Discovery. ¿Por qué Discovery, y no su propia placa?
- En cualquier placa Discovery, hay un programador / depurador ST-LINK incorporado que se conecta a la computadora a través de USB y puede usarse tanto para programar el microcontrolador en la placa como en dispositivos externos al quitar / instalar los puentes correspondientes. Es decir, una ventaja para todo: también ahorramos dinero al obtener una solución dos en uno: un microcontrolador y un programador.
- Las tarjetas de descubrimiento tienen un cableado completo de todos los pines directamente desde el microcontrolador a los pines de la placa. Por conveniencia, pegué Discovery en las mismas dos placas de prototipos.
- 3. En el tablero siempre hay un cierto número de todo tipo de dispositivos periféricos, por ejemplo, como acelerómetros, micrófonos, pantallas, sensores y muchos otros. Diferentes tableros Discovery tienen diferentes opciones de kit de cuerpo. Si alguien está interesado, puede leer más en el sitio web del fabricante.
¿Qué necesitamos para el desarrollo además de la placa Discovery?
En nuestro trabajo con la placa Discovery, necesitaremos una serie de cosas irremplazables de las que no podemos prescindir:
- Placa de circuito para ver dónde, dónde y qué está conectado. Puede tomar el circuito en la página del fabricante de su placa base en la sección Paquete esquemático. Puede descargar los esquemas desplazándose una página un poco más abajo en el bloque indicado en la imagen:
- Hoja de datos a nuestro microcontrolador para que en cualquier momento conveniente pueda ver el pinout, especificaciones, parámetros y otra información necesaria para el trabajo. En mi caso es STM32F051R8T6 . El enlace de la hoja de datos está en el título de la página:
- También necesitamos el manual de referencia en nuestro microcontrolador. Este es un documento en el que se describen en detalle los métodos y enfoques para trabajar con el núcleo MK, con su bloque de reloj, con periféricos, etc. También contiene una descripción de todos los registros MK, todas las opciones y configuraciones de MK y periféricos. Este es probablemente el archivo más importante sin el cual sería muy difícil descubrir cómo y qué funciona dentro del MK. Puede descargar el archivo desde el enlace en la página del microcontrolador:
- Y finalmente, necesitamos establecer un entorno de desarrollo en el que podamos crear programas para nuestro MK y compilar y actualizar nuestros programas con calma. En un momento, probé casi todos los IDE más populares y me decidí por Keil uVision 5. En mi opinión, este entorno de desarrollo me pareció el más conveniente y fácil de aprender. El depurador incorporado, las bibliotecas de bajo nivel listas para usar y listas para usar, una gran cantidad de ejemplos y una interfaz de trabajo convenientemente organizada y espacio IDE fueron los factores decisivos que influyeron en mi elección. Puede descargar este IDE desde el sitio oficial , pero se requiere un registro simple:. Realmente hay una pequeña restricción en el tamaño del firmware descargado en 32kB desde Este IDE es pagado. Pero esto será más que suficiente para nosotros. Necesitaremos MDK-Arm:
¡Comencemos con la configuración inicial y la preparación del IDE para el trabajo!
Después de descargar el archivo de instalación de nuestro IDE, puede continuar con la instalación. Siga las instrucciones del instalador para completar el proceso de instalación. Después de copiar todos los archivos necesarios para la operación, aparecerá una ventana para el instalador de software para desarrollar el
Instalador de paquetes . Este instalador contiene bibliotecas de bajo nivel, Middleware, ejemplos de programas que se actualizan y actualizan regularmente.
Para comenzar a trabajar con nuestra placa, necesitamos instalar una cantidad de paquetes necesarios para el trabajo y necesitamos encontrar un microcontrolador con el que trabajaremos. También puede usar la búsqueda en la parte superior de la ventana. Después de encontrar nuestro MK, haga clic en él en la segunda mitad de la ventana y necesitamos instalar la siguiente lista de bibliotecas:
- Keil :: STM32F0xx_DFP es un paquete de software completo para una familia específica de microcontroladores, incluidos manuales, hojas de datos, archivos SVD, bibliotecas del fabricante.
- ARM :: CMSIS es un paquete de Cortex Microcontroller Software Interface Standard, que incluye un conjunto completo de bibliotecas de ARM para admitir el núcleo de Cortex.
- Keil :: ARM_Compiler es el último compilador para ARM.
Después de instalar los paquetes requeridos, puede proceder a configurar el IDE y nuestro depurador / programador. Para hacer esto, necesitamos abrir la ventana principal de Keil y crear un nuevo proyecto.
Para hacer esto, vaya al menú
Proyecto -> Nuevo Proyecto uVision y seleccione la carpeta
donde guardaremos nuestro proyecto.
Después Keil nos preguntará qué MK se utilizará en el proyecto. Seleccione el MK deseado y haga
clic en
Aceptar .
Y volverá a aparecer una ventana, ya familiar para nosotros, en la que podemos conectar los módulos de interés al proyecto. Para nuestro proyecto, necesitamos dos módulos:
- El núcleo de la biblioteca CMSIS , en el que se declaran las configuraciones, las direcciones de registro y mucho más de lo que es necesario para el trabajo de nuestro MK.
- Startup-file , que es responsable de la inicialización de MK en el inicio, la declaración de vectores y los controladores de interrupciones, y mucho más.
Si se satisfacen todas las dependencias del complemento, el administrador nos lo indicará en verde:
Después de presionar el
botón OK, podemos comenzar a crear nuestro proyecto.
Para configurar los parámetros del proyecto y configurar nuestro programador, haga clic derecho en
Target 1 para abrir el menú correspondiente.
En el menú principal del proyecto, configure el parámetro
Xtal a
8.0 MHz . Este parámetro es responsable de la frecuencia de operación del oscilador de cuarzo de nuestro MK:
A continuación, pasamos a configurar nuestro programador / depurador. En la misma ventana, haga clic en la pestaña
Depurar y seleccione el parámetro
ST-Link Debugger en el campo
Usar y vaya a la configuración:
En la configuración, deberíamos ver el modelo de nuestro ST-Link instalado en la placa, su número de serie, la versión de HW y el IDCODE MK que flashearemos:
Para mayor comodidad, puede configurar el parámetro responsable del hecho de que el MK se restablece automáticamente después de parpadear. Para hacer esto, marque el campo
Restablecer y ejecutar .
Después de eso, debe configurar otra opción que nos permita escribir comentarios en ruso sobre el código de nuestros proyectos. Hacemos clic en el botón
Configuración y en el menú que se abre, seleccionamos
Windows-1251 ruso en el campo
Codificación .
Eso es todo. ¡Nuestro IDE y programador están listos para comenzar!
Keil tiene un navegador de proyectos conveniente en el que podemos ver la estructura del proyecto, los materiales de referencia necesarios para el trabajo, incluidos los que ya hemos descargado en nuestra computadora antes (esquema de descubrimiento, hoja de datos, manual de referencia), lista funciones utilizadas en el proyecto y plantillas para la inserción rápida de diferentes construcciones de lenguaje de un lenguaje de programación.
Cambie el nombre de la carpeta en la estructura del proyecto del
Grupo de origen 1 a
Aplicación / Usuario , lo que indica que tendremos los archivos del programa de usuario en esta carpeta:
Agregue el archivo de programa principal a través del navegador del proyecto ejecutando el comando
Agregar nuevo elemento al grupo "Aplicación / Usuario" .
Debe seleccionar
Archivo C (.c) de la lista y asignarle el nombre
main.c :
El archivo creado se agregará automáticamente a la estructura del proyecto y se abrirá en la ventana principal del programa.
Bueno, ahora podemos comenzar a crear nuestro programa.
En primer lugar, debe conectar el documento de encabezado de nuestra familia de microcontroladores a nuestro archivo ejecutable. Agregue las siguientes líneas al archivo
main.c , este programa hará que nuestros LED parpadeen alternativamente:
/* */
#include "stm32f0xx.h"
/* */
int main(void)
{
/* GPIO */
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
/* PC8 PC9 Output*/
GPIOC ->MODER = 0x50000;
/* Output type Push-Pull */
GPIOC->OTYPER = 0;
/* Low */
GPIOC->OSPEEDR = 0;
while(1)
{
/* PC8, PC9 */
GPIOC->ODR = 0x100;
for (int i=0; i<500000; i++){} //
/* PC9, PC8 */
GPIOC->ODR = 0x200;
for (int i=0; i<500000; i++){} //
}
}
, , . :
Build ( F7) , , :
Load ( F8) :
, .
! STM32 !
, , , Discovery. )
:
- STM32 -
- STM32:
- STM32: ? ?