Advertisement
Guest User

Untitled

a guest
Mar 26th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.39 KB | None | 0 0
  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****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement