GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
TIPO DE PRACTICA: Elaborada X Demostrativa Guiada X Por corte x Por semestre
TITULO: Exploración Segmento de código y Registros PRACTICA No 2
No INTEGRANTES 2 No GRUPO 1 Laboratorio de X
Juan David Acosta Neira – Angie Fernanda Suarez Avendaño
Arquitectura de Hardware
PROFESOR: Felipe Vallejo NOMBRE ASIGNATURA:
Programable
FECHA DE ENTREGA: 14/09/2021 Primera entrega
MATERIALES: STM32CubeIDE, STM32F4-Discovery
TEXTO, MANUALES O DIRECCIONES ELECTRONICAS
1. J.G. Proakis and D.G. Manolakis, “Digital Signal Processing: Principles, Algorithms, and Applications”, Prentice-Hall,
NJ, Fourth Edition, 2007.
2. A. V. Oppenheim and R. W. Schafer, “Discrete-Time Signal Processing”, Prentice-Hall, NJ, Third Edition, 2010.
COMPETENCIAS A DESARROLLAR
Las competencias están de acuerdo al silabo de las Asignaturas. Las que se van a desarrollar son:
Competencias Genéricas Esperadas:
- Competencia para para realizar análisis y síntesis que permitan el movimiento entre lo concreto y lo abstracto
- Competencias para enfrentar problemas prácticos usando conceptos elaborados
- Competencia para desempeñarse en la “sociedad del aprendizaje”
- Competencia para gestionar un ambiente socialmente productivo
- Competencia para trabajar autónomamente
- Competencia ética
Competencias Específicas Esperadas
- Competencias para aplicar técnicas y métodos en el planteamiento de soluciones tecnológicas relacionados con problemas del
campo de conocimiento
- Competencias para diseñar e implementar dispositivos electrónicos utilizando técnicas y herramientas tecnológicas
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
CONFIGURACIÓN DEL LABORATORIO
La práctica consiste en la familiarización del segmento de código de memoria y el manejo de registros para el uso de
periféricos con el uso de la tarjeta de desarrollo STM32F4-Discovery, la cual se usará para contextualizar lo visto en clase.
Se pretende usar el software STM32CubeIDE para el desarrollo del programa y aplicación del mismo hacia la tarjeta de
desarrollo, lo que permite al estudiante familiarizarte con el entorno a usar y reforzar el ciclo completo para realizar sus
proyectos, desde la configuración de puertos de entrada y salida, periféricos, timers, hasta implementar su solución en la
tarjeta de desarrollo.
Figura 1 Tarjeta de desarrollo STM32F4-Discovery
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
DESARROLLO
Para este laboratorio, nos concentraremos en contextualizar lo visto en clase de una manera práctica fundamentándonos en
la documentación explorada del microcontrolador a usar (Manual de Referencia, Hoja Técnica de Datos, Manual Referencia
Cortex M4) y en el código de ejemplo dejado en el aula virtual.
1. Según lo discutido en clase, añada en esta sección el código comentado
/* Primer programa */
.thumb
.syntax unified
.equ LEDDELAY, 100000
.equ RCC_AHB1ENR, 0x40023830
.equ GPIOD_MODER, 0x40020C00
.equ GPIOD_ODR, 0x40020C14
.text /* Inicio de la sección de código del programa */
.global main /* declarando el identificador principal main */
main: /* Función principal */
ldr r6, = RCC_AHB1ENR
ldr r5, [r6]
orr r5, 0x00000008
str r5, [r6]
ldr r6, = GPIOD_MODER
ldr r5, [r6]
and r5, 0xFCFFFFFF
orr r5, 0x01000000
str r5, [r6]
ldr r6, = GPIOD_ODR
ldr r5, [r6]
orr r5, 0x1000
str r5, [r6]
loop:
nop
b loop
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Fig1. Comentarios de código.
2. Según lo discutido en clase, añada en esta sección los registros RCC_AHB1ENR, GPIOD_MODER y
GPIOD_ODR de una manera gráfica y explique brevemente qué bits se están activando (de acuerdo con la
definición en hexadecimal del código) y qué función tienen. Este punto pretende explorar la documentación,
pero en realidad esas definiciones se refieren a direcciones de memoria de registros, que exploraremos en los
siguientes puntos.
Al convertir el valor de r6 a hexadecimal se obtuvo 0x40023830 que corresponde a el registro RCC_AHB1ENR
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
En la siguiente línea del código r5 toma el valor actual que hay en el apuntador [r6], el cual corresponde a hexadecimal
0x100000.
Al realizar la operación “orr” el dato guardado en el registro r5 es en hexadecimal 0x100008.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
El dato que hay en el apuntador [r6] ahora es el valor de r5, quiere decir que RCC_AHB1ENR se modificó. El valor de r5
es: 0x100008 en binario es: 100000000000000001000, teniendo en cuenta el manual de referencia de la STM vemos que se
activa el BIT 3 en este caso activa el reloj en específico del puerto GPIOD.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
En la línea 29 se le asigna el valor a el registro r6 ahora con el dato en hexadecimal 0x40020C00 correspondiente a el
GPIOD_MODER.
A el registro r5 se le asigna el dato que hay en el apuntador [r6] el cual es 0.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Al realizar la operación “and” entre el registro 5 y 0xFCFFFFFF el valor de r5 sigue siendo 0.
En la línea 34 al hacer la operación “orr” entre r5 y 0x01000000 el valor de r5 cambia a 16777216 que en hexadecimal es:
0x1000000
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
El dato que hay el en apuntador [r6] ahora es el valor de r5, quiere decir que GPIOD_MODER se modificó. El valor de r5
es: 0x1000000 en binario es: 1000000000000000000000000, teniendo en cuenta el manual de referencia de la STM vemos
que se activa el BIT 24.
Activando el bit indicado por el código hexadecimal: 0x01000000 que representa el BIT 24 en GPIO_MODER. Esto genera
en el puerto Moder 12 un [0 1] lo que indica que el puerto del LED para este caso LD4 está en un modo de salida de
propósito general, esto lo hacemos para manipular la salida del LED.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
En la línea 37 se le asigna a r6 el número en hexadecimal 0x40020C14
En r5 se carga el dato que hay en el apuntador [r6] que es 0.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
En la línea 39 se hace la operación “orr” entre el valor de r5 y 0x1000 cambiando el valor de r5 a 4096 que en hexadecimal
es: 0x1000.
En la línea 40 cargamos en el apuntador [r6] el valor de r5 en binario corresponde a 1000000000000.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Activando el BIT indicado por el código hexadecimal: 0x1000, representa que en el BIT GPIO 12 hay un 1 en la salida, es
decir el LED se prende.
3. Realice la compilación del código y diga el porcentaje de código usado tanto en la RAM como en la FLASH del
microcontrolador
Para la memoria RAM tenemos un porcentaje de 1,20%
Para la memoria FLASH tenemos un porcentaje de 0.07%
4. Realice la depuración (Debug) del código en la tarjeta y escriba la dirección de memoria inicial y final del
segmento de código desde el main hasta la finalización del loop.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Teniendo en cuenta, que el MAIN es el inicio del programa este empieza desde la dirección de memoria
0x080001e8 hasta el loop que está en la dirección de memoria 0x0800020c. Como el código del programa se
guarda en la memoria FLASH compráramos si estas 2 direcciones están a dentro de este segmento de memoria
sabiendo que, el inicio de la memoria FLASH es: 0x08000000 hasta 0x08100000. Observamos que el código está
dentro del segmento de memoria FLASH.
5. ¿Qué significa .equ y para qué nos sirve?
El .equ asigna un valor permanente a un texto,lo que quiere decir que cada vez que se utilice este texto va a
reconocer el valor asignado; por ejemplo en este código:
.equ GPIOD_MODER, 0x40020C00. El símbolo .equ le asigna a el texto GPIOD_MODER el número
0x40020C00.
6. ¿Cuál es la diferencia entre las instrucciones LOAD ldr r6, =NUM y ldr r5, [r6]? Concéntrese únicamente en
explicar la diferencia de los operadores = y []
Cuando se usa el símbolo “=” se le asigna un valor a el registro.
Cuando se usa el símbolo “[]” se le asigna el dato que se encuentra en la dirección de memoria que corresponde a
el registro que está dentro de los [], al registro de interés.
Como ejemplo podemos ver que:
ldr r6, =NUM (Asigno a r6 (registro de propósito general) el valor de NUM)
ldr r5, [r6] Como ya tengo un valor en r6 que es igual a NUM, accedo al dato que indica el apuntador “[r6]” y lo
cargo en r5 (registro de propósito general).
7. Busque la dirección de memoria base (dirección inicial) para los registros RCC y escríbala
La dirección base (dirección inicial) para el registro RCC – 0x4002 3800
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
8. ¿Cuál es el Offset del registro RCC_AHB1ENR con respecto a la dirección del punto anterior?
0x40023800+0x30 = 0x40023830
9. Busque la dirección de memoria base (dirección inicial) para los registros del puerto de propósito general D
(GPIOD) y escríbala
La dirección base (dirección inicial) para el puerto D – 0x4002 0C00
10. ¿Cuál es el Offset de los registros GPIOD_MODER y GPIOD_ODR, con respecto a la dirección del punto
anterior?
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Dirección GPIOD_MODER
0x4002 0C00 + 0x00 = 0x4002 0C00
Dirección GPIOD_ODR
0x4002 0C00 + 0x14 = 0x4002 0C14
11. Explique el funcionamiento del programa
Veamos el punto 2.
12. Finalmente, con la ayuda de la documentación, realice un código que le permita encender los LEDs de la tarjeta en
el sentido de las manecillas del reloj de manera repetitiva
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA
Se realizaron diferentes correcciones en el código y se comentó.
GUIA DE LABORATORIOS
DEPARTAMENTO DE INGENIERIA Versión 1
ELECTRÓNICA