Skip to content

STM32CubeIDE workspace para Programación de microcontroladores - CESE - FIUBA

Notifications You must be signed in to change notification settings

miguel0591/PdM_workspace

 
 

Repository files navigation

Repositorio Git Practicas PdM - CESE -FIUBA

Indice:

  • Placa de Desarrollo
  • LEDs, Botones y Sensores para el uso del usuario
  • Descripcion de los Ejercicios
    • PRACTICA 1: Uso de Retardos Bloqueantes
    • PRACTICA 2: Uso de Retardos NO Bloqueantes
    • PRACTICA 3: Modularizacion.
    • PRACTICA 4: MEF y Antirebote por soft.
    • PRACTICA 5: Manejo de la UART.
    • PROYECTO FINAL PDM.

Placa de Desarrollo Utilizada:

STM32F429I-DISC1 Discovery Development Kit

LEDs y Boton para el uso del usuario:

  • LEDs
    • 1 Ubicado en PG13 (MACRO #define LD3_Pin)
    • 1 Ubicado en PG14 (MACRO #define LD4_Pin))
  • Boton
    • Boton en PA0 (resistencia pull-donw)

Practica 1 - Ejercicio 1:

Como la placa de desarrollo solo tiene 2 leds, se los hace parpadear a 200ms, y los leds no se prenden simultaneamente.

Definicion de Variables Globales:

uint16_t Leds[ ] = {LD3_Pin, LD4_Pin};         //Arreglo de LEDs se usan macros para cada uno
uint8_t Pos = 0;                                            //Variable para la posicion del array
uint32_t Flicker = 200;                                 // valor del parpadeo

Rutina del super loop:

  while (1)
  {
	  if (Pos < (sizeof(Leds)/2)) {
		  HAL_GPIO_WritePin(GPIOG, Leds[Pos], GPIO_PIN_SET);
		  HAL_Delay(Flicker);
		  HAL_GPIO_WritePin(GPIOG, Leds[Pos], GPIO_PIN_RESET);
		  Pos++;
	} else {
		  Pos = 0;
	}
  }

Practica 1 - Ejercicio 2:

Usamos una interrupcion internar para alternar el led que debe parpadear, usamos el pulsado en el puerto PA0 que tiene una resistencia de pull-down, cada vez que precionamos el boton se llama la interrupcion que incrementa o vuelve a cero el valor de Pos del led seleccionado.

Definicion de Variables Globales:

uint16_t Leds[ ] = {LD3_Pin, LD4_Pin};         //Arreglo de LEDs se usan macros para cada uno
uint8_t Pos = 0;                                            //Variable para la posicion del array
uint32_t Flicker = 200;                                 // valor del parpadeo

Rutina del super loop: se encargar de cambiar el estado de led que este seleccionado

  while (1)
  {
	  HAL_GPIO_TogglePin(GPIOG, Leds[Pos]); 
	  HAL_Delay(Flicker);
  }

Rutina de Interrupcion:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	//apagamos todos los led antes de cambiar la posicion
	for (int var = 0; var < (sizeof(Leds)/2); ++var) {
		HAL_GPIO_WritePin(GPIOG, Leds[var], GPIO_PIN_RESET);
	}

	//cambiamos la poscicion (la aumentamos o volvemos a 0)
	if (Pos<((sizeof(Leds)/2)-1)) {
		++Pos;
	} else {
		Pos = 0;
	}
}

Practica 2 - Ejercicio 1 , 2 y 3:

Consitia en generar funciones para trabajar con delays no bloqueantes, en la parte de aplicarlas para hacer parpadear un led y en la ultima parte poder usar un array para tener valorios delays disponibles.

En el archivo main.c se definio lo necesario para implemetar todo pasando por Includes, Typedef, Macros y Variables Privadas.

//Includes Privados
#include <stdint.h>
#include <stdbool.h>

//Typedef Privados
typedef uint32_t tick_t;
typedef bool bool_t;
typedef struct {
   tick_t startTime;
   tick_t duration;
   bool_t running;
} delay_t;

Macros Privados
#define ciclosdeseados 10              //5 de encendido y 5 de apagado.

//Variables Privadas
delay_t retardo;                                    //estructura del delay
tick_t duracion[] = {1000, 200, 100};    // diferentes duraciones en un array
uint8_t posd = 0;                               // indice del vector de arriba
uint8_t ciclo = 0;                              // candidad de encendidos + apagado realizados

Los prototipos de funciones se escribieron:

//Inicializa el contador con los parametros pasados
void delayInit( delay_t* delay, tick_t duration ){
	delay->duration = duration;
	delay->running = false;
	delay->startTime = HAL_GetTick();
};

//Revisa el valor del flag para saber si se cumplio el retardo
bool_t delayRead( delay_t* delay ){
	if ((HAL_GetTick() - delay->startTime) <= delay->duration) {
		delay->running = false;
	}else{
		delay->running = true;
	}
	return delay->running;
}

//nodifica la duracion del retardo.
void delayWrite( delay_t * delay, tick_t duration ){
	delay->duration = duration;
	delay->running = false;
	delay->startTime = HAL_GetTick();
};

Practica 3 - Ejercicio 1 y 2

Modulariacion del ejercicio anterior fomando la carpeta API donde se crean la sub-carpetas Src y Inc con lo archivos API_delay.h y API_delay.c respectivamente.

Practica 4 - Ejercicio 1 y 2

Dentro de carpeta Practica 4 STM32F429 se encuentran en dos carpetas separadas el ejercicio 1 y 2 de la guia.

Practica 5 - Ejercicio 1 y 2

El ejercicio consistia en la utilizacion del periferico UART para mostrar mensajes en una terminal serie, el punto 1 y 2 estan implementados sobre el mismo ejercio. La placa utilizada tiene conectado el STLINK la USART1 implementada en los puerto PA9 y PA10.

El ejercicio imprime en la terminal cada vez que el led fue precionado y cambia la velocidad del parpadeo

PROYECTO FINAL - PDM

Consiste en un sistema de control de temperatura, la misma debe mostrarse sobre una pantalla LCD, según su valor el sistema puede encontrarse en tres estados (Estable, Precaución y Peligro).

El sistema debe actuar en consecuencia al estado en que se encuentra: Estable: Debe presentar la temp en el display, FAN OFF y ALARM OFF Precaución: Debe presentar la temp en el display, FAN ON y ALARM OFF Peligro: Debe presentar la temp en el display, FAN ON y ALARM ON

About

STM32CubeIDE workspace para Programación de microcontroladores - CESE - FIUBA

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 99.3%
  • Other 0.7%