daily pastebin goal
25%
SHARE
TWEET

Untitled

a guest Mar 26th, 2019 94 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   * @file           : main.c
  5.   * @brief          : Main program body
  6.   ******************************************************************************
  7.   ** This notice applies to any and all portions of this file
  8.   * that are not between comment pairs USER CODE BEGIN and
  9.   * USER CODE END. Other portions of this file, whether
  10.   * inserted by the user or by software development tools
  11.   * are owned by their respective copyright owners.
  12.   *
  13.   * COPYRIGHT(c) 2019 STMicroelectronics
  14.   *
  15.   * Redistribution and use in source and binary forms, with or without modification,
  16.   * are permitted provided that the following conditions are met:
  17.   *   1. Redistributions of source code must retain the above copyright notice,
  18.   *      this list of conditions and the following disclaimer.
  19.   *   2. Redistributions in binary form must reproduce the above copyright notice,
  20.   *      this list of conditions and the following disclaimer in the documentation
  21.   *      and/or other materials provided with the distribution.
  22.   *   3. Neither the name of STMicroelectronics nor the names of its contributors
  23.   *      may be used to endorse or promote products derived from this software
  24.   *      without specific prior written permission.
  25.   *
  26.   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  27.   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  29.   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  30.   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  32.   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  33.   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  34.   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  35.   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36.   *
  37.   ******************************************************************************
  38.   */
  39. /* USER CODE END Header */
  40.  
  41. /* Includes ------------------------------------------------------------------*/
  42. #include "main.h"
  43.  
  44. /* Private includes ----------------------------------------------------------*/
  45. /* USER CODE BEGIN Includes */
  46. #define N 3
  47. #define NOTAS 3
  48. #define DURACION 1000
  49. #define TIME 50000
  50. #define DO 1911
  51. #define RE 1702
  52. #define MI 1516
  53. #define FA 1431
  54. #define SOL 1275
  55. #define LA 1136
  56. #define SI 1012
  57.  
  58. /* USER CODE END Includes */
  59.  
  60. /* Private typedef -----------------------------------------------------------*/
  61. /* USER CODE BEGIN PTD */
  62.  
  63. /* USER CODE END PTD */
  64.  
  65. /* Private define ------------------------------------------------------------*/
  66. /* USER CODE BEGIN PD */
  67.  
  68. /* USER CODE END PD */
  69.  
  70. /* Private macro -------------------------------------------------------------*/
  71. /* USER CODE BEGIN PM */
  72.  
  73. /* USER CODE END PM */
  74.  
  75. /* Private variables ---------------------------------------------------------*/
  76. ADC_HandleTypeDef hadc;
  77.  
  78. DAC_HandleTypeDef hdac;
  79.  
  80. LCD_HandleTypeDef hlcd;
  81.  
  82. TIM_HandleTypeDef htim2;
  83. TIM_HandleTypeDef htim4;
  84.  
  85. /* USER CODE BEGIN PV */
  86. unsigned short tiempo = 0;
  87. unsigned short modo = 1;
  88.     uint16_t notas[NOTAS]={DO , RE , MI};
  89.     uint16_t duraciones[NOTAS]={DURACION, DURACION, DURACION};
  90. /* USER CODE END PV */
  91.  
  92. /* Private function prototypes -----------------------------------------------*/
  93. void SystemClock_Config(void);
  94. static void MX_GPIO_Init(void);
  95. static void MX_LCD_Init(void);
  96. static void MX_TS_Init(void);
  97. static void MX_TIM2_Init(void);
  98. static void MX_TIM4_Init(void);
  99. static void MX_DAC_Init(void);
  100. static void MX_ADC_Init(void);
  101. void BSP_LCD_GLASS_Init(void);
  102. void BSP_LCD_GLASS_BarLevelConfig(uint8_t BarLevel);
  103. void BSP_LCD_GLASS_Clear(void);
  104. void espera(int);
  105. void BSP_LCD_GLASS_DisplayString(uint8_t* ptr);
  106. /* USER CODE BEGIN PFP */
  107.  
  108. /* USER CODE END PFP */
  109.  
  110. /* Private user code ---------------------------------------------------------*/
  111. /* USER CODE BEGIN 0 */
  112. void TIM2_IRQHandler(void) {
  113.  if ((TIM2->SR & 0x0002)!=0) // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea,
  114.                                                             // han pasado 1000 pasos = 1 segundo, ejecuto la interrupción
  115.  {
  116.  TIM2->CCR1 += tiempo; // Actualizo el valor de la comparación incrementándolo en
  117.                                                 // 1000 pasos = 1 segundo
  118.  TIM2->SR = 0x0000; // Limpio los flags del contador
  119.  }
  120.  }
  121.  
  122.  void TIM4_IRQHandler(void) {
  123.  if ((TIM4->SR & 0x0002)!=0) // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea,
  124.                                                             // han pasado 1000 pasos = 1 segundo, ejecuto la interrupción
  125.  {
  126.  for( int i =0; i < NOTAS; i++){
  127.      
  128.         TIM2->CCR1 = notas[i];
  129.           TIM4->CCR1 = duraciones[i];
  130.  
  131.  }
  132.  TIM4->SR = 0x0000; // Limpio los flags del contador
  133.  }
  134.  }
  135.  
  136.  
  137.  
  138.  void EXTI0_IRQHandler(void) {   //comprobar flag, borrar flag, cambio de modo
  139.  if (EXTI->PR!=0)                                   //parar, poner a cero, configurar.
  140.  {
  141.  
  142.      modo++; // Cambio el modo
  143.      espera(TIME);
  144. if (modo == 1){
  145.     TIM2->CCER = 0x0000;            
  146.     TIM2 -> CR1 &= ~0x0001;
  147.     TIM2 -> CNT = 0;
  148.  }
  149.  if (modo > 1){
  150.  
  151.      modo = 0;
  152.  
  153.  }
  154.  
  155.  
  156.     }
  157.     EXTI->PR = 0x01;   //Limpio el flag
  158.    
  159. }
  160.    
  161.  
  162. /* USER CODE END 0 */
  163.  
  164. /**
  165.   * @brief  The application entry point.
  166.   * @retval int
  167.   */
  168. int main(void)
  169. {
  170.   /* USER CODE BEGIN 1 */
  171.  
  172.   /* USER CODE END 1 */
  173.  
  174.   /* MCU Configuration--------------------------------------------------------*/
  175.  
  176.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  177.   HAL_Init();
  178.  
  179.   /* USER CODE BEGIN Init */
  180.  
  181.   /* USER CODE END Init */
  182.  
  183.   /* Configure the system clock */
  184.   SystemClock_Config();
  185.  
  186.   /* USER CODE BEGIN SysInit */
  187.  
  188.   /* USER CODE END SysInit */
  189.  
  190.   /* Initialize all configured peripherals */
  191.   MX_GPIO_Init();
  192.     MX_ADC_Init();
  193.   MX_LCD_Init();
  194.   MX_TS_Init();
  195.   MX_TIM2_Init();
  196.   MX_TIM4_Init();
  197.   MX_DAC_Init();
  198.   /* USER CODE BEGIN 2 */
  199.     BSP_LCD_GLASS_Init();
  200.     BSP_LCD_GLASS_BarLevelConfig(0);
  201.     BSP_LCD_GLASS_Clear();
  202.  
  203.  
  204.  
  205.     //Ponemos BOTON 1 (PA11) como entrada digital (00)
  206.     GPIOA->MODER &= ~(1 << (11*2 + 1)); //0 en el 2do bit de pin 11 (23)
  207.     GPIOA->MODER &= ~(1 << (11*2)); //0 en el 1er bit de pin 11 (22)
  208.  
  209.     GPIOA->PUPDR &= ~(1 << (11*2 + 1));
  210.     GPIOA->PUPDR |= (1 << (11*2));
  211.    
  212.     //Ponemos BOTON 2 (PA12) como entrada digital (00)
  213.     GPIOA->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  214.     GPIOA->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  215.    
  216.     GPIOA->PUPDR &= ~(1 << (12*2 + 1));
  217.     GPIOA->PUPDR |= (1 << (12*2));
  218.    
  219.     //Ponemos BOTON 3 (PB2) como entrada digital (00)
  220.     GPIOB->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  221.     GPIOB->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  222.    
  223.     GPIOB->PUPDR &= ~(1 << (2*2 + 1));
  224.     GPIOB->PUPDR |= (1 << (2*2));
  225.    
  226.    
  227.     //Ponemos BOTON 4 (PC12) como entrada digital (00)
  228.     GPIOC->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  229.     GPIOC->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  230.        
  231.     GPIOC->PUPDR &= ~(1 << (12*2 + 1));
  232.     GPIOC->PUPDR |= (1 << (12*2));
  233.    
  234.    
  235.     //Ponemos BOTON 5 (PC13) como entrada digital (00)
  236.     GPIOC->MODER &= ~(1 << (13*2 + 1)); //0 en el 2do bit de pin 13 (27)
  237.     GPIOC->MODER &= ~(1 << (13*2)); //0 en el 1er bit de pin 13 (26)
  238.    
  239.        
  240.     GPIOC->PUPDR &= ~(1 << (13*2 + 1));
  241.     GPIOC->PUPDR |= (1 << (13*2));
  242.    
  243.    
  244.     //Ponemos BOTON 6 (PD2) como entrada digital (00)
  245.     GPIOD->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  246.     GPIOD->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  247.        
  248.     GPIOD->PUPDR &= ~(1 << (2*2 + 1));
  249.     GPIOD->PUPDR |= (1 << (2*2));
  250.    
  251.    
  252.     //Ponemos BOTON 7 (PH1) como entrada digital (00)
  253.     GPIOH->MODER &= ~(1 << (1*2 + 1)); //0 en el 2do bit de pin 0 (1)
  254.     GPIOH->MODER &= ~(1 << (1*2)); //0 en el 1er bit de pin 0 (0)
  255.    
  256.     GPIOH->PUPDR &= ~(1 << (1*2 + 1));
  257.     GPIOH->PUPDR |= (1 << (1*2));
  258.    
  259.     //Ponemos BOTON 0 (PA0) como entrada digital (00)
  260.     GPIOA->MODER &= ~(1 << (0*2 + 1)); //0 en el 2do bit de pin 11 (1)
  261.     GPIOA->MODER &= ~(1 << (0*2)); //0 en el 1er bit de pin 11 (0)
  262.    
  263.     // Configuración de EXTI0 por flanco de bajada
  264.     SYSCFG->EXTICR[0] = 0; // Dejo los bits 0-3 del GPIOA como fuente para EXTI
  265.     EXTI->IMR |= 0x01; // Sólo se habilita y no se enmascara la EXTI para PA0
  266.     EXTI->RTSR |= 0x01; // Un ‘1’ inhabilita el evento por flanco de subida en EXTI con PA0
  267.     EXTI->FTSR  &= ~ (0x01); // Un ‘0’ habilita el evento por flanco de bajada en EXT con PA0
  268.    
  269.     //Configuramos PA5 como Alternate Function (10)
  270.     GPIOA->MODER |= (1 << (2*5 + 1)); //1 en el 2do bit de pin 11
  271.     GPIOA->MODER &= ~(1 << (2*5)); //0 en el 1er bit de pin 10
  272.    
  273.    
  274.     GPIOA->AFR[0]|=(0x01 << (5*4)); // AFR para decir que el PA5 es AF1 (TIM2)
  275.  
  276.    
  277.     // Selección del reloj interno: CR1, CR2, SMRC
  278.     TIM2->CR1 = 0x0000;             // Contador apagado
  279.     TIM2->CR2 = 0x0000;             // Siempre "0" en este curso
  280.     TIM2->SMCR = 0x0000;            // Siempre "0" en este curso
  281.    
  282.     TIM2->PSC = 31;                     // Preescalado
  283.     TIM2->CNT = 0;                      // Inicializo el valor del contador a cero
  284.     TIM2->ARR = 0xFFFF;
  285.     TIM2->CCR1 = 1000;
  286.  
  287.     TIM2->DIER = 0x0002;            // Se genera INT
  288.    
  289.     TIM2->CCMR1 = 0x0030;       // con TOGGLE
  290.                                                        
  291.     TIM2->CCER = 0x0000;
  292.     TIM2->EGR |= 0x0001;            // UG = 1 -> Se genera evento de actualización
  293.     TIM2->SR = 0;                           // Limpio los flags del contador
  294.     TIM2->CR1 |= 0x0001;            // CEN = 1 -> Arranco el contador
  295.    
  296.     NVIC-> ISER[0] |= (1<<28);
  297.    
  298.         // Selección del reloj interno: CR1, CR2, SMRC
  299.     TIM4->CR1 = 0x0000;             // Contador apagado
  300.     TIM4->CR2 = 0x0000;             // Siempre "0" en este curso
  301.     TIM4->SMCR = 0x0000;            // Siempre "0" en este curso
  302.    
  303.     TIM4->PSC = 31;                  // Preescalado
  304.     TIM4->CNT = 0;                   // Inicializo el valor del contador a cero
  305.     TIM4->ARR = 0xFFFF;
  306.     TIM4->CCR1 = 1000;
  307.  
  308.     TIM4->DIER = 0x0002;            // Se genera INT
  309.    
  310.     TIM4->CCMR1 = 0x0030;       // con TOGGLE
  311.                                                        
  312.     TIM4->CCER = 0x0000;            // Salida Hardware desactivada
  313.     TIM4->EGR |= 0x0001;            // UG = 1 -> Se genera evento de actualización
  314.     TIM4->SR = 0;                           // Limpio los flags del contador
  315.     TIM4->CR1 |= 0x0001;            // CEN = 1 -> Arranco el contador
  316.    
  317.     NVIC-> ISER[0] |= (1<<6);
  318.        
  319.         short pulsadoUSER[N];
  320.     short pulsadoDO[N];
  321.     short pulsadoRE[N];
  322.     short pulsadoMI[N];
  323.     short pulsadoFA[N];
  324.     short pulsadoSOL[N];
  325.     short pulsadoLA[N];
  326.     short pulsadoSI[N];  
  327.  
  328.  
  329.  
  330.   /* USER CODE END 2 */
  331.  
  332.   /* Infinite loop */
  333.   /* USER CODE BEGIN WHILE */
  334.  
  335.     while (1)
  336.   {            
  337.  
  338.        
  339.         switch(modo) {
  340.  
  341.             case 0:
  342.                            
  343.                         TIM2->CCER = 0x0001;
  344.                         TIM2->CR1 |= 0x0001;
  345.                         TIM4->CR1 |= 0x0001;  
  346.        
  347.             break;
  348.                    
  349.                    
  350.             case 1: // Enciende el LED Verde y no el LED Azul
  351.                                        
  352. //#####################    DO    ############################################################
  353.        
  354.           pulsadoDO[N-1] = pulsadoDO[N-2];
  355.           pulsadoDO[N-2] = pulsadoDO[N-3];
  356.                     if(GPIOA->IDR &(1<<11)){
  357.                                     pulsadoDO[N-3] = 1;
  358.                     }else{
  359.                                     pulsadoDO[N-3] = 0;
  360.                     }
  361.                    
  362.                     if((pulsadoDO[2]==1)& (pulsadoDO[1]==0) &(pulsadoDO[0]==0)){
  363.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    DO");
  364.                        
  365.                             TIM2->CCER = 0x0001;
  366.                             tiempo = 1911; //Valor calculado en Tabla
  367.                        
  368.                             if(TIM2->CNT == 0){
  369.                                 TIM2->CCR1 = tiempo;
  370.                             }
  371.                            
  372.                             TIM2->CR1 |= 0x0001;
  373.  
  374.                     }else if((pulsadoDO[2]==0)&(pulsadoDO[1]==1)&(pulsadoDO[0]==1)){      
  375.                             BSP_LCD_GLASS_Clear();
  376.                             TIM2 -> CR1 &= ~0x0001;
  377.                             TIM2 -> CNT = 0;
  378.                     }
  379.  
  380.                    
  381.                    
  382.                    
  383. //#####################    RE    ############################################################
  384.                    
  385.           pulsadoRE[N-1] = pulsadoRE[N-2];
  386.           pulsadoRE[N-2] = pulsadoRE[N-3];
  387.                     if(GPIOA->IDR &(1<<12)){
  388.                                     pulsadoRE[N-3] = 1;
  389.                     }else{
  390.                                     pulsadoRE[N-3] = 0;
  391.                     }
  392.                    
  393.                     if((pulsadoRE[2]==1)& (pulsadoRE[1]==0) &(pulsadoRE[0]==0)){
  394.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    RE");
  395.                        
  396.                             TIM2->CCER = 0x0001;
  397.                             tiempo = 1702; // calculado tabla
  398.                        
  399.                             if(TIM2->CNT == 0){
  400.                                 TIM2->CCR1 = tiempo;
  401.                             }
  402.                            
  403.                             TIM2->CR1 |= 0x0001;
  404.                            
  405.                     }else if((pulsadoRE[2]==0)&(pulsadoRE[1]==1)&(pulsadoRE[0]==1)){
  406.                             BSP_LCD_GLASS_Clear();
  407.                             TIM2 -> CR1 &= ~0x0001;
  408.                             TIM2 -> CNT = 0;
  409.                     }
  410.                    
  411.                    
  412.                    
  413.                    
  414. //#####################    MI    ############################################################
  415.                    
  416.           pulsadoMI[N-1] = pulsadoMI[N-2];
  417.           pulsadoMI[N-2] = pulsadoMI[N-3];
  418.                     if(GPIOB->IDR &(1<<2)){
  419.                                 pulsadoMI[N-3] = 1;
  420.                     }else{
  421.                                 pulsadoMI[N-3] = 0;
  422.                     }
  423.  
  424.                     if((pulsadoMI[2]==1)& (pulsadoMI[1]==0) &(pulsadoMI[0]==0)){
  425.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    MI");
  426.                        
  427.                             TIM2->CCER = 0x0001;
  428.                             tiempo = 1516; // calculado tabla
  429.                        
  430.                             if(TIM2->CNT == 0){
  431.                                 TIM2->CCR1 = tiempo;
  432.                             }
  433.                            
  434.                             TIM2->CR1 |= 0x0001;
  435.                        
  436.                     }else if((pulsadoMI[2]==0)&(pulsadoMI[1]==1)&(pulsadoMI[0]==1)){
  437.                             BSP_LCD_GLASS_Clear();
  438.                             TIM2 -> CR1 &= ~0x0001;
  439.                             TIM2 -> CNT = 0;
  440.                     }
  441.                    
  442.                    
  443.                    
  444.                    
  445. //#####################    FA    ############################################################
  446.                    
  447.           pulsadoFA[N-1] = pulsadoFA[N-2];
  448.           pulsadoFA[N-2] = pulsadoFA[N-3];
  449.                     if(GPIOC->IDR &(1<<12)){
  450.                                 pulsadoFA[N-3] = 1;
  451.                     }else{
  452.                                 pulsadoFA[N-3] = 0;
  453.                     }
  454.      
  455.                     if((pulsadoFA[2]==1)& (pulsadoFA[1]==0) &(pulsadoFA[0]==0)){
  456.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    FA");
  457.                        
  458.                             TIM2->CCER = 0x0001;
  459.                             tiempo = 1431; // calculado tabla
  460.                        
  461.                             if(TIM2->CNT == 0){
  462.                                 TIM2->CCR1 = tiempo;
  463.                             }
  464.                            
  465.                             TIM2->CR1 |= 0x0001;
  466.                        
  467.                     }else if((pulsadoFA[2]==0)&(pulsadoFA[1]==1)&(pulsadoFA[0]==1)){
  468.                             BSP_LCD_GLASS_Clear();
  469.                             TIM2 -> CR1 &= ~0x0001;
  470.                             TIM2 -> CNT = 0;
  471.                     }
  472.                    
  473.                    
  474.                    
  475.                    
  476. //#####################    SOL    ###########################################################
  477.                    
  478.           pulsadoSOL[N-1] = pulsadoSOL[N-2];
  479.           pulsadoSOL[N-2] = pulsadoSOL[N-3];
  480.                     if(GPIOC->IDR &(1<<13)){
  481.                                 pulsadoSOL[N-3] = 1;
  482.                     }else{
  483.                                 pulsadoSOL[N-3] = 0;
  484.                     }
  485.  
  486.                     if((pulsadoSOL[2]==1)& (pulsadoSOL[1]==0) &(pulsadoSOL[0]==0)){  
  487.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"   SOL");
  488.                        
  489.                             TIM2->CCER = 0x0001;
  490.                             tiempo = 1275; // calculado tabla
  491.                        
  492.                             if(TIM2->CNT == 0){
  493.                                 TIM2->CCR1 = tiempo;
  494.                             }
  495.                            
  496.                             TIM2->CR1 |= 0x0001;
  497.                        
  498.                     }else if((pulsadoSOL[2]==0)&(pulsadoSOL[1]==1)&(pulsadoSOL[0]==1)){
  499.                             BSP_LCD_GLASS_Clear();
  500.                             TIM2 -> CR1 &= ~0x0001;
  501.                             TIM2 -> CNT = 0;
  502.                     }
  503.                    
  504.                    
  505.                    
  506.                    
  507. //#####################    LA    ############################################################
  508.                    
  509.           pulsadoLA[N-1] = pulsadoLA[N-2];
  510.           pulsadoLA[N-2] = pulsadoLA[N-3];
  511.                     if(GPIOD->IDR &(1<<2)){
  512.                                 pulsadoLA[N-3] = 1;
  513.                     }else{
  514.                                 pulsadoLA[N-3] = 0;
  515.                     }
  516.                      
  517.                     if((pulsadoLA[2]==1)& (pulsadoLA[1]==0) &(pulsadoLA[0]==0)){
  518.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    LA");
  519.                        
  520.                             TIM2->CCER = 0x0001;
  521.                             tiempo = 1136; // calculado tabla
  522.                        
  523.                             if(TIM2->CNT == 0){
  524.                                 TIM2->CCR1 = tiempo;
  525.                             }
  526.                            
  527.                             TIM2->CR1 |= 0x0001;
  528.                        
  529.                     }else if((pulsadoLA[2]==0)&(pulsadoLA[1]==1)&(pulsadoLA[0]==1)){
  530.                             BSP_LCD_GLASS_Clear();
  531.                             TIM2 -> CR1 &= ~0x0001;
  532.                             TIM2 -> CNT = 0;
  533.                     }
  534.                    
  535.                    
  536.                    
  537.                    
  538. //#####################    SI    ############################################################
  539.                
  540.           pulsadoSI[N-1] = pulsadoSI[N-2];
  541.           pulsadoSI[N-2] = pulsadoSI[N-3];
  542.                     if(GPIOH->IDR &(1<<1)){
  543.                                 pulsadoSI[N-3] = 1;
  544.                     }else{
  545.                                 pulsadoSI[N-3] = 0;
  546.                     }
  547.  
  548.                     if((pulsadoSI[2]==1)& (pulsadoSI[1]==0) &(pulsadoSI[0]==0)){
  549.                             BSP_LCD_GLASS_DisplayString((uint8_t *)"    SI");
  550.                        
  551.                             TIM2->CCER = 0x0001;
  552.                             tiempo = 1012; // calculado tabla
  553.                        
  554.                             if(TIM2->CNT == 0){
  555.                                 TIM2->CCR1 = tiempo;
  556.                             }
  557.                            
  558.                             TIM2->CR1 |= 0x0001;
  559.                        
  560.                     }else if((pulsadoSI[2]==0)&(pulsadoSI[1]==1)&(pulsadoSI[0]==1)){
  561.                             BSP_LCD_GLASS_Clear();
  562.                             TIM2 -> CR1 &= ~0x0001;
  563.                             TIM2 -> CNT = 0;
  564.                     }
  565.  
  566.             espera(TIME);  
  567.      
  568.             break;
  569.  
  570.  
  571.         }  //switch case
  572.     /* USER CODE END WHILE */
  573.  
  574.     /* USER CODE BEGIN 3 */
  575.   }
  576.   /* USER CODE END 3 */
  577. }
  578.  
  579. /**
  580.   * @brief System Clock Configuration
  581.   * @retval None
  582.   */
  583. void SystemClock_Config(void)
  584. {
  585.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  586.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  587.   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  588.  
  589.   /**Configure the main internal regulator output voltage
  590.   */
  591.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  592.   /**Initializes the CPU, AHB and APB busses clocks
  593.   */
  594.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  595.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  596.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  597.   RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  598.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  599.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  600.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
  601.   RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
  602.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  603.   {
  604.     Error_Handler();
  605.   }
  606.   /**Initializes the CPU, AHB and APB busses clocks
  607.   */
  608.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  609.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  610.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  611.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  612.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  613.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  614.  
  615.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  616.   {
  617.     Error_Handler();
  618.   }
  619.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LCD;
  620.   PeriphClkInit.LCDClockSelection = RCC_RTCCLKSOURCE_LSI;
  621.  
  622.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  623.   {
  624.     Error_Handler();
  625.   }
  626. }
  627.  
  628. /**
  629.   * @brief ADC Initialization Function
  630.   * @param None
  631.   * @retval None
  632.   */
  633. static void MX_ADC_Init(void)
  634. {
  635.  
  636.   /* USER CODE BEGIN ADC_Init 0 */
  637.  
  638.   /* USER CODE END ADC_Init 0 */
  639.  
  640.   ADC_ChannelConfTypeDef sConfig = {0};
  641.  
  642.   /* USER CODE BEGIN ADC_Init 1 */
  643.  
  644.   /* USER CODE END ADC_Init 1 */
  645.   /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  646.   */
  647.   hadc.Instance = ADC1;
  648.   hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  649.   hadc.Init.Resolution = ADC_RESOLUTION_12B;
  650.   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  651.   hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
  652.   hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  653.   hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE;
  654.   hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE;
  655.   hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A;
  656.   hadc.Init.ContinuousConvMode = DISABLE;
  657.   hadc.Init.NbrOfConversion = 1;
  658.   hadc.Init.DiscontinuousConvMode = DISABLE;
  659.   hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  660.   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  661.   hadc.Init.DMAContinuousRequests = DISABLE;
  662.   if (HAL_ADC_Init(&hadc) != HAL_OK)
  663.   {
  664.     Error_Handler();
  665.   }
  666.   /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  667.   */
  668.   sConfig.Channel = ADC_CHANNEL_4;
  669.   sConfig.Rank = ADC_REGULAR_RANK_1;
  670.   sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
  671.   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  672.   {
  673.     Error_Handler();
  674.   }
  675.   /* USER CODE BEGIN ADC_Init 2 */
  676.  
  677.   /* USER CODE END ADC_Init 2 */
  678.  
  679. }
  680.  
  681. /**
  682.   * @brief DAC Initialization Function
  683.   * @param None
  684.   * @retval None
  685.   */
  686. static void MX_DAC_Init(void)
  687. {
  688.  
  689.   /* USER CODE BEGIN DAC_Init 0 */
  690.  
  691.   /* USER CODE END DAC_Init 0 */
  692.  
  693.   DAC_ChannelConfTypeDef sConfig = {0};
  694.  
  695.   /* USER CODE BEGIN DAC_Init 1 */
  696.  
  697.   /* USER CODE END DAC_Init 1 */
  698.   /**DAC Initialization
  699.   */
  700.   hdac.Instance = DAC;
  701.   if (HAL_DAC_Init(&hdac) != HAL_OK)
  702.   {
  703.     Error_Handler();
  704.   }
  705.   /**DAC channel OUT1 config
  706.   */
  707.   sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  708.   sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  709.   if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  710.   {
  711.     Error_Handler();
  712.   }
  713.   /* USER CODE BEGIN DAC_Init 2 */
  714.  
  715.   /* USER CODE END DAC_Init 2 */
  716.  
  717. }
  718.  
  719. /**
  720.   * @brief LCD Initialization Function
  721.   * @param None
  722.   * @retval None
  723.   */
  724. static void MX_LCD_Init(void)
  725. {
  726.  
  727.   /* USER CODE BEGIN LCD_Init 0 */
  728.  
  729.   /* USER CODE END LCD_Init 0 */
  730.  
  731.   /* USER CODE BEGIN LCD_Init 1 */
  732.  
  733.   /* USER CODE END LCD_Init 1 */
  734.   hlcd.Instance = LCD;
  735.   hlcd.Init.Prescaler = LCD_PRESCALER_1;
  736.   hlcd.Init.Divider = LCD_DIVIDER_31;
  737.   hlcd.Init.Duty = LCD_DUTY_1_4;
  738.   hlcd.Init.Bias = LCD_BIAS_1_4;
  739.   hlcd.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;
  740.   hlcd.Init.Contrast = LCD_CONTRASTLEVEL_0;
  741.   hlcd.Init.DeadTime = LCD_DEADTIME_0;
  742.   hlcd.Init.PulseOnDuration = LCD_PULSEONDURATION_4;
  743.   hlcd.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE;
  744.   hlcd.Init.BlinkMode = LCD_BLINKMODE_OFF;
  745.   hlcd.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV32;
  746.   if (HAL_LCD_Init(&hlcd) != HAL_OK)
  747.   {
  748.     Error_Handler();
  749.   }
  750.   /* USER CODE BEGIN LCD_Init 2 */
  751.  
  752.   /* USER CODE END LCD_Init 2 */
  753.  
  754. }
  755.  
  756. /**
  757.   * @brief TIM2 Initialization Function
  758.   * @param None
  759.   * @retval None
  760.   */
  761. static void MX_TIM2_Init(void)
  762. {
  763.  
  764.   /* USER CODE BEGIN TIM2_Init 0 */
  765.  
  766.   /* USER CODE END TIM2_Init 0 */
  767.  
  768.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  769.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  770.  
  771.   /* USER CODE BEGIN TIM2_Init 1 */
  772.  
  773.   /* USER CODE END TIM2_Init 1 */
  774.   htim2.Instance = TIM2;
  775.   htim2.Init.Prescaler = 0;
  776.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  777.   htim2.Init.Period = 0;
  778.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  779.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  780.   {
  781.     Error_Handler();
  782.   }
  783.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  784.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  785.   {
  786.     Error_Handler();
  787.   }
  788.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  789.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  790.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  791.   {
  792.     Error_Handler();
  793.   }
  794.   /* USER CODE BEGIN TIM2_Init 2 */
  795.  
  796.   /* USER CODE END TIM2_Init 2 */
  797.  
  798. }
  799.  
  800. /**
  801.   * @brief TIM4 Initialization Function
  802.   * @param None
  803.   * @retval None
  804.   */
  805. static void MX_TIM4_Init(void)
  806. {
  807.  
  808.   /* USER CODE BEGIN TIM4_Init 0 */
  809.  
  810.   /* USER CODE END TIM4_Init 0 */
  811.  
  812.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  813.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  814.  
  815.   /* USER CODE BEGIN TIM4_Init 1 */
  816.  
  817.   /* USER CODE END TIM4_Init 1 */
  818.   htim4.Instance = TIM4;
  819.   htim4.Init.Prescaler = 0;
  820.   htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  821.   htim4.Init.Period = 0;
  822.   htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  823.   if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  824.   {
  825.     Error_Handler();
  826.   }
  827.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  828.   if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  829.   {
  830.     Error_Handler();
  831.   }
  832.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  833.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  834.   if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  835.   {
  836.     Error_Handler();
  837.   }
  838.   /* USER CODE BEGIN TIM4_Init 2 */
  839.  
  840.   /* USER CODE END TIM4_Init 2 */
  841.  
  842. }
  843.  
  844. /**
  845.   * @brief TS Initialization Function
  846.   * @param None
  847.   * @retval None
  848.   */
  849. static void MX_TS_Init(void)
  850. {
  851.  
  852.   /* USER CODE BEGIN TS_Init 0 */
  853.  
  854.   /* USER CODE END TS_Init 0 */
  855.  
  856.   /* USER CODE BEGIN TS_Init 1 */
  857.  
  858.   /* USER CODE END TS_Init 1 */
  859.   /* USER CODE BEGIN TS_Init 2 */
  860.  
  861.   /* USER CODE END TS_Init 2 */
  862.  
  863. }
  864.  
  865. /**
  866.   * @brief GPIO Initialization Function
  867.   * @param None
  868.   * @retval None
  869.   */
  870. static void MX_GPIO_Init(void)
  871. {
  872.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  873.  
  874.   /* GPIO Ports Clock Enable */
  875.   __HAL_RCC_GPIOC_CLK_ENABLE();
  876.   __HAL_RCC_GPIOH_CLK_ENABLE();
  877.   __HAL_RCC_GPIOA_CLK_ENABLE();
  878.   __HAL_RCC_GPIOB_CLK_ENABLE();
  879.   __HAL_RCC_GPIOD_CLK_ENABLE();
  880.  
  881.   /*Configure GPIO pins : SOL_Pin FA_Pin */
  882.   GPIO_InitStruct.Pin = SOL_Pin|FA_Pin;
  883.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  884.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  885.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  886.  
  887.   /*Configure GPIO pin : SI_Pin */
  888.   GPIO_InitStruct.Pin = SI_Pin;
  889.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  890.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  891.   HAL_GPIO_Init(SI_GPIO_Port, &GPIO_InitStruct);
  892.  
  893.   /*Configure GPIO pin : PH1 */
  894.   GPIO_InitStruct.Pin = GPIO_PIN_1;
  895.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  896.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  897.   HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  898.  
  899.   /*Configure GPIO pin : B1_Pin */
  900.   GPIO_InitStruct.Pin = B1_Pin;
  901.   GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  902.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  903.   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  904.  
  905.   /*Configure GPIO pin : MI_Pin */
  906.   GPIO_InitStruct.Pin = MI_Pin;
  907.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  908.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  909.   HAL_GPIO_Init(MI_GPIO_Port, &GPIO_InitStruct);
  910.  
  911.   /*Configure GPIO pins : DO_Pin RE_Pin */
  912.   GPIO_InitStruct.Pin = DO_Pin|RE_Pin;
  913.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  914.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  915.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  916.  
  917.   /*Configure GPIO pin : PD2 */
  918.   GPIO_InitStruct.Pin = GPIO_PIN_2;
  919.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  920.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  921.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  922.  
  923.   /*Configure GPIO pins : PB6 PB7 */
  924.   GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  925.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  926.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  927.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  928.   GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  929.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  930.  
  931. }
  932.  
  933. /* USER CODE BEGIN 4 */
  934.  
  935. /* USER CODE END 4 */
  936.  
  937. /**
  938.   * @brief  This function is executed in case of error occurrence.
  939.   * @retval None
  940.   */
  941. void Error_Handler(void)
  942. {
  943.   /* USER CODE BEGIN Error_Handler_Debug */
  944.   /* User can add his own implementation to report the HAL error return state */
  945.  
  946.   /* USER CODE END Error_Handler_Debug */
  947. }
  948.  
  949. #ifdef  USE_FULL_ASSERT
  950. /**
  951.   * @brief  Reports the name of the source file and the source line number
  952.   *         where the assert_param error has occurred.
  953.   * @param  file: pointer to the source file name
  954.   * @param  line: assert_param error line source number
  955.   * @retval None
  956.   */
  957. void assert_failed(uint8_t *file, uint32_t line)
  958. {
  959.   /* USER CODE BEGIN 6 */
  960.   /* User can add his own implementation to report the file name and line number,
  961.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  962.   /* USER CODE END 6 */
  963. }
  964. #endif /* USE_FULL_ASSERT */
  965.  
  966. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top