daily pastebin goal
20%
SHARE
TWEET

Untitled

a guest Mar 26th, 2019 87 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. uint16_t notas[NOTAS]={DO , RE , MI};
  88. uint16_t duraciones[NOTAS]={DURACION, DURACION, DURACION};
  89. /* USER CODE END PV */
  90.  
  91. /* Private function prototypes -----------------------------------------------*/
  92. void SystemClock_Config(void);
  93. static void MX_GPIO_Init(void);
  94. static void MX_LCD_Init(void);
  95. static void MX_TS_Init(void);
  96. static void MX_TIM2_Init(void);
  97. static void MX_TIM4_Init(void);
  98. static void MX_DAC_Init(void);
  99. static void MX_ADC_Init(void);
  100. void BSP_LCD_GLASS_Init(void);
  101. void BSP_LCD_GLASS_BarLevelConfig(uint8_t BarLevel);
  102. void BSP_LCD_GLASS_Clear(void);
  103. void espera(int);
  104. void BSP_LCD_GLASS_DisplayString(uint8_t* ptr);
  105. /* USER CODE BEGIN PFP */
  106.  
  107. /* USER CODE END PFP */
  108.  
  109. /* Private user code ---------------------------------------------------------*/
  110. /* USER CODE BEGIN 0 */
  111. void TIM2_IRQHandler(void) {
  112.  if ((TIM2->SR & 0x0002)!=0) // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea,
  113.                                                             // han pasado 1000 pasos = 1 segundo, ejecuto la interrupción
  114.  {
  115.  TIM2->CCR1 += tiempo; // Actualizo el valor de la comparación incrementándolo en
  116.                                                 // 1000 pasos = 1 segundo
  117.  TIM2->SR = 0x0000; // Limpio los flags del contador
  118.  }
  119.  }
  120.  
  121.  void EXTI0_IRQHandler(void) {   //comprobar flag, borrar flag, cambio de modo
  122.  if (EXTI->PR!=0)                                   //parar, poner a cero, configurar.
  123.  {
  124.      
  125.     TIM2->CCER = 0x0001;
  126.     for( int i =0; i < NOTAS; i++){
  127.         TIM4->CNT = 0;
  128.         TIM2->CNT = 0;
  129.          if ((TIM2->SR & 0x0002)!=0) // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea,
  130.                                                             // han pasado 1000 pasos = 1 segundo, ejecuto la interrupción
  131.  {
  132.      TIM2->CCR1 = notas[i];
  133.         TIM4->CCR1 = duraciones[i];
  134.  
  135.  TIM2->SR = 0x0000; // Limpio los flags del contador
  136.  }
  137.        
  138.  
  139.     }
  140.     EXTI->PR = 0x01;   //Limpio el flag
  141.  }
  142.  }
  143.  
  144. /* USER CODE END 0 */
  145.  
  146. /**
  147.   * @brief  The application entry point.
  148.   * @retval int
  149.   */
  150. int main(void)
  151. {
  152.   /* USER CODE BEGIN 1 */
  153.  
  154.   /* USER CODE END 1 */
  155.  
  156.   /* MCU Configuration--------------------------------------------------------*/
  157.  
  158.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  159.   HAL_Init();
  160.  
  161.   /* USER CODE BEGIN Init */
  162.  
  163.   /* USER CODE END Init */
  164.  
  165.   /* Configure the system clock */
  166.   SystemClock_Config();
  167.  
  168.   /* USER CODE BEGIN SysInit */
  169.  
  170.   /* USER CODE END SysInit */
  171.  
  172.   /* Initialize all configured peripherals */
  173.   MX_GPIO_Init();
  174.     MX_ADC_Init();
  175.   MX_LCD_Init();
  176.   MX_TS_Init();
  177.   MX_TIM2_Init();
  178.   MX_TIM4_Init();
  179.   MX_DAC_Init();
  180.   /* USER CODE BEGIN 2 */
  181.     BSP_LCD_GLASS_Init();
  182.     BSP_LCD_GLASS_BarLevelConfig(0);
  183.     BSP_LCD_GLASS_Clear();
  184.  
  185.  
  186.  
  187.     //Ponemos BOTON 1 (PA11) como entrada digital (00)
  188.     GPIOA->MODER &= ~(1 << (11*2 + 1)); //0 en el 2do bit de pin 11 (23)
  189.     GPIOA->MODER &= ~(1 << (11*2)); //0 en el 1er bit de pin 11 (22)
  190.  
  191.     GPIOA->PUPDR &= ~(1 << (11*2 + 1));
  192.     GPIOA->PUPDR |= (1 << (11*2));
  193.    
  194.     //Ponemos BOTON 2 (PA12) como entrada digital (00)
  195.     GPIOA->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  196.     GPIOA->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  197.    
  198.     GPIOA->PUPDR &= ~(1 << (12*2 + 1));
  199.     GPIOA->PUPDR |= (1 << (12*2));
  200.    
  201.     //Ponemos BOTON 3 (PB2) como entrada digital (00)
  202.     GPIOB->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  203.     GPIOB->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  204.    
  205.     GPIOB->PUPDR &= ~(1 << (2*2 + 1));
  206.     GPIOB->PUPDR |= (1 << (2*2));
  207.    
  208.    
  209.     //Ponemos BOTON 4 (PC12) como entrada digital (00)
  210.     GPIOC->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  211.     GPIOC->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  212.        
  213.     GPIOC->PUPDR &= ~(1 << (12*2 + 1));
  214.     GPIOC->PUPDR |= (1 << (12*2));
  215.    
  216.    
  217.     //Ponemos BOTON 5 (PC13) como entrada digital (00)
  218.     GPIOC->MODER &= ~(1 << (13*2 + 1)); //0 en el 2do bit de pin 13 (27)
  219.     GPIOC->MODER &= ~(1 << (13*2)); //0 en el 1er bit de pin 13 (26)
  220.    
  221.        
  222.     GPIOC->PUPDR &= ~(1 << (13*2 + 1));
  223.     GPIOC->PUPDR |= (1 << (13*2));
  224.    
  225.    
  226.     //Ponemos BOTON 6 (PD2) como entrada digital (00)
  227.     GPIOD->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  228.     GPIOD->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  229.        
  230.     GPIOD->PUPDR &= ~(1 << (2*2 + 1));
  231.     GPIOD->PUPDR |= (1 << (2*2));
  232.    
  233.    
  234.     //Ponemos BOTON 7 (PH1) como entrada digital (00)
  235.     GPIOH->MODER &= ~(1 << (1*2 + 1)); //0 en el 2do bit de pin 0 (1)
  236.     GPIOH->MODER &= ~(1 << (1*2)); //0 en el 1er bit de pin 0 (0)
  237.    
  238.     GPIOH->PUPDR &= ~(1 << (1*2 + 1));
  239.     GPIOH->PUPDR |= (1 << (1*2));
  240.    
  241.     //Ponemos BOTON 0 (PA0) como entrada digital (00)
  242.     GPIOA->MODER &= ~(1 << (0*2 + 1)); //0 en el 2do bit de pin 11 (1)
  243.     GPIOA->MODER &= ~(1 << (0*2)); //0 en el 1er bit de pin 11 (0)
  244.    
  245.     // Configuración de EXTI0 por flanco de bajada
  246.     SYSCFG->EXTICR[0] = 0; // Dejo los bits 0-3 del GPIOA como fuente para EXTI
  247.     EXTI->IMR |= 0x01; // Sólo se habilita y no se enmascara la EXTI para PA0
  248.     EXTI->FTSR |= 0x01; // Un ‘1’ habilita el evento por flanco de bajada en EXTI con PA0
  249.     EXTI->RTSR &= ~(0x01); // Un ‘0’ inhabilita el evento por flanco de subida en EXT con PA0
  250.    
  251.     //Configuramos PA5 como Alternate Function (10)
  252.     GPIOA->MODER |= (1 << (2*5 + 1)); //1 en el 2do bit de pin 11
  253.     GPIOA->MODER &= ~(1 << (2*5)); //0 en el 1er bit de pin 10
  254.    
  255.    
  256.     GPIOA->AFR[0]|=(0x01 << (5*4)); // AFR para decir que el PA5 es AF1 (TIM2)
  257.  
  258.    
  259.     // Selección del reloj interno: CR1, CR2, SMRC
  260.     TIM2->CR1 = 0x0000;             // Contador apagado
  261.     TIM2->CR2 = 0x0000;             // Siempre "0" en este curso
  262.     TIM2->SMCR = 0x0000;            // Siempre "0" en este curso
  263.    
  264.     TIM2->PSC = 31;                     // Preescalado
  265.     TIM2->CNT = 0;                      // Inicializo el valor del contador a cero
  266.     TIM2->ARR = 0xFFFF;
  267.     TIM2->CCR1 = 1000;
  268.  
  269.     TIM2->DIER = 0x0002;            // Se genera INT
  270.    
  271.     TIM2->CCMR1 = 0x0030;       // con TOGGLE
  272.                                                        
  273.     TIM2->CCER = 0x0000;
  274.     TIM2->EGR |= 0x0001;            // UG = 1 -> Se genera evento de actualización
  275.     TIM2->SR = 0;                           // Limpio los flags del contador
  276.     TIM2->CR1 |= 0x0001;            // CEN = 1 -> Arranco el contador
  277.    
  278.     NVIC-> ISER[0] |= (1<<28);
  279.    
  280.         // Selección del reloj interno: CR1, CR2, SMRC
  281.     TIM4->CR1 = 0x0000;             // Contador apagado
  282.     TIM4->CR2 = 0x0000;             // Siempre "0" en este curso
  283.     TIM4->SMCR = 0x0000;            // Siempre "0" en este curso
  284.    
  285.     TIM4->PSC = 31;                     // Preescalado
  286.     TIM4->CNT = 0;                      // Inicializo el valor del contador a cero
  287.     TIM4->ARR = 0xFFFF;
  288.     TIM4->CCR1 = 1000;
  289.  
  290.     TIM4->DIER = 0x0002;            // Se genera INT
  291.    
  292.     TIM4->CCMR1 = 0x0030;       // con TOGGLE
  293.                                                        
  294.     TIM4->CCER = 0x0000;            // Salida Hardware desactivada
  295.     TIM4->EGR |= 0x0001;            // UG = 1 -> Se genera evento de actualización
  296.     TIM4->SR = 0;                           // Limpio los flags del contador
  297.     TIM4->CR1 |= 0x0001;            // CEN = 1 -> Arranco el contador
  298.    
  299.     NVIC-> ISER[0] |= (1<<6);
  300.        
  301.         short pulsadoUSER[N];
  302.     short pulsadoDO[N];
  303.     short pulsadoRE[N];
  304.     short pulsadoMI[N];
  305.     short pulsadoFA[N];
  306.     short pulsadoSOL[N];
  307.     short pulsadoLA[N];
  308.     short pulsadoSI[N];  
  309.    
  310.  
  311.  
  312.   /* USER CODE END 2 */
  313.  
  314.   /* Infinite loop */
  315.   /* USER CODE BEGIN WHILE */
  316.  
  317.     while (1)
  318.   {            
  319.  
  320. //#####################    USER    ############################################################
  321.                 //MODO MELODIA
  322.                 //
  323.           pulsadoUSER[N-1] = pulsadoUSER[N-2];
  324.           pulsadoUSER[N-2] = pulsadoUSER[N-3];
  325.            
  326.                     if(GPIOA->IDR &(1<<0)){
  327.                     pulsadoUSER[N-3] = 1;
  328.                     }else{
  329.                                     pulsadoUSER[N-3] = 0;
  330.                     }
  331.                          
  332.                     if((pulsadoUSER[2]==1)& (pulsadoUSER[1]==0) &(pulsadoUSER[0]==0)){
  333.  
  334.                        
  335.                         TIM2->CCER = 0x0001;
  336.                         TIM4->CCER = 0x0001;
  337.                         TIM2->CR1 |= 0x0001;
  338.                         TIM4->CR1 |= 0x0001;
  339.                        
  340.                         BSP_LCD_GLASS_DisplayString((uint8_t *)" USER ");
  341.                            
  342.                        
  343.                     }else if((pulsadoUSER[2]==0)&(pulsadoUSER[1]==1)&(pulsadoUSER[0]==1)){         
  344.                             BSP_LCD_GLASS_Clear();
  345.                             TIM2 -> CR1 &= ~0x0001;
  346.                             TIM2 -> CNT = 0;
  347.                     }
  348.  
  349.                    
  350.                    
  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.     /* USER CODE END WHILE */
  569.  
  570.     /* USER CODE BEGIN 3 */
  571.   }
  572.   /* USER CODE END 3 */
  573. }
  574.  
  575. /**
  576.   * @brief System Clock Configuration
  577.   * @retval None
  578.   */
  579. void SystemClock_Config(void)
  580. {
  581.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  582.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  583.   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  584.  
  585.   /**Configure the main internal regulator output voltage
  586.   */
  587.   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  588.   /**Initializes the CPU, AHB and APB busses clocks
  589.   */
  590.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  591.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  592.   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  593.   RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  594.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  595.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  596.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
  597.   RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
  598.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  599.   {
  600.     Error_Handler();
  601.   }
  602.   /**Initializes the CPU, AHB and APB busses clocks
  603.   */
  604.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  605.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  606.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  607.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  608.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  609.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  610.  
  611.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  612.   {
  613.     Error_Handler();
  614.   }
  615.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LCD;
  616.   PeriphClkInit.LCDClockSelection = RCC_RTCCLKSOURCE_LSI;
  617.  
  618.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  619.   {
  620.     Error_Handler();
  621.   }
  622. }
  623.  
  624. /**
  625.   * @brief ADC Initialization Function
  626.   * @param None
  627.   * @retval None
  628.   */
  629. static void MX_ADC_Init(void)
  630. {
  631.  
  632.   /* USER CODE BEGIN ADC_Init 0 */
  633.  
  634.   /* USER CODE END ADC_Init 0 */
  635.  
  636.   ADC_ChannelConfTypeDef sConfig = {0};
  637.  
  638.   /* USER CODE BEGIN ADC_Init 1 */
  639.  
  640.   /* USER CODE END ADC_Init 1 */
  641.   /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  642.   */
  643.   hadc.Instance = ADC1;
  644.   hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  645.   hadc.Init.Resolution = ADC_RESOLUTION_12B;
  646.   hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  647.   hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
  648.   hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  649.   hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE;
  650.   hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE;
  651.   hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A;
  652.   hadc.Init.ContinuousConvMode = DISABLE;
  653.   hadc.Init.NbrOfConversion = 1;
  654.   hadc.Init.DiscontinuousConvMode = DISABLE;
  655.   hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  656.   hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  657.   hadc.Init.DMAContinuousRequests = DISABLE;
  658.   if (HAL_ADC_Init(&hadc) != HAL_OK)
  659.   {
  660.     Error_Handler();
  661.   }
  662.   /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  663.   */
  664.   sConfig.Channel = ADC_CHANNEL_4;
  665.   sConfig.Rank = ADC_REGULAR_RANK_1;
  666.   sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
  667.   if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  668.   {
  669.     Error_Handler();
  670.   }
  671.   /* USER CODE BEGIN ADC_Init 2 */
  672.  
  673.   /* USER CODE END ADC_Init 2 */
  674.  
  675. }
  676.  
  677. /**
  678.   * @brief DAC Initialization Function
  679.   * @param None
  680.   * @retval None
  681.   */
  682. static void MX_DAC_Init(void)
  683. {
  684.  
  685.   /* USER CODE BEGIN DAC_Init 0 */
  686.  
  687.   /* USER CODE END DAC_Init 0 */
  688.  
  689.   DAC_ChannelConfTypeDef sConfig = {0};
  690.  
  691.   /* USER CODE BEGIN DAC_Init 1 */
  692.  
  693.   /* USER CODE END DAC_Init 1 */
  694.   /**DAC Initialization
  695.   */
  696.   hdac.Instance = DAC;
  697.   if (HAL_DAC_Init(&hdac) != HAL_OK)
  698.   {
  699.     Error_Handler();
  700.   }
  701.   /**DAC channel OUT1 config
  702.   */
  703.   sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  704.   sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  705.   if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  706.   {
  707.     Error_Handler();
  708.   }
  709.   /* USER CODE BEGIN DAC_Init 2 */
  710.  
  711.   /* USER CODE END DAC_Init 2 */
  712.  
  713. }
  714.  
  715. /**
  716.   * @brief LCD Initialization Function
  717.   * @param None
  718.   * @retval None
  719.   */
  720. static void MX_LCD_Init(void)
  721. {
  722.  
  723.   /* USER CODE BEGIN LCD_Init 0 */
  724.  
  725.   /* USER CODE END LCD_Init 0 */
  726.  
  727.   /* USER CODE BEGIN LCD_Init 1 */
  728.  
  729.   /* USER CODE END LCD_Init 1 */
  730.   hlcd.Instance = LCD;
  731.   hlcd.Init.Prescaler = LCD_PRESCALER_1;
  732.   hlcd.Init.Divider = LCD_DIVIDER_31;
  733.   hlcd.Init.Duty = LCD_DUTY_1_4;
  734.   hlcd.Init.Bias = LCD_BIAS_1_4;
  735.   hlcd.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;
  736.   hlcd.Init.Contrast = LCD_CONTRASTLEVEL_0;
  737.   hlcd.Init.DeadTime = LCD_DEADTIME_0;
  738.   hlcd.Init.PulseOnDuration = LCD_PULSEONDURATION_4;
  739.   hlcd.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE;
  740.   hlcd.Init.BlinkMode = LCD_BLINKMODE_OFF;
  741.   hlcd.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV32;
  742.   if (HAL_LCD_Init(&hlcd) != HAL_OK)
  743.   {
  744.     Error_Handler();
  745.   }
  746.   /* USER CODE BEGIN LCD_Init 2 */
  747.  
  748.   /* USER CODE END LCD_Init 2 */
  749.  
  750. }
  751.  
  752. /**
  753.   * @brief TIM2 Initialization Function
  754.   * @param None
  755.   * @retval None
  756.   */
  757. static void MX_TIM2_Init(void)
  758. {
  759.  
  760.   /* USER CODE BEGIN TIM2_Init 0 */
  761.  
  762.   /* USER CODE END TIM2_Init 0 */
  763.  
  764.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  765.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  766.  
  767.   /* USER CODE BEGIN TIM2_Init 1 */
  768.  
  769.   /* USER CODE END TIM2_Init 1 */
  770.   htim2.Instance = TIM2;
  771.   htim2.Init.Prescaler = 0;
  772.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  773.   htim2.Init.Period = 0;
  774.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  775.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  776.   {
  777.     Error_Handler();
  778.   }
  779.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  780.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  781.   {
  782.     Error_Handler();
  783.   }
  784.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  785.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  786.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  787.   {
  788.     Error_Handler();
  789.   }
  790.   /* USER CODE BEGIN TIM2_Init 2 */
  791.  
  792.   /* USER CODE END TIM2_Init 2 */
  793.  
  794. }
  795.  
  796. /**
  797.   * @brief TIM4 Initialization Function
  798.   * @param None
  799.   * @retval None
  800.   */
  801. static void MX_TIM4_Init(void)
  802. {
  803.  
  804.   /* USER CODE BEGIN TIM4_Init 0 */
  805.  
  806.   /* USER CODE END TIM4_Init 0 */
  807.  
  808.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  809.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  810.  
  811.   /* USER CODE BEGIN TIM4_Init 1 */
  812.  
  813.   /* USER CODE END TIM4_Init 1 */
  814.   htim4.Instance = TIM4;
  815.   htim4.Init.Prescaler = 0;
  816.   htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  817.   htim4.Init.Period = 0;
  818.   htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  819.   if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  820.   {
  821.     Error_Handler();
  822.   }
  823.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  824.   if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  825.   {
  826.     Error_Handler();
  827.   }
  828.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  829.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  830.   if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  831.   {
  832.     Error_Handler();
  833.   }
  834.   /* USER CODE BEGIN TIM4_Init 2 */
  835.  
  836.   /* USER CODE END TIM4_Init 2 */
  837.  
  838. }
  839.  
  840. /**
  841.   * @brief TS Initialization Function
  842.   * @param None
  843.   * @retval None
  844.   */
  845. static void MX_TS_Init(void)
  846. {
  847.  
  848.   /* USER CODE BEGIN TS_Init 0 */
  849.  
  850.   /* USER CODE END TS_Init 0 */
  851.  
  852.   /* USER CODE BEGIN TS_Init 1 */
  853.  
  854.   /* USER CODE END TS_Init 1 */
  855.   /* USER CODE BEGIN TS_Init 2 */
  856.  
  857.   /* USER CODE END TS_Init 2 */
  858.  
  859. }
  860.  
  861. /**
  862.   * @brief GPIO Initialization Function
  863.   * @param None
  864.   * @retval None
  865.   */
  866. static void MX_GPIO_Init(void)
  867. {
  868.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  869.  
  870.   /* GPIO Ports Clock Enable */
  871.   __HAL_RCC_GPIOC_CLK_ENABLE();
  872.   __HAL_RCC_GPIOH_CLK_ENABLE();
  873.   __HAL_RCC_GPIOA_CLK_ENABLE();
  874.   __HAL_RCC_GPIOB_CLK_ENABLE();
  875.   __HAL_RCC_GPIOD_CLK_ENABLE();
  876.  
  877.   /*Configure GPIO pins : SOL_Pin FA_Pin */
  878.   GPIO_InitStruct.Pin = SOL_Pin|FA_Pin;
  879.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  880.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  881.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  882.  
  883.   /*Configure GPIO pin : SI_Pin */
  884.   GPIO_InitStruct.Pin = SI_Pin;
  885.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  886.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  887.   HAL_GPIO_Init(SI_GPIO_Port, &GPIO_InitStruct);
  888.  
  889.   /*Configure GPIO pin : PH1 */
  890.   GPIO_InitStruct.Pin = GPIO_PIN_1;
  891.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  892.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  893.   HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  894.  
  895.   /*Configure GPIO pin : B1_Pin */
  896.   GPIO_InitStruct.Pin = B1_Pin;
  897.   GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  898.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  899.   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  900.  
  901.   /*Configure GPIO pin : MI_Pin */
  902.   GPIO_InitStruct.Pin = MI_Pin;
  903.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  904.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  905.   HAL_GPIO_Init(MI_GPIO_Port, &GPIO_InitStruct);
  906.  
  907.   /*Configure GPIO pins : DO_Pin RE_Pin */
  908.   GPIO_InitStruct.Pin = DO_Pin|RE_Pin;
  909.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  910.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  911.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  912.  
  913.   /*Configure GPIO pin : PD2 */
  914.   GPIO_InitStruct.Pin = GPIO_PIN_2;
  915.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  916.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  917.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  918.  
  919.   /*Configure GPIO pins : PB6 PB7 */
  920.   GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  921.   GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  922.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  923.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  924.   GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  925.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  926.  
  927. }
  928.  
  929. /* USER CODE BEGIN 4 */
  930.  
  931. /* USER CODE END 4 */
  932.  
  933. /**
  934.   * @brief  This function is executed in case of error occurrence.
  935.   * @retval None
  936.   */
  937. void Error_Handler(void)
  938. {
  939.   /* USER CODE BEGIN Error_Handler_Debug */
  940.   /* User can add his own implementation to report the HAL error return state */
  941.  
  942.   /* USER CODE END Error_Handler_Debug */
  943. }
  944.  
  945. #ifdef  USE_FULL_ASSERT
  946. /**
  947.   * @brief  Reports the name of the source file and the source line number
  948.   *         where the assert_param error has occurred.
  949.   * @param  file: pointer to the source file name
  950.   * @param  line: assert_param error line source number
  951.   * @retval None
  952.   */
  953. void assert_failed(uint8_t *file, uint32_t line)
  954. {
  955.   /* USER CODE BEGIN 6 */
  956.   /* User can add his own implementation to report the file name and line number,
  957.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  958.   /* USER CODE END 6 */
  959. }
  960. #endif /* USE_FULL_ASSERT */
  961.  
  962. /************************ (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