viernes, 17 de marzo de 2017

Parpadeo de 4 LED (II) -ARM Cortex-M4-

Programa

/* Febrero de 2016
Tarjeta: STM32 Discovery
Microcontrolador: STM32F411VET6U
IDE: IAR Embedded Workbench
Programa que produce el parpadeo cíclico de los cuatro LED de la  tarjeta
STM32 Discovery.

- LED verde (PD12), LED naranja (PD13), LED rojo (PD14), LED azul (PD15).
 */

#include "stm32f4xx.h"

void main (void){      
  RCC->AHB1ENR |= 0x00000008;    // Habilita el reloj para el puerto D
  GPIOD->MODER |= 0x55000000;    // Config. PD12, PD13, PD14 y PD15 como salidas

  while (1) {
    GPIOD->BSRRL = 0xF000;                   // Enciende los LED
    for (long int i=0; i<0x1000000; i++) {}; // Retardo
    GPIOD->BSRRH = 0xF000;                   // Apaga los LED
    for (long int i=0; i<0x1000000; i++) {}; // Retardo
  }
}




➤ Observaciones


- No es necesario ningún componente electrónico externo a la Discovery, puesto que se utilizan los cuatro LED de la tarjeta.

- Para no complicar el programa, el retardo utilizado se realiza con un bucle for. Las cuestiones relativas a la señal de reloj del microcontrolador se explican en esta entrada del blog y la forma de generar un retardo, de una manera más adecuada, se detalla en esta otra.

- En el programa se accede a los siguientes registros: RCC_AHB1ENR, GPIOD_MODER y GPIOD_BSRR.

- GPIOD->BSRRL = 0xF000: escribe en los 16 bits menos significativos del registro BSRR del puerto D el número binario '1111000000000000'. Cada '1' supone poner en estado alto los pines correspondientes, que en este caso son PD12, PD13, PD14 y PD15. Los '0' no producen ningún efecto en sus respectivos pines.

- GPIOD->BSRRH = 0xF000: escribe en los 16 bits más significativos del registro BSRR del puerto D el número binario '1111000000000000'. Cada '1' supone poner en estado bajo los pines correspondientes, que en este caso son PD12, PD13, PD14 y PD15. Los '0' no producen ningún efecto en sus respectivos pines.

- El registro BSRR permite un manejo individual de los bits del registro de salida de datos ODR, con BSRR no es necesario utilizar operadores del tipo '|=', '&=' o '^=', lo cual implica una mayor velocidad de operación.

- Ver la entrada anterior del blog. 
 

➤ Registros empleados

Las siguientes imágenes representan los registros utilizados en el programa y en ellas están señalados los bits que éste modifica o consulta. Para más información, ver el documento RM0383 Reference Manual.











No hay comentarios: