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

Revision:
6:f47832fe0b07
Parent:
5:e2fe0990d8ad
Child:
7:62b714b5d89d
diff -r e2fe0990d8ad -r f47832fe0b07 main.cpp
--- 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