MICROCONTROLADORES ARM EN C

 Lista de contenido:

  1. Blue Pill Pinout Diagram (STM32F103)
  2. Ejemplo Nº1:PARPADEO DE LED CON STM32F103C8T6
  3. Ejemplo Nº3: Menú de control con LCD 16x2 e I2C con PCF8574.
  4. Ejemplo Nº4: Visualizar el estado de las entradas del Puerto A en la Pantalla GLCD 128x64.
  5. Ejemplo Nº5: Introducir datos por el teclado  y visualizarlos en el LCD.
  6. Ejemplo Nº6: Diseño básico de control de acceso de una puerta, a través de un teclado 3x4, guardando la clave de 3 dígitos en la memoria EEPROM.
  7. Ejemplo Nº7: Generar una señal modulada en ancho de pulso proporcional al dato introducido por techado 3x4.
  8. Ejemplo Nº8: Modulo de temperatura con el sensor lm35, con salida de 4 a 20m[A], con los datos visualizados en una pantalla oled de 0.96".
  9. Ejemplo Nº9: Modulo de temperatura - Humedad con el sensor HDT11, con los datos visualizados en una pantalla LCD de 16x2.
  10. Ejemplo Nº10: Modulo de temperatura con el sensor LM35 y el PIC16F1824, con salida de 4 a 20m[A], con los datos visualizados en una pantalla LCD, con modelo 3D del diseño PCB.
____________________________
                                                                           

                                                                          ________________________________________

Nº1: Diagrama de Pines del Blue Pill.

________________________________________

STM32F103C8T6

  ________________________________________

Ejemplo Nº1: Parpadeo de Led.

________________________________________


#include "main.h"
#include "gpio.h"
void SystemClock_Config(void);
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init()

  while (1)
  {

	  HAL_GPIO_WritePin(led_GPIO_Port, led_Pin, GPIO_PIN_RESET);
	  HAL_Delay (100);
	  HAL_GPIO_WritePin(led_GPIO_Port, led_Pin, GPIO_PIN_SET);
	  HAL_Delay (100);
  }
}
  ________________________________________

Ejemplo Nº2: Antirrebote de Botones y Representación Binaria con LEDs en STM32.

________________________________________
#include "main.h"
#include "gpio.h"
void SystemClock_Config(void);

void antiRRebote(uint8_t estadoPin,GPIO_TypeDef *puerto,uint16_t pin){

	HAL_Delay(5);
	while(1){
		if(HAL_GPIO_ReadPin(boton_GPIO_Port,boton_Pin)==estadoPin){
			continue;
		}else{
			break;
		}
	}
	HAL_Delay(5);
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  uint8_t estadoBoton = 1;
  uint8_t contador = 0;

  while (1)
  {
	  estadoBoton = HAL_GPIO_ReadPin(boton_GPIO_Port,boton_Pin);
	  if(estadoBoton==0){
		  antiRRebote(estadoBoton,boton_GPIO_Port,boton_Pin);

		  HAL_GPIO_WritePin(out0_GPIO_Port, out0_Pin, (contador & 0x01) ? GPIO_PIN_RESET : GPIO_PIN_SET);  /*extrae el bit menos significativo si es 1 -> set . si es 0 -> reset */
		  HAL_GPIO_WritePin(out1_GPIO_Port, out1_Pin, (contador & 0x02) ? GPIO_PIN_RESET : GPIO_PIN_SET);  /*extrae el bit mas significativo si es 10 -> set . si es 0 -> reset */

	 	  if(contador<3){
	 		  contador++;
	 	  }else{
	 		  contador=0;
	 	  }
	  }
  }
}

  ________________________________________

Ejemplo Nº3: Comunicación Serial con STM32: Lectura de Potenciómetros y Envío de Datos.

________________________________________

#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"

#include <stdio.h>
#include <string.h>
void SystemClock_Config(void);
uint16_t leer_potenciometro() {
    // Iniciar la conversión ADC
    HAL_ADC_Start(&hadc1);
    // Esperar a que la conversión termine
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    // Obtener el valor convertido
    uint16_t adc_value = HAL_ADC_GetValue(&hadc1);
    // Detener la conversión ADC
    HAL_ADC_Stop(&hadc1);
    return adc_value;
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  uint16_t valorADC=0;
  char data[30];
  while (1)
  {
	  valorADC=leer_potenciometro();
	  // Convertir el valor a una cadena de texto
	  sprintf(data, "Valor de ADC: %hu\r\n", valorADC);
	  // Enviar la cadena por UART
	  HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);
	  HAL_Delay(1000);
  }
}

   ________________________________________

Ejemplo Nº4: ADC - MÚLTIPLES CANALES ANALÓGICOS.

________________________________________
#include "main.h"
#include "stdio.h"
#include "string.h"
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef hdma_adc1;

UART_HandleTypeDef huart1;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_ADC1_Init(void);

uint32_t adcDMA[3];
uint16_t adcVALOR[3];
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){
	if(hadc->Instance == ADC1){
		adcVALOR[0] = (uint16_t)adcDMA[0];
		adcVALOR[1] = (uint16_t)adcDMA[1];
		adcVALOR[2] = (uint16_t)adcDMA[2];
	}
}
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_ADC1_Init();
  HAL_ADC_Start_DMA(&hadc1,adcDMA,3);
  HAL_ADC_Start_IT(&hadc1);
  char data[20];

while (1)
  {
	  HAL_ADC_Start_IT(&hadc1);
	  sprintf(data,"ADC 0 = %u\r\n",adcVALOR[0]);
	  HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);

	  sprintf(data,"ADC 1 = %u\r\n",adcVALOR[1]);
	  HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);

	  sprintf(data,"ADC 2 = %u\r\n",adcVALOR[2]);
	  HAL_UART_Transmit(&huart1, (uint8_t*)data, strlen(data), HAL_MAX_DELAY);
	  HAL_Delay(2000);
  }
}


Publicar un comentario

0 Comentarios

Close Menu