
Bluepill_Plantilla Es la plantilla base (mejorada) para soporte y compatibilidad en Mbed para la tarjeta "BluePill" basada en el procesador ARM M3 STM32F103C8T6
main.cpp
- Committer:
- Antulius
- Date:
- 2020-06-21
- Revision:
- 5:e2fe0990d8ad
- Parent:
- 4:e1e547c34929
- Child:
- 6:f47832fe0b07
File content as of revision 5:e2fe0990d8ad:
/* ############################################################################# ** Archivo : main.c ** Proyecto : STM32F103C8_Plantilla_Enhenced ** Procesador : STM32F103C8T6 ** Plataforma : Blue Pill ** Herramienta : Mbed ** Compilador : Mbed Online C Compiler ** Version : Mbed-OS 5.15.0 ** Fecha/Hora : 18-12-2019, 11:48, # CodeGen: 0 ** Descripción : ** Este proyecto hace... ** This module contains user's application code. ** Componentes : GPIO, Timer, etc . ** Configuraciones : Includes, Stacks y Drivers externos ** Autores : ** ATEAM Development Group: ** - Antulio Morgado Valle ** ** Versión : Beta ** Revisión : A ** Release : 0 ** Bugs & Fixes : ** Date : 20/10/2019 ** Added support for Led_RGB ** 22/09/2018 ** Added LCD Menu, Beta version (with bugs) ** ** ###########################################################################*/ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : Includes :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ #include "stm32f103c8t6.h" #include "mbed.h" #include "Serial.h" //#include "AnalogIn.h" //#include "Led_RGB.h" //#include <stdio.h> /* :............................................................................... : Definiciones :............................................................................... */ #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) // Velocidades Permitidas: // 300, 600, 1200, 2400, 4800, 9600, // 14400, 19600, 28800, 38400, 57600 // 115200, 230400 /* +------------------------------------------------------------------------------- | Configuración de Puertos +------------------------------------------------------------------------------- */ //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 /* END variables */ /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ // Las Definiciones de Funciones Prototipo // y Apuntadores a Vectores de Interrupciones van aquí ! void TimerInt_OnInterrupt(void); void Blinking_Led(void); void Clear_Screen(void); void Buzzer_Beep(void); /* END prototypes */ /* END definitions */ /* #=============================================================================== | | 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í !!! { Blinking_Led(); // Parapadeo del LED por Software pwm1 = pot1.read(); // Lee el Potenciometro y mueve el Servo terminal.printf("Blink \r\n"); } } /* END main */ /* ................................................................................ : Rutinas de los Vectores de Interrupción ................................................................................ */ // Las Rutinas de Atención a Interrupciones van aquí ! /* ** =================================================================== ** Vector : TimerInt_OnInterrupt() */ /*! ** @brief ** Called after Ticker is done, [Interrupt service/event] ** and it is enabled: ** TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate); ** the event is enabled and will be executed every [Ticker_Rate] ** @param ** UserDataPtr - Pointer to the user or ** RTOS specific data. The pointer is passed ** as the parameter of Init method. */ /* ===================================================================*/ void TimerInt_OnInterrupt() // Rutina de Atención al Ticker { counter--; // Aquí va la Rutina de Servicio ! if (!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) } } /* END Events */ /* ________________________________________________________________________________ | | Funciones Prototipo |_______________________________________________________________________________ */ // Las Funciones Prototipo van aquí ! /* |-------------------------------------------------- | Función Blinking_Led() |-------------------------------------------------- */ 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) wait_ms(200); // 200 millisecond led_testigo = 0; // turn the LED off (using Positive Logic) wait_ms(1000); // 1000 millisecond } /* |-------------------------------------------------- | Función clear_screen() |-------------------------------------------------- */ void Clear_Screen() { // ANSI Terminal Commands terminal.printf("\x1B[2J"); // secuencia de Escape \e1B[2J terminal.printf("\x1B[H"); // secuencia de Escape \e1B[H } /* |-------------------------------------------------- | Función Buzzer_Beep() |-------------------------------------------------- */ void Buzzer_Beep() // Software routine for Buzzer Beep { terminal.printf("Testing Buzzer... \n\r"); buzzer = Buzz_On; wait_ms(750); buzzer = Buzz_Off; wait_ms(125); buzzer = Buzz_On; wait_ms(250); buzzer = Buzz_Off; wait_ms(125); buzzer = Buzz_On; wait_ms(500); buzzer = Buzz_Off; terminal.printf("Buzzer OK ! \n\r"); } /* END functions */ /* END program */ /*+----------------------------------------------------------------------------- *+ La documentación va aquí!: *+----------------------------------------------------------------------------- *+ 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 *+ | *+ | *+ / *+ \ 1K *+ / *+ \ UTILIZANDO LÓGICA NEGATIVA *+ | *+ ___|___ *+ \ / *+ \ / *+ \ / *+ __\/__ *+ | *+ |__________________________ PIN (Digital Out) *+ *+ *+ *+ *+ 1K *+ *+ _________/\ /\ /\ _____ PIN (Digital Out) *+ | \/ \/ \/ *+ | *+ | *+ ___|___ *+ \ / *+ \ / *+ \ / UTILIZANDO LÓGICA POSITIVA *+ __\/__ *+ | *+ | *+ | *+ ___|___ *+ _____ *+ ___ *+ _ *+ *+ GND *+ *+----------------------------------------------------------------------------* *+ *+ 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 *+ *+ Welcome to The Beaners Proyect Community! *+----------------------------------------------------------------------------*/ /* END documentation */ /* END Mbed */