Lista de contenido:
- Blue Pill Pinout Diagram (STM32F103)
- Ejemplo Nº1:PARPADEO DE LED CON STM32F103C8T6
- Ejemplo Nº3: Menú de control con LCD 16x2 e I2C con PCF8574.
- Ejemplo Nº4: Visualizar el estado de las entradas del Puerto A en la Pantalla GLCD 128x64.
- Ejemplo Nº5: Introducir datos por el teclado y visualizarlos en el LCD.
- 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.
- Ejemplo Nº7: Generar una señal modulada en ancho de pulso proporcional al dato introducido por techado 3x4.
- 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".
- Ejemplo Nº9: Modulo de temperatura - Humedad con el sensor HDT11, con los datos visualizados en una pantalla LCD de 16x2.
- 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);
}
}
0 Comentarios