➤ Programa
/* Febrero de 2016Tarjeta: 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
}
}
- 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.
- 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:
Los comentarios nuevos no están permitidos.