En el último episodio, abogamos por un poco a los microcontroladores, siendo una plataforma de desarrollo aún viable, no solo para la industria donde normalmente se ve en estos días, sino también para hackers . Tal vez incluso te engañe para obtener un par de hardware barato. Esta vez, vamos a obtener el último sistema configurado en ese hardware, y ejecutaremos el “mundo Hello” obligatorio y LED BLINKY. Pero luego también nos sumergiremos en una de las características que se envían muy bien en los microcontroladores: Fácil multitarea.

¡Trabajar!

Hardware

Mecrisp-Stellaris se ejecuta en una gran cantidad de microcontroladores de brazos, pero me centraré aquí en las fichas STM32F103 que están disponibles para obtener un dinero excepcionalmente poco en forma de una copia genérica del Maple Mini, a menudo llamado “STM32F103 Mínimo System Board “O” píldora azul “debido al factor de forma, y ​​el hecho de que solía ser rojo para la venta. El microcontrolador a bordo puede funcionar a 72 MHz, tiene 20 kb de RAM y 64 o 128 KB de flash. Tiene muchos pines, los únicos digitales son tolerantes a 5 V, y tiene todos los periféricos normales de microcontrolador. No es el más eficiente en el poder, y no tiene una unidad de punto flotante o un DAC, pero es un diseño antiguo robusto que está disponible para mucho menos dinero de lo que debe ser.

Programador conectado, alimentación sobre usb
Wonders Simple Wonders of Mass Production Trabajan para el programador que deberá instalar inicialmente el chip. Cualquiera de los clones del ST-Link V2 funcionará bien. (Irónicamente, el hardware dentro del programador es casi idéntico al objetivo). Finalmente, teniendo en cuenta que se ejecuta en la cubierta interactiva, necesitará una conexión en serie a la placa STM32. Eso probablemente indica un adaptador USB / serie.

Toda esta configuración completa no va a costar mucho más que una comida de comida rápida, y el programador y el adaptador USB / Serial son cosas que querrás tener en su kit de todos modos, si aún no lo hace.

Puede alimentar la placa directamente a través de los distintos pasadores de 3.3 y GND dispersos alrededor de la placa, o a través del puerto Micro USB o los pasadores de 5V en la placa de destino. Las dos últimas opciones pasan a través de un regulador de 3.3 V antes de unirse a los 3.3 pines. Todos los PIN están interconectados, por lo que es mejor si solo usa una fuente de alimentación a la vez.

Firmware: El Sistema Forth

Ve a obtener el paquete Super-Special Hackaday-Edition Mecrish hacia el paquete de GitHub. Incluido en el directorio “ROMS” es un sistema final para las demostraciones aquí. También he cargado en una base respetable de [JCW] EXCEPCIONAL ENVELO DE LAS BIENESTRAS, SOBRE COSAS CUIDADAS COMO LAS CUIDADAS COMO CONFIGURACIÓN DE GPIO FÁCIL, FUNCIONES DERECHOS, etc. Hay muchas más bibliotecas disponibles, y las investigaremos la próxima vez cuando los necesitemos.

La cosa más fresca de usar un programa final es que se necesita un pequeño software de soporte de alguna manera, el intérprete del programa recopila su propio código, e interactúa con él sobre el terminal serial. Todo sucede dentro del microcontrolador. El único obstáculo, entonces, está saliendo al chip. En los viejos tiempos, esto solía hacerse alternar en los bytes de forma manual, y hacia atrás es lo suficientemente pequeña, lo suficientemente pequeño como para que literalmente bootstrapping, de esta manera es posible. Pero ya obtuviste ese programador de chips, ¿verdad?

[Texano] ‘S ST Utilities son la forma más fácil de salir a su chip. Descárgalos de GitHub, y cómprelo usted mismo o pruebe su suerte con el Administrador de paquetes de Distro. (Windows Folks, tampoco estás excluido. Aunque ese binario no ha visto actualizaciones en un tiempo, lo hará).

Conecte los cables de programación de la manera evidente, y emita los comandos de Magic ST-Flash Erase y ST-Flash Write Mecrisp-Stellaris-Hackaday-Edition.bin 0x8000000. En cinco segundos, estarás listo para retumbar.

GND – GND

SWCLK – CLK

SWSIO – DIO

Tener que obtener un programador es una molestia si no tiene uno, pero facilitará el resto de su vida, y obtener uno es lo más básico como hacer clic en “Pagar” y esperando. Nuestro propio [Al Williams] (sin relación) tiene una publicación reciente sobre el uso del mismo software para la depuración C o el código de Arduino con GDB, por lo que vale la pena su tiempo para configurarlo.

Software

Conexión serie, impulsada por computadora portátil
Ponga alejado al programador por ahora y conecte al STM32 sobre serial; La tasa de baudio predeterminada debe ser de 115,200. Si aún no ha desconectado PODER, es posible que deba presionar el botón de reinicio en la placa STM32. Si todo salió bien, serás recibido por un cráneo familiar y traviesas. MECRISP está esperando una línea de línea al final de las líneas, por lo que si está enviando LF + CR, será exitoso de regresar a regresar dos veces.

A9 TX – Serial Rx

A10 RX – Serial TX

GND — GND

[jcw]’s folie is a nice, multi-platform serial terminal emulator for this application. What it does that your normal terminal program doesn’t is allow you to re-enter a command line with the up-arrow, which makes taking care of mistakes much, much much easier than re-typing a long command. TambiénIncluye automáticamente otros archivos, que realicé un uso sustancial de la construcción del binario para este artículo. No necesitas correr a Folie, pero apuesto a que te gustará.

Hola Mundo

Ahora es tiempo “Hola mundo”. Si eres nuevo para otro, aquí viene una introducción muy selectiva. Tipo 2 2 + y pulsa Enter. Dice: eso es tranquilizador, ¿verdad? ahora tipo. (Lea “DOT”) y imprimirá el resultado no sorprendente. El punto es el primero de algunos taquigramas globales que querrás internalizar. Muchas de los comandos con un punto imprimen sus resultados inmediatamente. .S (DOT-ESS) imprime los contenidos de la pila, por ejemplo. Dos idiomas mucho más que veremos muchos de ellos son @ para obtener una variable o leer una entrada y! para establecer una variable o salida. Lea estos como “Obtenga” y “Configure” en su cabeza al escanear el código.

A continuación, veamos cómo escribir una función. : inicia una definición de función y; termina. Entonces: cuatro 2 2 +; Define una función que agrega dos y dos juntos. (¡Y lo compila en tiempo real!) A continuación, puede dar la vuelta y llamar a esta función inmediatamente. Cuatro .S le mostrará que nuestra función ha dejado la suma de dos y dos en la pila. En este sentido, las funciones a otras no son realmente funciones. No toman argumentos explícitos o devuelven valores explícitos. Simplemente operan en los datos que se encuentren en la pila, y deje los resultados allí también. Es por eso que otras funciones se llaman “palabras”. Estaré pegado a esta convención a partir de ahora.

Aquí, finalmente, es “Hello World” :: HW. “¡Hola, mundo!” Cr; “Las cadenas son un poco extrañas, principalmente debido a la forma en que se analiza el lenguaje: el compilador lee hasta un espacio y luego ejecuta lo que ha encontrado, por lo que tiene que haber un espacio entre la cadena de impresión. Comando (. “) y el primer carácter que desea imprimir. El comando de impresión se escanea hacia adelante hasta que encuentre un cierre “, sin embargo, para que no necesite un espacio adicional allí. CR envía un retorno de carro. Escriba HW en el indicador. ¡Hola, mundo!

LEDs parpadeantes

A pesar de que la entrada y salida de texto en serie es tan fácil, parpadeando un LED es el estándar “Hello World” de los microcontroladores, por lo que es hora de un poco de GPIO. Debido a que el sistema ya está configurado para esta placa de microcontrolador en particular, encender un LED es tan fácil como escribir LED.ON en el mensaje. ¿Quieres apagarlo? Llevar afuera. Sin embargo, los parpadeos manuales se harán viejos rápidamente, así que vamos a escribir una palabra de parpadeo. : Blink LED.ON 100 MS LED.off 200 ms; hará el truco. Intenta parpadear parpadear. Vea mi código de demostración de Blink para la elaboración. (Más sobre EM en unos pocos miles de milisegundos).

Los detalles de la inicialización de la GPIO están ocultos en NORE / HACKADAY / LED.FS y en STM32F1 / IO.FS de Embello respectivamente. Desciende a través de, verá el procedimiento de inicialización estándar: el PIN en particular se establece como salida al voltear algunos bits en los registros de control periféricos de STM32. [JCW] ha definido un montón de estos, haciendo configurar un PIN como salida, con el controlador Push-Pull, ¡tan fácil como PC13 OMODE-PP IO-MODE !. (¡Recuerde que “!” Indica establecer el valor en una variable o registro.)

Para configurar PIN PA7 para ENTRADA ADC: PA7 IMODE-ADC IO-MODE!. Botones de prueba, utilizando las resistencias de pullup o pulldown incorporadas: PA3 IMODE-PULL IO-MODE! ¡Y luego configure la salida para tirar hacia arriba o hacia abajo con VERDADERO PA3 IO! o pa3 ios!. Luego podrás leer el estado del botón con PA3 IO @ (“IO GET”) más adelante.

GPIO En los chips STM32 es muy flexible, y si desea profundizar en las opciones de configuración en la hoja de datos, puede configurar todo esto de manera bastante fácil de usar el código io.fs [JCW]. Por ejemplo, io. Por ejemplo, imprime todos los registros de GPIO y sus valores, lo que es una gran ayuda para la depuración interactiva. Dicho esto, hay una habitación aquí para una capa de abstracción de hardware más fácil de usar, si desea contribuir con uno.

Multitarea en el rápido

Así que ahora tenemos un LED parpadeante y la impresión de puertos serial “Hello World”. No es un mal comienzo, y ambos hacen un buen uso de la interactividad de la cuarta parte: el LED solo se ilumina cuando escribe un parpadeo. Una de las principales virtudes de adelante, para mí, es la facilidad de ir entre las pruebas interactivas de las palabras como esta, y luego implementar la funcionalidad en un sistema de trabajo. Una de las razones es que casi todas las demás apoyan la multitarea cooperativa básica. Esto es lo que quiero decir.

Primero, vamos a bucear nuestra función de parpadeo para que no tengamos que escribir tanto. : BB comienza a parpadear de nuevo; Crea una función, BB para “Bad Blink”, que se ejecutará para siempre. El problema con “Ejecutar para siempre” a lo largo es que nunca regrese a la línea de comando del intérprete sin presionar físicamente el botón de reinicio, y luego se pierde todo lo que trabajando en RAM.

En su lugar, vamos a parpadear en un bucle con una salida. : GB comienza a parpadear teclas? Hasta que ; Crea una función que ejecutará nuestro comando de parpadeo hasta que haya cierta entrada del teclado, se presiona la devolución crucial. Este constructo en bucle particular es muy beneficioso para probar las funciones que desea ejecutar continuamente, sin colgar el sistema. Mantenerlo yon importancia

Una vez que hemos ajustado nuestra función de parpadeo para ejecutarse, así que lo queremos, creemos una tarea de fondo para que pueda parpadear desatendido.

Tarea: BlinkTask
: parpadear&
blinktask activate
comenzar a parpadear de nuevo
;
Tarea múltiple
parpadear&

Brevemente, la tarea: palabra crea un espacio de memoria para nuestra tarea de fondo parpadeante que estamos llamando a BlinkTask. La función Blink & hace el trabajo en el fondo. Parpadea y se inicia declarando que usará el contexto de la tarea BlinkTask, y que debe comenzar a funcionar. Luego entra en un bucle parpadeante ilimitado desde el que nunca se va. Multitarea se convierte en multitarea y parpadea y ejecuta nuestra tarea. Ejecútelo, y el LED parpadea mientras aún puede interactuar con la consola. Dulce. Tipo de tareas y verá que hay dos activos: uno es nuestro blinker y el otro es el intérprete interactivo.

Pero, ¿cómo sabe la tarea de parpadeo cuándo ceder a otros procesos simultáneos? A la vez, la palabra pausa produce del contexto actual y se traslada a la siguiente multitarea de Redonda y Round-Robin. La función MS, entre otros, consiste en un comando de pausa, por lo que parece que parece un retraso de bloqueo en una configuración de una sola tarea que termina tocando fantásticamente bien con sus otras tareas.

Lo bueno de la multitarea cooperativa es que usted controla exactamente cuando habrá un conmutador de contexto, lo que puede ayudar a eliminar las fallas que encontrará en sistemas preventivos. El inconveniente es que usted es responsable de recordar pausar sus funciones de vez en cuando, y tiene que verificar el tiempo usted mismo. Por supuesto, este es un microcontrolador, y también tiene el controlador de interrupción interno bastante rico del brazo para jugar también.

El punto real de la multitarea en Matrics a continuación es que hace un gran flujo de trabajo para escribir, probar y desplegar poco DAEMONS: Funciones que quieren estar “siempre activadas”. Primero, escribe la función que hace la acción una vez. En segundo lugar, probarlo en un bucle con una escotilla de escape. Tercero, una vez que está funcionando, quite el escape y haga una tarea de fondo. Luego puede activarlo y desactivarlo usando inactivo y active, incluso desde otras tareas. Consulte Multitask.txt Mecrisp.txt, la fuente, para muchos más detalles.

¿Que sigue?

Hasta ahora, hemos establecido Mecrisp-Stellaris, con bibliotecas adicionales del marco embello de Jeelabs y ejecutamos algunas demostraciones rápidas. Si esto ha podido despertar su interés, lo llevaré a un tutorial de construir un software real la próxima vez. Hay mucho más que decir sobre la forma en que Mecrisp maneja los matices de Flash versus RAM, entradas y salidas, y la práctica del desarrollo interactivo. Algunos de los aspectos realmente extraños de trabajar a todos los criarán sus cabezas en forma de graciosidad, y aprenderemos a amarlos de todos modos.

Mientras tanto, obtenga sus tableros de STM32F103 baratos destellos con nuestro binario, y se acostumbre un poco para jugar en el futuro ambiente en el chip. Parpadear algunos leds. Mire alrededor del glosario Mecrisp-Stellaris y la documentación de la API del embello. O simplemente escriba la lista para ver todo el comando a su disposición y comience a cortarla.

Leave a Reply

Your email address will not be published. Required fields are marked *