Primer Programa CMSIS (Pt II)
En el post Primer Programa Bare Board aprendimos como correr nuestro primer programa sin la ayuda de libreria y función alguna ( excepto el startup y el linker file ). En esta ocasión usaremos la definición de registros acorde al estándar CMSIS.
CMSIS nos ayudará a acceder a los registros del micro de una forma más cómoda y organizada, además es un estándar difundido entre los fabricantes de micros con CPUs ARM,
Creamos una nueva carpeta para nuestro proyecto con CMSIS
1
| |
De nueva cuenta deberás copiar a la carpeta de tu proyecto el archivo linker. Recuerda lo obtienes de la librería de ST en la siguiente ruta
1
| |
Crea una nueva carpeta en tu proyecto llamada system en la cual colocaremos los archivos CMSIS
1
| |
Copia en esta nueva carpeta los siguientes archivos, los cuales los encontrarás en la librería de ST en la siguientes rutas
1 2 3 4 5 6 7 8 | |
Antes de seguir avanzando, aclararemos que al archivo startup no le haremos ninguna modificación y que los archivos system nos permiten inicializar algunas pequeñas cosas del micro, como los relojes de las memorias.
Al que si modificaremos es al archivo system_stm32f0xx.c, Lo abrimos con nuestro editor de texto y escribimos lo siguiente apartir de la linea 110.
system_stm32f0xx.c
1 2 3 4 | |
y modificamos la linea 84 de la siguiente manera
system_stm32f0xx.c
1
| |
Creamos nuestra carpeta Output donde guardaremos los archivos que nos arroja la compilación
1
| |
Creamos el archivo que contendrá nuestro código magico =).
1
| |
Abrimos con nuestro editor de texto favorito el archivo main.c y escribimos el siguiente código
Hola Mundo CMSIS - main.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
El anterior programa hará parpadear el led de la tarjeta conectado al puerto A pin 5. A diferencia del anterior post en este código no usamos las direcciones de los registros directamente, sino que usamos la definición de registros, lo cual es mucho más práctico.
Estos registros los encuentras definidos en el archivo stm32f072xb.h. Las definiciones son simples punteros a estructuras y esto es así porque lo dicta el estándar CMSIS [Periferico]->[registro].
Solo nos falta crear el archivo makefile para que make realice la compilación.
1
| |
Abre el archivo en tu editor de texto y escribe el siguiente código. Recuerda usar TABs y no espacios para las indentación.
makefile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
En esta ocasión compilamos tres archivos fuente y tenemos un subfolder el cual hay que indicarle al compilador.
A compilar se ha dicho
1 2 | |
Si la terminal no arrojo ningun error deberemos tener nuestro archivo test.hex en la carpeta Output
A Programar se ha dicho
Abre una nueva terminal y conectate con tu tarjeta usando OpenOCD
1 2 | |
En la terminal anterior madaremos nuestro programa compilado a nuestra tarjeta usando telnet, conectate al puerto 4444 de la siguiente manera
1 2 | |
Si te acepta la conexion, solo restara mandar el archivo .hex. Escribe los siguientes comandos en orden
1 2 3 | |
El primer comando resetea y detiene al micro, el segundo manda el programa y lo escribe en la memoria y el último lo resetea y pone a correr el programa, asi que ya podras ver un feliz led parpadeando.
Conclusion
Incluir los archivos que nos indica el estándar CMSIS nos facilita la interacción con los registros del sistema, pero eso no es lo unico ya que tambien nos permitira de una forma mas sencilla llamar las funciones de interrupción y controlar los registros internos del CPU.
Lo único que no nos exenta es el hecho de configurar los periféricos del micro de manera manual sin la ayuda de ningún framework o librería.
Para terminar te dejamos la estructura del directorio de tu proyecto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |