El comienzo más fácil en STM a través de "un lugar"

Probablemente, el tiempo de las guerras religiosas de AVR contra STM ya ha pasado, pero no, no, sí, hay brotes de enfrentamientos entre los dos campos. Casi cualquier publicación sobre manualidades AVR definitivamente tendrá un comentario como "Sí, cuánto puede follar a su abuela, ya es hora de cambiar a STM", luego las variaciones en el tema del precio, el número de piernas y los temporizadores. Si el STMshcher es más avanzado, ciertamente habrá una indicación de que no hay DMA en el AVR y no lo hará, por lo tanto, el AVR debería morir. Por qué un simple termómetro-voltímetro-parpadeo DMA, una montaña de temporizadores de 16 bits, 100 patas y un ADC de 12 bits, generalmente nadie lo explica. ¿Por qué necesitamos una cosechadora en un dispositivo que Tiny13 pueda sacar fácilmente, que al mismo tiempo no se carga ni en un tercio de sus recursos? Nadie lo entenderá. Solo tiene que cambiar a STM32, y eso es todo. Por aquí.

Y debo decir que la gente tiene ansias de novedad. Pero realmente, ¿puedo intentarlo? ¿Y si te gusta? Estos son solo el Manual de referencia para el popular STM32F103C8T6, en el que se basa la tableta azul de 1126 páginas más masiva, de alguna manera realmente no tiene un "inicio rápido". Incluso una utilidad separada, tan odiada por los ancianos "kalokub", y eso debe ser estudiado, qué es qué. Sí, y habiendo profundizado en Cube, es poco probable que comience en 5 minutos, el pie generado por él no es el material de lectura más accesible para la noche, es solo para meterse en la frente, de lo que no todos pueden hablar allí.

Numerosos artículos, similares a este, sobre un inicio rápido y fácil en STM merecen una discusión por separado. Para todos esos artículos, al principio estaba muy confundido por una circunstancia. En ninguna parte hay una explicación detallada de lo que en realidad estamos escribiendo aquí. Un montón de capturas de pantalla de cómo crear un proyecto, luego inmediatamente un muro de código, ¡hazlo así! Y qué hay allí, por qué es así, por qué es así, de dónde obtener todas estas palabras aparentemente entendibles, nadie profundiza en ello, porque las fuerzas se quedaron sin escribir al escribir un manual sobre la instalación de Cale y Cuba, y al lanzar el proyecto. Solo después de un tiempo, individual para cada uno, la comprensión de lo que está sucediendo y por qué viene. A su vez, propongo una forma de comenzar no desde el principio, como todos los demás, sino desde el final. Ahora haremos lo contrario, no configuremos el controlador, escribamos código y debutamos, sino que procedemos inmediatamente a la depuración,y registrar nuestras acciones en forma de código.

Por lo tanto, instalamos Keil como un entorno libre (código de hasta 32 KB). No describiremos esta acción, esto está en Internet, y el instalador debe ser dominado por la persona que acude a STM. Comenzamos el proyecto: Proyecto-Nuevo Proyecto uVision, creamos una carpeta y un archivo de proyecto. Se abre la ventana de selección del controlador, ingrese 103C8 en la búsqueda y acepte el único modelo seleccionado.

A continuación, llegamos a la ventana de selección de biblioteca:



Aquí ponemos tres daws: CMSIS-CORE, Device-Startup y Device-GPIO. Este conjunto es suficiente para rebotar una pierna, iluminando el LED. Entonces todavía tiene que configurar, no puede obtener nada de esto. Alt + F7 inicia la ventana de configuración ubicada en Proyecto-Opciones para Target, donde en la pestaña "Salida" debe marcar la casilla de verificación "Crear archivo HEX" para crear un archivo de firmware que cargaremos al controlador. A continuación, en la pestaña "Depurar", seleccionamos ST-Link, que, de hecho, cargará el firmware y debutará:



mediante el botón "Configuración" al lado de la ventana de selección del programador, llegaremos a la ventana "Configuración del controlador de destino Cortex-M", donde en la ventana " Descarga Flash "poner un daw" Restablecer y ejecutar ".

En el árbol del proyecto, haga clic derecho en la carpeta "Grupo de origen 1", en el asistente que se abre, cree el archivo main.c, en el que pronto escribiremos el código. En el main.c abierto, haga clic con el botón derecho en la primera y más importante inclusión:



agregue el código que consta de main y sin fin mientras:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	}
}

Curiosamente, esto es todo por ahora, este es un programa listo y comprensible que compila y carga correctamente en el controlador. Presionamos F7 y vemos que el firmware se ha ensamblado correctamente, no hay errores ni advertencias.



A partir de este momento, el controlador está completamente accesible para nosotros, podemos ingresarlo debajo de la línea de depuración y girarlo en todas las direcciones, y responderá.

Las teclas Ctrl + F5 nos llevan a la depuración, y el botón "System Viewer Windows" le permite abrir las ventanas para controlar los registros y las patas del GPIO.



Además, le sugiero que siga utilizando el Manual de referencia, especialmente porque ni siquiera necesita descargarlo, está disponible haciendo clic en la pestaña "Libros" del menú "Ver":



Ahora propongo usar el siguiente razonamiento. Desde el pinout en la tableta azul, se puede ver que el LED se cuelga en la pata del puerto 13. Numerosos recursos de Internet y discusiones siempre mencionan que antes de hacer algo en STM, debe habilitar algo, de lo contrario, configure el reloj. Sin más preámbulos, escribimos en el cuadro de búsqueda del lector de pdf lo que necesitamos, a saber, habilitar el puerto C: "ACTIVAR EL RELOJ DEL PUERTO C". Entramos en la siguiente imagen:



De esto podemos concluir que el reloj del puerto C está habilitado en el registro IOPCEN. Con este conocimiento, vamos a la pestaña RCC en modo de depuración e ingresamos este nombre en la barra de búsqueda:



marque la casilla de verificación requerida con una marca de verificación, y desde este momento consideramos que el puerto C está habilitado.

Ahora, recordando el AVR sufrido, buscaremos la configuración del pin real. Para que funcione, es necesario explicar qué es exactamente lo que queremos de él. Y queremos saltar con el pie número 13 del puerto C, para esto necesitamos establecer el modo de su operación. En la barra de búsqueda en el Manual de referencia, conducimos en "Configuración de bit de puerto", que expresa nuestro deseo de leer dónde están ocultos los ajustes de la pierna. La búsqueda nos lleva a una tabla a partir de la cual se deduce que para asignar un tramo como salida, es necesario configurar los registros MODE y CNF: de la



tabla No. 20 está claro que para asignar un tramo como salida Push-Pull, es necesario restablecer los registros CNF0 y CNF1, y el estado del par MODE0 y MODE1 se describen en la tabla No. 21, elegiré la opción superior, hasta 10MHz, MODE0 = 1, MODE1 = 0. Esto es lo que haré en la ventana GPIOC para los registros CNF13 y MODE13



Ahora hemos configurado el reloj y el modo de operación del puerto. Es hora de descubrir exactamente cómo saltar una pierna. En inglés, establezca que el bit de puerto se escribe como "Conjunto de bit de puerto", y buscaremos esta frase en el manual: La



búsqueda nos lleva a una página con una tabla, que muestra claramente que el registro BSRR, que consiste en pares BS y BR, es responsable de establecer el estado del tramo del puerto , Bit set y Bit reset, respectivamente. Encontramos estos registros en la ventana GPIOC en modo de depuración y disfrutamos del control del tramo número 13 directamente metiendo grajillas con el mouse en las casillas correspondientes:



Un LED en el tablero de pastillas azul cuelga entre la pata y el VCC, por lo tanto, lo controla de nuevo al nombre del registro. El Bit Set (registro BS13) lo extingue y el Bit Reset (registro BR13) lo enciende. Estos son registros de operaciones atómicas, se restablecen después de configurar la casilla de verificación. Es posible controlar el pie a través del registro ODR (cláusula 9.2.4 Registro de datos de salida del puerto (GPIOx_ODR) en el manual de referencia), muestra claramente a qué conduce la instalación y el restablecimiento de la grajilla.



Un LED verde verde y atenuado indica que todo funciona correctamente. Solo queda escribir todo esto en forma de código en main.c. Aquí es donde aparecen las pasas que distinguen este método de comprender el controlador STM a través de la depuración del resto, que está lleno de Internet. Sugiero simplemente reescribir lo que vemos en la ventana de depuración en el código. Ejemplo:



Establezca el modo de operación del puerto y habilite la sincronización;



Encendieron la pata de babor, esperaron, la apagaron, y así sucesivamente:

#include "stm32f10x.h"                  // Device header

int main(){
	RCC->APB2ENR=0x00000010;			//  
	GPIOC->CRH=0x44144444;			//   Push-Pull  10MHz
	int i;								//     / 
	while(1){
		GPIOC->ODR=0x00002000;		//  LED,      
		i=2000000;					//    
		while (i) i--;					// 
		GPIOC->ODR=0x00000000;		//  LED
		i=2000000;					//  
		while (i) i--;					
	}
}


Por supuesto, este método está lejos de ser el mejor y no es correcto, pero en mi opinión es el más comprensible y simple. Además, comienza a trabajar con una hoja de datos (manual de referencia) y no lo asusta, como leer maná y escribir paños de código de varias páginas para Blink. Sí, no hay capas de abstracciones, se ha perdido mucho, pero creo que puedes perdonar esto para el comienzo de la primaria. Leer maná y trabajar correctamente con los registros es entonces, ahora tenemos un LED parpadeante y básicamente entendemos cómo y qué hicimos, y lo más importante, de dónde provienen todas estas abreviaturas. Si me hubieran mostrado esta forma de estudiar STM antes, tal vez no habría reunido más de 9000 programadores diferentes para AVR en los que no había depuración, pero habría tomado el Cortex de inmediato. De hecho, en AVR no hay una depuración inteligible y accesible, pero de todos modos, es demasiado pronto para olvidar a Tiny13. Ella saca sus tareas.

All Articles