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

Committer:
Antulius
Date:
Sun Jun 21 02:31:47 2020 +0000
Revision:
5:e2fe0990d8ad
Parent:
4:e1e547c34929
Child:
6:f47832fe0b07
Plantilla Mejorada para la Tarjeta "Blue Pill" (STM32F103C8T6)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 4:e1e547c34929 1 /* #############################################################################
Antulius 0:9f7581d1af6f 2 ** Archivo : main.c
Antulius 5:e2fe0990d8ad 3 ** Proyecto : STM32F103C8_Plantilla_Enhenced
Antulius 4:e1e547c34929 4 ** Procesador : STM32F103C8T6
Antulius 4:e1e547c34929 5 ** Plataforma : Blue Pill
Antulius 0:9f7581d1af6f 6 ** Herramienta : Mbed
Antulius 4:e1e547c34929 7 ** Compilador : Mbed Online C Compiler
Antulius 4:e1e547c34929 8 ** Version : Mbed-OS 5.15.0
Antulius 4:e1e547c34929 9 ** Fecha/Hora : 18-12-2019, 11:48, # CodeGen: 0
Antulius 0:9f7581d1af6f 10 ** Descripción :
Antulius 0:9f7581d1af6f 11 ** Este proyecto hace...
Antulius 0:9f7581d1af6f 12 ** This module contains user's application code.
Antulius 0:9f7581d1af6f 13 ** Componentes : GPIO, Timer, etc .
Antulius 0:9f7581d1af6f 14 ** Configuraciones : Includes, Stacks y Drivers externos
Antulius 0:9f7581d1af6f 15 ** Autores :
Antulius 0:9f7581d1af6f 16 ** ATEAM Development Group:
Antulius 0:9f7581d1af6f 17 ** - Antulio Morgado Valle
Antulius 0:9f7581d1af6f 18 **
Antulius 0:9f7581d1af6f 19 ** Versión : Beta
Antulius 0:9f7581d1af6f 20 ** Revisión : A
Antulius 0:9f7581d1af6f 21 ** Release : 0
Antulius 0:9f7581d1af6f 22 ** Bugs & Fixes :
Antulius 0:9f7581d1af6f 23 ** Date : 20/10/2019
Antulius 0:9f7581d1af6f 24 ** Added support for Led_RGB
Antulius 0:9f7581d1af6f 25 ** 22/09/2018
Antulius 0:9f7581d1af6f 26 ** Added LCD Menu, Beta version (with bugs)
Antulius 0:9f7581d1af6f 27 **
Antulius 0:9f7581d1af6f 28 ** ###########################################################################*/
Antulius 0:9f7581d1af6f 29 /*
Antulius 0:9f7581d1af6f 30 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:9f7581d1af6f 31 : Includes
Antulius 0:9f7581d1af6f 32 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:9f7581d1af6f 33 */
Antulius 1:c0ed6c52c441 34 #include "stm32f103c8t6.h"
Antulius 0:9f7581d1af6f 35 #include "mbed.h"
Antulius 5:e2fe0990d8ad 36 #include "Serial.h"
Antulius 0:9f7581d1af6f 37 //#include "AnalogIn.h"
Antulius 0:9f7581d1af6f 38 //#include "Led_RGB.h"
Antulius 5:e2fe0990d8ad 39 //#include <stdio.h>
Antulius 0:9f7581d1af6f 40
Antulius 0:9f7581d1af6f 41 /*
Antulius 0:9f7581d1af6f 42 :...............................................................................
Antulius 0:9f7581d1af6f 43 : Definiciones
Antulius 0:9f7581d1af6f 44 :...............................................................................
Antulius 0:9f7581d1af6f 45 */
Antulius 5:e2fe0990d8ad 46 #define Led_on 0 // Estado para el Led Encendido
Antulius 5:e2fe0990d8ad 47 #define Led_off 1 // Estado para el Led Apagado
Antulius 5:e2fe0990d8ad 48 #define Buzz_On 1 // Estado para Buzzer Encendido
Antulius 5:e2fe0990d8ad 49 #define Buzz_Off 0 // Estado para Buzzer Apagado
Antulius 5:e2fe0990d8ad 50 #define on 0 // Estado para boton presionado
Antulius 5:e2fe0990d8ad 51 #define off 1 // Estado para boton sin presionar
Antulius 5:e2fe0990d8ad 52 #define hold 2 // Estado para boton mantenido
Antulius 5:e2fe0990d8ad 53 #define release 3 // Estado para boton liberado
Antulius 5:e2fe0990d8ad 54 #define FALSE 0 // Estado FALSO
Antulius 5:e2fe0990d8ad 55 #define TRUE 1 // Estado VERDADERO
Antulius 5:e2fe0990d8ad 56 #define Ticker_Rate 1000 // Periodo de interrupción (us)
Antulius 5:e2fe0990d8ad 57 #define Baud_Rate 115200 // Velocidad de Transmisión (Bauds)
Antulius 5:e2fe0990d8ad 58 // Velocidades Permitidas:
Antulius 5:e2fe0990d8ad 59 // 300, 600, 1200, 2400, 4800, 9600,
Antulius 5:e2fe0990d8ad 60 // 14400, 19600, 28800, 38400, 57600
Antulius 5:e2fe0990d8ad 61 // 115200, 230400
Antulius 0:9f7581d1af6f 62 /*
Antulius 0:9f7581d1af6f 63 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 64 | Configuración de Puertos
Antulius 0:9f7581d1af6f 65 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 66 */
Antulius 0:9f7581d1af6f 67 //confSysClock(); // Configure system clock (72MHz HSE clock, 48MHz USB clock)
Antulius 0:9f7581d1af6f 68 Ticker TimerInt; // Inicializa la Interrupción por Timer
Antulius 4:e1e547c34929 69 DigitalOut led_monitor(LED1); // Inicializa el LED Monitor (Interno)
Antulius 4:e1e547c34929 70 DigitalOut led_testigo(PB_1); // Inicializa el LED Testigo (Externo)
Antulius 5:e2fe0990d8ad 71 PwmOut pwm1(PA_7); // Inicializa el PWM para el LED Externo
Antulius 5:e2fe0990d8ad 72 PwmOut buzzer(PB_1); // Inicializa el PWM para el Buzzer Externo
Antulius 5:e2fe0990d8ad 73 AnalogIn pot1(PB_0); // Inicializa Canal Analógico para Potenciometro 1
Antulius 4:e1e547c34929 74 Serial terminal(PA_2, PA_3); // Inicializa la Comunicación Serial a la PC
Antulius 0:9f7581d1af6f 75 /*
Antulius 0:9f7581d1af6f 76 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 77 | Variables Globales de Usuario
Antulius 0:9f7581d1af6f 78 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 79 */
Antulius 0:9f7581d1af6f 80 uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms)
Antulius 0:9f7581d1af6f 81 uint16_t counter=250; // Cuenta inicial de 250us
Antulius 0:9f7581d1af6f 82 /* END variables */
Antulius 0:9f7581d1af6f 83
Antulius 0:9f7581d1af6f 84 /*
Antulius 0:9f7581d1af6f 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:9f7581d1af6f 86 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 0:9f7581d1af6f 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:9f7581d1af6f 88 */
Antulius 0:9f7581d1af6f 89 // Las Definiciones de Funciones Prototipo
Antulius 0:9f7581d1af6f 90 // y Apuntadores a Vectores de Interrupciones van aquí !
Antulius 0:9f7581d1af6f 91 void TimerInt_OnInterrupt(void);
Antulius 0:9f7581d1af6f 92 void Blinking_Led(void);
Antulius 5:e2fe0990d8ad 93 void Clear_Screen(void);
Antulius 5:e2fe0990d8ad 94 void Buzzer_Beep(void);
Antulius 0:9f7581d1af6f 95 /* END prototypes */
Antulius 0:9f7581d1af6f 96
Antulius 0:9f7581d1af6f 97 /* END definitions */
Antulius 0:9f7581d1af6f 98 /*
Antulius 0:9f7581d1af6f 99 #===============================================================================
Antulius 0:9f7581d1af6f 100 |
Antulius 0:9f7581d1af6f 101 | P R O G R A M A P R I N C I P A L
Antulius 0:9f7581d1af6f 102 |
Antulius 0:9f7581d1af6f 103 #===============================================================================
Antulius 0:9f7581d1af6f 104 */
Antulius 0:9f7581d1af6f 105 int main()
Antulius 0:9f7581d1af6f 106 { // Inicialización de variables, puertos e interrupciones
Antulius 0:9f7581d1af6f 107 confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock)
Antulius 0:9f7581d1af6f 108 TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate); // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000)
Antulius 4:e1e547c34929 109 terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión e inicia la comunicación serial.
Antulius 5:e2fe0990d8ad 110 Clear_Screen(); // Limpia la pantalla de la Terminal
Antulius 5:e2fe0990d8ad 111 terminal.printf("The System is Wake Up!.\n\r");
Antulius 5:e2fe0990d8ad 112 Buzzer_Beep(); // Prueba el Buzzer
Antulius 5:e2fe0990d8ad 113
Antulius 5:e2fe0990d8ad 114 while (true) // El Lazo del Programa principal está aquí !!!
Antulius 5:e2fe0990d8ad 115 {
Antulius 5:e2fe0990d8ad 116 Blinking_Led(); // Parapadeo del LED por Software
Antulius 5:e2fe0990d8ad 117 pwm1 = pot1.read(); // Lee el Potenciometro y mueve el Servo
Antulius 5:e2fe0990d8ad 118 terminal.printf("Blink \r\n");
Antulius 5:e2fe0990d8ad 119 }
Antulius 0:9f7581d1af6f 120 }
Antulius 0:9f7581d1af6f 121 /* END main */
Antulius 0:9f7581d1af6f 122
Antulius 0:9f7581d1af6f 123 /*
Antulius 0:9f7581d1af6f 124 ................................................................................
Antulius 0:9f7581d1af6f 125 : Rutinas de los Vectores de Interrupción
Antulius 0:9f7581d1af6f 126 ................................................................................
Antulius 0:9f7581d1af6f 127 */
Antulius 0:9f7581d1af6f 128 // Las Rutinas de Atención a Interrupciones van aquí !
Antulius 5:e2fe0990d8ad 129 /*
Antulius 5:e2fe0990d8ad 130 ** ===================================================================
Antulius 5:e2fe0990d8ad 131 ** Vector : TimerInt_OnInterrupt()
Antulius 5:e2fe0990d8ad 132 */
Antulius 5:e2fe0990d8ad 133 /*!
Antulius 5:e2fe0990d8ad 134 ** @brief
Antulius 5:e2fe0990d8ad 135 ** Called after Ticker is done, [Interrupt service/event]
Antulius 5:e2fe0990d8ad 136 ** and it is enabled:
Antulius 5:e2fe0990d8ad 137 ** TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate);
Antulius 5:e2fe0990d8ad 138 ** the event is enabled and will be executed every [Ticker_Rate]
Antulius 5:e2fe0990d8ad 139 ** @param
Antulius 5:e2fe0990d8ad 140 ** UserDataPtr - Pointer to the user or
Antulius 5:e2fe0990d8ad 141 ** RTOS specific data. The pointer is passed
Antulius 5:e2fe0990d8ad 142 ** as the parameter of Init method.
Antulius 5:e2fe0990d8ad 143 */
Antulius 5:e2fe0990d8ad 144 /* ===================================================================*/
Antulius 0:9f7581d1af6f 145 void TimerInt_OnInterrupt() // Rutina de Atención al Ticker
Antulius 0:9f7581d1af6f 146 {
Antulius 0:9f7581d1af6f 147 counter--; // Aquí va la Rutina de Servicio !
Antulius 0:9f7581d1af6f 148 if (!counter)
Antulius 0:9f7581d1af6f 149 {
Antulius 0:9f7581d1af6f 150 terminal.printf("Counter Finish! \r\n");
Antulius 0:9f7581d1af6f 151 led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled)
Antulius 4:e1e547c34929 152 counter = Rate; // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500)
Antulius 0:9f7581d1af6f 153 }
Antulius 0:9f7581d1af6f 154 }
Antulius 0:9f7581d1af6f 155 /* END Events */
Antulius 0:9f7581d1af6f 156 /*
Antulius 0:9f7581d1af6f 157 ________________________________________________________________________________
Antulius 0:9f7581d1af6f 158 |
Antulius 0:9f7581d1af6f 159 | Funciones Prototipo
Antulius 0:9f7581d1af6f 160 |_______________________________________________________________________________
Antulius 0:9f7581d1af6f 161 */
Antulius 0:9f7581d1af6f 162 // Las Funciones Prototipo van aquí !
Antulius 5:e2fe0990d8ad 163 /*
Antulius 5:e2fe0990d8ad 164 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 165 | Función Blinking_Led()
Antulius 5:e2fe0990d8ad 166 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 167 */
Antulius 0:9f7581d1af6f 168 void Blinking_Led() // Software Blinking routine for LED
Antulius 0:9f7581d1af6f 169 {
Antulius 0:9f7581d1af6f 170 // The on-board LED is connected, via a resistor, to +3.3V (not to GND).
Antulius 0:9f7581d1af6f 171 // So to turn the LED on or off we have to set it to 0 or 1 respectively
Antulius 0:9f7581d1af6f 172 led_testigo = 1; // turn the LED on (using Positive Logic)
Antulius 0:9f7581d1af6f 173 wait_ms(200); // 200 millisecond
Antulius 0:9f7581d1af6f 174 led_testigo = 0; // turn the LED off (using Positive Logic)
Antulius 0:9f7581d1af6f 175 wait_ms(1000); // 1000 millisecond
Antulius 0:9f7581d1af6f 176 }
Antulius 5:e2fe0990d8ad 177 /*
Antulius 5:e2fe0990d8ad 178 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 179 | Función clear_screen()
Antulius 5:e2fe0990d8ad 180 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 181 */
Antulius 5:e2fe0990d8ad 182 void Clear_Screen()
Antulius 5:e2fe0990d8ad 183 {
Antulius 5:e2fe0990d8ad 184 // ANSI Terminal Commands
Antulius 5:e2fe0990d8ad 185 terminal.printf("\x1B[2J"); // secuencia de Escape \e1B[2J
Antulius 5:e2fe0990d8ad 186 terminal.printf("\x1B[H"); // secuencia de Escape \e1B[H
Antulius 5:e2fe0990d8ad 187 }
Antulius 5:e2fe0990d8ad 188 /*
Antulius 5:e2fe0990d8ad 189 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 190 | Función Buzzer_Beep()
Antulius 5:e2fe0990d8ad 191 |--------------------------------------------------
Antulius 5:e2fe0990d8ad 192 */
Antulius 5:e2fe0990d8ad 193 void Buzzer_Beep() // Software routine for Buzzer Beep
Antulius 5:e2fe0990d8ad 194 {
Antulius 5:e2fe0990d8ad 195 terminal.printf("Testing Buzzer... \n\r");
Antulius 5:e2fe0990d8ad 196 buzzer = Buzz_On;
Antulius 5:e2fe0990d8ad 197 wait_ms(750);
Antulius 5:e2fe0990d8ad 198 buzzer = Buzz_Off;
Antulius 5:e2fe0990d8ad 199 wait_ms(125);
Antulius 5:e2fe0990d8ad 200 buzzer = Buzz_On;
Antulius 5:e2fe0990d8ad 201 wait_ms(250);
Antulius 5:e2fe0990d8ad 202 buzzer = Buzz_Off;
Antulius 5:e2fe0990d8ad 203 wait_ms(125);
Antulius 5:e2fe0990d8ad 204 buzzer = Buzz_On;
Antulius 5:e2fe0990d8ad 205 wait_ms(500);
Antulius 5:e2fe0990d8ad 206 buzzer = Buzz_Off;
Antulius 5:e2fe0990d8ad 207 terminal.printf("Buzzer OK ! \n\r");
Antulius 5:e2fe0990d8ad 208 }
Antulius 0:9f7581d1af6f 209 /* END functions */
Antulius 0:9f7581d1af6f 210
Antulius 0:9f7581d1af6f 211 /* END program */
Antulius 0:9f7581d1af6f 212
Antulius 0:9f7581d1af6f 213 /*+-----------------------------------------------------------------------------
Antulius 1:c0ed6c52c441 214 *+ La documentación va aquí!:
Antulius 1:c0ed6c52c441 215 *+-----------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 216 *+ Conexión al Led Testigo:
Antulius 0:9f7581d1af6f 217 *+
Antulius 0:9f7581d1af6f 218 *+ Los leds se pueden conectar a cualquier pin que se declare como DigitalOut.
Antulius 0:9f7581d1af6f 219 *+ El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de
Antulius 0:9f7581d1af6f 220 *+ 3.3V, pero se recomienda no exceder de 1mA por salida.
Antulius 0:9f7581d1af6f 221 *+ Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms.
Antulius 0:9f7581d1af6f 222 *+
Antulius 0:9f7581d1af6f 223 *+ 3.3V o 5V
Antulius 0:9f7581d1af6f 224 *+ O
Antulius 0:9f7581d1af6f 225 *+ |
Antulius 0:9f7581d1af6f 226 *+ |
Antulius 0:9f7581d1af6f 227 *+ /
Antulius 0:9f7581d1af6f 228 *+ \ 1K
Antulius 0:9f7581d1af6f 229 *+ /
Antulius 0:9f7581d1af6f 230 *+ \ UTILIZANDO LÓGICA NEGATIVA
Antulius 0:9f7581d1af6f 231 *+ |
Antulius 0:9f7581d1af6f 232 *+ ___|___
Antulius 0:9f7581d1af6f 233 *+ \ /
Antulius 0:9f7581d1af6f 234 *+ \ /
Antulius 0:9f7581d1af6f 235 *+ \ /
Antulius 0:9f7581d1af6f 236 *+ __\/__
Antulius 0:9f7581d1af6f 237 *+ |
Antulius 0:9f7581d1af6f 238 *+ |__________________________ PIN (Digital Out)
Antulius 0:9f7581d1af6f 239 *+
Antulius 0:9f7581d1af6f 240 *+
Antulius 0:9f7581d1af6f 241 *+
Antulius 0:9f7581d1af6f 242 *+
Antulius 0:9f7581d1af6f 243 *+ 1K
Antulius 0:9f7581d1af6f 244 *+
Antulius 0:9f7581d1af6f 245 *+ _________/\ /\ /\ _____ PIN (Digital Out)
Antulius 0:9f7581d1af6f 246 *+ | \/ \/ \/
Antulius 0:9f7581d1af6f 247 *+ |
Antulius 0:9f7581d1af6f 248 *+ |
Antulius 0:9f7581d1af6f 249 *+ ___|___
Antulius 0:9f7581d1af6f 250 *+ \ /
Antulius 0:9f7581d1af6f 251 *+ \ /
Antulius 0:9f7581d1af6f 252 *+ \ / UTILIZANDO LÓGICA POSITIVA
Antulius 0:9f7581d1af6f 253 *+ __\/__
Antulius 0:9f7581d1af6f 254 *+ |
Antulius 0:9f7581d1af6f 255 *+ |
Antulius 0:9f7581d1af6f 256 *+ |
Antulius 0:9f7581d1af6f 257 *+ ___|___
Antulius 0:9f7581d1af6f 258 *+ _____
Antulius 0:9f7581d1af6f 259 *+ ___
Antulius 0:9f7581d1af6f 260 *+ _
Antulius 0:9f7581d1af6f 261 *+
Antulius 0:9f7581d1af6f 262 *+ GND
Antulius 0:9f7581d1af6f 263 *+
Antulius 0:9f7581d1af6f 264 *+----------------------------------------------------------------------------*
Antulius 0:9f7581d1af6f 265 *+
Antulius 0:9f7581d1af6f 266 *+ Powered by
Antulius 0:9f7581d1af6f 267 *+
Antulius 0:9f7581d1af6f 268 *+ T H E A N T U L I U ' S T E A M R&D Unltd
Antulius 0:9f7581d1af6f 269 *+
Antulius 0:9f7581d1af6f 270 *+ Research, Development, Systems, Equipment, Support & Spare Parts.
Antulius 0:9f7581d1af6f 271 *+ (C) Copyright 1989-2019, All Rights Reserved
Antulius 0:9f7581d1af6f 272 *+
Antulius 0:9f7581d1af6f 273 *+ Welcome to The Beaners Proyect Community!
Antulius 0:9f7581d1af6f 274 *+----------------------------------------------------------------------------*/
Antulius 0:9f7581d1af6f 275
Antulius 3:1ccbb37e3828 276 /* END documentation */
Antulius 3:1ccbb37e3828 277
Antulius 0:9f7581d1af6f 278 /* END Mbed */