Bluepill_Plantilla Es la plantilla base (mejorada) para soporte y compatibilidad en Mbed para la tarjeta "BluePill" basada en el procesador ARM M3 STM32F103C8T6
Dependencies: mbed
Diff: main.cpp
- Revision:
- 6:f47832fe0b07
- Parent:
- 5:e2fe0990d8ad
- Child:
- 7:62b714b5d89d
--- a/main.cpp Sun Jun 21 02:31:47 2020 +0000 +++ b/main.cpp Wed Feb 02 02:09:26 2022 +0000 @@ -10,7 +10,7 @@ ** Descripción : ** Este proyecto hace... ** This module contains user's application code. -** Componentes : GPIO, Timer, etc . +** Componentes : GPIO, Timer, PWM, etc . ** Configuraciones : Includes, Stacks y Drivers externos ** Autores : ** ATEAM Development Group: @@ -23,62 +23,65 @@ ** Date : 20/10/2019 ** Added support for Led_RGB ** 22/09/2018 -** Added LCD Menu, Beta version (with bugs) +** Added LCD Menu, Beta version ** ** ###########################################################################*/ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -: Includes +: I N C L U D E S :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ #include "stm32f103c8t6.h" #include "mbed.h" #include "Serial.h" //#include "AnalogIn.h" +//#include "PwmOut.h" //#include "Led_RGB.h" //#include <stdio.h> - +//#include <conio.h> +//#include <stdlib.h> /* :............................................................................... -: Definiciones +: D E F I N I C I O N E S :............................................................................... */ -#define Led_on 0 // Estado para el Led Encendido -#define Led_off 1 // Estado para el Led Apagado -#define Buzz_On 1 // Estado para Buzzer Encendido -#define Buzz_Off 0 // Estado para Buzzer Apagado -#define on 0 // Estado para boton presionado -#define off 1 // Estado para boton sin presionar -#define hold 2 // Estado para boton mantenido -#define release 3 // Estado para boton liberado +#define LED_ON 0 // Estado para el Led Encendido +#define LED_OFF 1 // Estado para el Led Apagado +#define BUZZ_ON 1 // Estado para Buzzer Encendido +#define BUZZ_OFF 0 // Estado para Buzzer Apagado +#define ON 0 // Estado para boton presionado +#define OFF 1 // Estado para boton sin presionar +#define HOLD 2 // Estado para boton mantenido +#define RELEASE 3 // Estado para boton liberado #define FALSE 0 // Estado FALSO #define TRUE 1 // Estado VERDADERO -#define Ticker_Rate 1000 // Periodo de interrupción (us) -#define Baud_Rate 115200 // Velocidad de Transmisión (Bauds) +#define TICKER_RATE 1000 // Periodo de Interrupción (us) +#define BAUD_RATE 115200 // Velocidad de Transmisión (Bauds) // Velocidades Permitidas: // 300, 600, 1200, 2400, 4800, 9600, // 14400, 19600, 28800, 38400, 57600 // 115200, 230400 /* ++------------------------------------------------------------------------------+ +| C O N F I G U R A C I O N D E P U E R T O S | ++------------------------------------------------------------------------------+ +*/ +Ticker TimerInt; // Inicializa la Interrupción por Timer +DigitalOut Led_Monitor(LED1); // Inicializa el LED Monitor (Interno) +DigitalOut Led_Testigo(PB_1); // Inicializa el LED Testigo (Externo) +PwmOut Pwm1(PA_7); // Inicializa el PWM para el LED Externo +PwmOut Buzzer(PB_0); // Inicializa el PWM para el Buzzer Externo +AnalogIn Sensor1(PB_1); // Inicializa Canal Analógico para Potenciometro 1 +Serial Terminal(PA_2, PA_3); // Inicializa la Comunicación Serial a la PC (Rx, Tx) +/* +------------------------------------------------------------------------------- -| Configuración de Puertos +| V A R I A B L E S G L O B A L E S | +------------------------------------------------------------------------------- */ -//confSysClock(); // Configure system clock (72MHz HSE clock, 48MHz USB clock) -Ticker TimerInt; // Inicializa la Interrupción por Timer -DigitalOut led_monitor(LED1); // Inicializa el LED Monitor (Interno) -DigitalOut led_testigo(PB_1); // Inicializa el LED Testigo (Externo) -PwmOut pwm1(PA_7); // Inicializa el PWM para el LED Externo -PwmOut buzzer(PB_1); // Inicializa el PWM para el Buzzer Externo -AnalogIn pot1(PB_0); // Inicializa Canal Analógico para Potenciometro 1 -Serial terminal(PA_2, PA_3); // Inicializa la Comunicación Serial a la PC -/* -+------------------------------------------------------------------------------- -| Variables Globales de Usuario -+------------------------------------------------------------------------------- -*/ -uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms) -uint16_t counter=250; // Cuenta inicial de 250us +uint16_t v_rate=TICKER_RATE/2; // Velocidad de barrido (500us = 0.5ms) +uint16_t v_counter=250; // Cuenta inicial de 250us +uint16_t v_blink=0; // Cuenta inical de parpadeos +uint16_t v_cuenta=0; // Cuenta inical de parpadeos del LED /* END variables */ /* @@ -88,46 +91,50 @@ */ // Las Definiciones de Funciones Prototipo // y Apuntadores a Vectores de Interrupciones van aquí ! -void TimerInt_OnInterrupt(void); +void TimerInt_OnInterrupt(void); void Blinking_Led(void); void Clear_Screen(void); -void Buzzer_Beep(void); +void Buzzer_Beep(void); +void Setup(void); /* END prototypes */ -/* END definitions */ +/* END definitions */ /* #=============================================================================== -| -| P R O G R A M A P R I N C I P A L -| +|| || +|| P R O G R A M A P R I N C I P A L || +|| || #=============================================================================== */ -int main() -{ // Inicialización de variables, puertos e interrupciones -confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock) -TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate); // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000) -terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión e inicia la comunicación serial. -Clear_Screen(); // Limpia la pantalla de la Terminal -terminal.printf("The System is Wake Up!.\n\r"); -Buzzer_Beep(); // Prueba el Buzzer - - while (true) // El Lazo del Programa principal está aquí !!! +int main() // El código secuencial comienza aquí +{ +//+++++++++++++++++++ Secuencia Principal +++++++++++++++++++++++++++++++++++++ +// Inicialización de variables, puertos, interrupciones y carátula + Setup(); // Inicialización de puertos, interrupciones y condiciones iniciales + Clear_Screen(); // Limpia la pantalla de la Terminal +//+++++++++++++++++++ Lazo Principal +++++++++++++++++++++++++++++++++++++++++++ +// El Lazo del Programa principal está aquí !!! + while (true) { Blinking_Led(); // Parapadeo del LED por Software - pwm1 = pot1.read(); // Lee el Potenciometro y mueve el Servo - terminal.printf("Blink \r\n"); + Pwm1 = Sensor1.read(); // Lee el Potenciometro y cambia el PWM + v_cuenta++; + Terminal.printf("\rLED Testigo Parpadea %d Veces ... \n\r",v_cuenta); } } /* END main */ /* -................................................................................ -: Rutinas de los Vectores de Interrupción -................................................................................ +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: V E C T O R E S D E I N T E R R U P C I Ó N +:: (Rutinas de Atención a Interrupciones) +:: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ // Las Rutinas de Atención a Interrupciones van aquí ! /* -** =================================================================== +** ============================================================================= ** Vector : TimerInt_OnInterrupt() */ /*! @@ -141,85 +148,144 @@ ** RTOS specific data. The pointer is passed ** as the parameter of Init method. */ -/* ===================================================================*/ -void TimerInt_OnInterrupt() // Rutina de Atención al Ticker +/* ========================================================================== */ +void TimerInt_OnInterrupt() // Rutina de Atención al Ticker { - counter--; // Aquí va la Rutina de Servicio ! - if (!counter) + v_counter--; // Aquí va la Rutina de Servicio ! + if (!v_counter) { - terminal.printf("Counter Finish! \r\n"); - led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled) - counter = Rate; // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500) + v_blink++; + Terminal.printf("\rLED Monitor Flashing %d Times !!! ",v_blink); + Led_Monitor = !Led_Monitor; // Parapadeo del LED por Interrupción (LED Toggled) + v_counter = v_rate; // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500) } } /* END Events */ /* -________________________________________________________________________________ -| -| Funciones Prototipo -|_______________________________________________________________________________ + ______________________________________________________________________________ +/______________________________________________________________________________\ +| | +| F U N C I O N E S P R O T O T I P O | +|______________________________________________________________________________| +\______________________________________________________________________________/ */ // Las Funciones Prototipo van aquí ! /* -|-------------------------------------------------- -| Función Blinking_Led() -|-------------------------------------------------- +|------------------------------------------------------------------------------- +| Función : Setup() +| +| Descripción : Inicialización de variables, puertos e interrupciones +| +| Parámetros : Ninguno +| +| Retorna : Nada +|------------------------------------------------------------------------------- +*/ +void Setup() +{ + confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock) + TimerInt.attach_us(&TimerInt_OnInterrupt, TICKER_RATE); // Le asigna el periodo de interrupción de 1ms (TICKER_RATE=1000) + Terminal.baud(BAUD_RATE); // Se configura la velocidad de transmisión e inicia la comunicación serial. + Terminal.printf("The System is Wake Up!.\n\r"); + Buzzer_Beep(); // Prueba el Buzzer +} +/* +|------------------------------------------------------------------------------- +| Función : Blinking_Led() +| +| Descripción : Rutina para Parpadeo del Led por Software +| +| Parámetros : Ninguno +| +| Retorna : Nada +|------------------------------------------------------------------------------- */ void Blinking_Led() // Software Blinking routine for LED { // The on-board LED is connected, via a resistor, to +3.3V (not to GND). // So to turn the LED on or off we have to set it to 0 or 1 respectively - led_testigo = 1; // turn the LED on (using Positive Logic) + Led_Testigo = 1; // turn the LED on (using Positive Logic) wait_ms(200); // 200 millisecond - led_testigo = 0; // turn the LED off (using Positive Logic) + Led_Testigo = 0; // turn the LED off (using Positive Logic) wait_ms(1000); // 1000 millisecond } + /* -|-------------------------------------------------- -| Función clear_screen() -|-------------------------------------------------- +|------------------------------------------------------------------------------- +| Función : Clear_Screen() +| +| Descripción : Limpia la Pantalla de la Terminal +| +| Parámetros : Ninguno +| +| Retorna : Nada +|------------------------------------------------------------------------------- */ void Clear_Screen() { // ANSI Terminal Commands - terminal.printf("\x1B[2J"); // secuencia de Escape \e1B[2J - terminal.printf("\x1B[H"); // secuencia de Escape \e1B[H + Terminal.printf("\x1B[2J"); // secuencia de Escape \e[2J + Terminal.printf("\x1B[H"); // secuencia de Escape \e[H } + /* -|-------------------------------------------------- -| Función Buzzer_Beep() -|-------------------------------------------------- +|------------------------------------------------------------------------------- +| Función : Buzzer_Beep() +| +| Descripción : Rutina para prueba del Buzzer +| +| Parámetros : Ninguno +| +| Retorna : Nada +|------------------------------------------------------------------------------- */ void Buzzer_Beep() // Software routine for Buzzer Beep { - terminal.printf("Testing Buzzer... \n\r"); - buzzer = Buzz_On; + Terminal.printf("Testing Buzzer... \n\r"); + Buzzer = BUZZ_ON; wait_ms(750); - buzzer = Buzz_Off; + Buzzer = BUZZ_OFF; wait_ms(125); - buzzer = Buzz_On; + Buzzer = BUZZ_ON; wait_ms(250); - buzzer = Buzz_Off; + Buzzer = BUZZ_OFF; wait_ms(125); - buzzer = Buzz_On; + Buzzer = BUZZ_ON; wait_ms(500); - buzzer = Buzz_Off; - terminal.printf("Buzzer OK ! \n\r"); + Buzzer = BUZZ_OFF; + Terminal.printf("Buzzer OK ! \n\r"); } /* END functions */ /* END program */ -/*+----------------------------------------------------------------------------- -*+ La documentación va aquí!: -*+----------------------------------------------------------------------------- +/* +*+****************************************************************************** +*+ D O C U M E N T A C I Ó N +*+****************************************************************************** +*+ La documentación va aquí!: +*+ +*+------------------------------------------------------------------------------ +*+ IDENTIFICADORES +*+------------------------------------------------------------------------------ +*+ +*+ prefijo signifcado uso +*+ v_ variable (var) v_nombre_variable +*+ c_ constante (const) c_nombre_constante +*+ i_ indice (index) i_nombre_indice +*+ p_ apuntador (pointer) p_nombre_apuntador +*+ l_ etiqueta (label) l_nombre_etiqueta +*+ f_ función (function) f_nombre_funcion +*+ +*+------------------------------------------------------------------------------ *+ Conexión al Led Testigo: -*+ +*+------------------------------------------------------------------------------ +*+ *+ Los leds se pueden conectar a cualquier pin que se declare como DigitalOut. *+ El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de *+ 3.3V, pero se recomienda no exceder de 1mA por salida. *+ Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms. -*+ +*+ *+ 3.3V o 5V *+ O *+ | @@ -237,14 +303,14 @@ *+ | *+ |__________________________ PIN (Digital Out) *+ -*+ -*+ -*+ +*+ +*+ +*+ *+ 1K -*+ +*+ *+ _________/\ /\ /\ _____ PIN (Digital Out) *+ | \/ \/ \/ -*+ | +*+ | *+ | *+ ___|___ *+ \ / @@ -261,18 +327,86 @@ *+ *+ GND *+ -*+----------------------------------------------------------------------------* +*+------------------------------------------------------------------------------ +*+ Descripción del Conexionado para el Buzzer Piezo-Eléctrico +*+------------------------------------------------------------------------------ +*+ +*+ 100 +*+ PWM Pin -----/\/\/\/-------| +*+ | +*+ | + +*+ ( ) +*+ ( o ) BUZZER +*+ ( ) +*+ | +*+ | +*+ | +*+ ----- +*+ --- +*+ - +*+ +*+------------------------------------------------------------------------------ +*+ Conexión al Potenciometro: +*+ +*+ Como recomendación hay que poner un filtro pasa bajas para evitar que el +*+ ruido al convertidor analógico/digital. +*+ +*+ 3.3V +*+ O +*+ | +*+ | +*+ | Conexión de los Potenciometros +*+ | +*+ / +*+ \ 10K +*+ / 100 +*+ \ <----/\/\/\/\--------------> PIN (AnalogIn Pin) +*+ \ | +*+ / | +*+ \ ----- 0.1uF +*+ | ----- +*+ | | +*+ | | +*+ | | +*+ ___|___ ___|___ +*+ _____ _____ +*+ ___ ___ +*+ _ _ +*+ +*+ GND GND +*+ +*+ +*+ Conexión al Joy Stick Keyes +*+ +*+ 1 2 3 4 5 +*+ GND Vcc VrX VrY SW +*+ +*+ +*+ +*+------------------------------------------------------------------------------ +*+ Conexión hacia la Terminal Serial: +*+------------------------------------------------------------------------------ +*+ +*+ Los Transeptores recomedados para se pueden conectar a los siguientes pines +*+ de las UART's que posee la Bluepill por medio del siguiente conexionado. +*+ +*+ UART1 UART2 UART3 CABLE CP2102 PL2303 CH340G FT232RL +*+ PA_9 PA_2 PB_10 Tx ------> Rx 3 2 2 3 +*+ PA_10 PA_3 PB_11 Rx <------ Tx 4 3 3 2 +*+ 3V ------ 3V 5 5 4 1 +*+ GND ------ GND 2 1 1 4 +*+------------------------------------------------------------------------------ *+ *+ Powered by *+ *+ T H E A N T U L I U ' S T E A M R&D Unltd *+ *+ Research, Development, Systems, Equipment, Support & Spare Parts. -*+ (C) Copyright 1989-2019, All Rights Reserved +*+ (C) Copyright 1989-2019, All Rights Reserved *+ -*+ Welcome to The Beaners Proyect Community! +*+ Welcome to The Beaners Proyect Community! *+----------------------------------------------------------------------------*/ /* END documentation */ -/* END Mbed */ \ No newline at end of file +/* END Mbed */ \ No newline at end of file