Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
403
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.16 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 29
  48. #define NOTASDOS 10
  49. #define NOTASTRES 21
  50. #define MUESTRAS 20
  51. #define TIME 50000
  52. #define DURACION 6000
  53.  
  54. #define DO 191
  55. #define RE 170
  56. #define MI 151
  57. #define FA 143
  58. #define SOL 127
  59. #define LA 113
  60. #define SI 101
  61.  
  62. #define DOT 382
  63. #define RET 340
  64. #define MIT 303
  65. #define FAT 286
  66. #define SOLT 255
  67. #define LAT 227
  68. #define SIT 202
  69.  
  70. #define DOH 180
  71. #define REH 160
  72. #define FAH 135
  73. #define SOLH 120
  74. #define LAH 107
  75.  
  76. #define SILENCIOS 400
  77. #define CORCHEA 1000
  78. #define SCORCHEA 2500
  79. #define NEGRA 4000
  80. #define BLANCA 8000
  81. #define SILENCIO 0
  82. /* USER CODE END Includes */
  83.  
  84. /* Private typedef -----------------------------------------------------------*/
  85. /* USER CODE BEGIN PTD */
  86.  
  87. /* USER CODE END PTD */
  88.  
  89. /* Private define ------------------------------------------------------------*/
  90. /* USER CODE BEGIN PD */
  91.  
  92. /* USER CODE END PD */
  93.  
  94. /* Private macro -------------------------------------------------------------*/
  95. /* USER CODE BEGIN PM */
  96.  
  97. /* USER CODE END PM */
  98.  
  99. /* Private variables ---------------------------------------------------------*/
  100. ADC_HandleTypeDef hadc;
  101.  
  102. DAC_HandleTypeDef hdac;
  103.  
  104. LCD_HandleTypeDef hlcd;
  105.  
  106. TIM_HandleTypeDef htim2;
  107. TIM_HandleTypeDef htim4;
  108.  
  109. UART_HandleTypeDef huart1;
  110.  
  111. /* USER CODE BEGIN PV */
  112. unsigned short tiempo = 0;
  113. unsigned short modo = 1;
  114. unsigned short duracion = 0;
  115.  
  116. unsigned char texto[6];
  117. short pulsSOL; //Variable para SOL PULSADO
  118. unsigned char valor = '4'; //Variable para SELECCIONAR OCTAVA
  119.  
  120. uint8_t sinusoidal[MUESTRAS]={0,6,25,53,89,129,168,204,233,251,255,251,233,204,168,129,89,53,25,6};
  121. unsigned short l = 0;
  122.  
  123. //CUMPLEAÑOS FELIZ
  124. short i = NOTAS;
  125. uint16_t notas[NOTAS]={SOL, LAH, DO, SOL, SOL, FA, FAH, SOL, SOL, LAH, DO, SOL, SOL, FA, FAH, SOL, SOL, LAH, DO, SOL, SOL, FA, FAH, LAH, SOL, RE, LAH, SOL, RE};
  126. uint16_t duraciones[NOTAS]={NEGRA, NEGRA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, CORCHEA, CORCHEA, BLANCA, CORCHEA, CORCHEA, BLANCA};
  127.  
  128. // UNA VAINA LOCA
  129. short j =NOTASDOS;
  130. uint16_t notas_dos[NOTASDOS]={FA, FA, DOH, DOH, DOH, SOLH, SOLH, REH, REH, REH};
  131. uint16_t duraciones_dos[NOTASDOS]={NEGRA, NEGRA, NEGRA, SCORCHEA, SCORCHEA, NEGRA, NEGRA, NEGRA, SCORCHEA, SCORCHEA};
  132.  
  133.  
  134. //FORTNITE DANCE 21
  135. short k =NOTASTRES;
  136. uint16_t notas_tres[NOTASTRES]={MI, SOL, LA, LA, SOL, SILENCIO, MI, SOL, LA, LA, SOL, MI, RE, MI, SILENCIO, LA, SOL, MI, RE, MI, SILENCIO};
  137. uint16_t duraciones_tres[NOTASTRES]={CORCHEA,CORCHEA,CORCHEA,NEGRA, CORCHEA,NEGRA,CORCHEA,CORCHEA,CORCHEA,NEGRA, CORCHEA,CORCHEA,SCORCHEA,NEGRA,SCORCHEA, CORCHEA, CORCHEA, CORCHEA,CORCHEA,CORCHEA, BLANCA };
  138.  
  139.  
  140. /* USER CODE END PV */
  141.  
  142. /* Private function prototypes -----------------------------------------------*/
  143. void SystemClock_Config(void);
  144. static void MX_GPIO_Init(void);
  145. static void MX_LCD_Init(void);
  146. static void MX_TS_Init(void);
  147. static void MX_TIM2_Init(void);
  148. static void MX_TIM4_Init(void);
  149. static void MX_DAC_Init(void);
  150. static void MX_ADC_Init(void);
  151. static void MX_USART1_UART_Init(void);
  152. void BSP_LCD_GLASS_Init (void);
  153. void BSP_LCD_GLASS_BarLevelConfig (uint8_t BarLevel);
  154. void BSP_LCD_GLASS_Clear (void);
  155. void espera (int);
  156. void BSP_LCD_GLASS_DisplayString (uint8_t * ptr);
  157. void Bin2Ascii (int, char []);
  158. /* USER CODE BEGIN PFP */
  159.  
  160. /* USER CODE END PFP */
  161.  
  162. /* Private user code ---------------------------------------------------------*/
  163. /* USER CODE BEGIN 0 */
  164. void TIM2_IRQHandler(void) {
  165. if ((TIM2->SR & 0x0002)!=0) { // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea, ejecuto la interrupción
  166.  
  167. TIM2->CR1 &= ~0x0001; //Parar de contar
  168. TIM2->CCR1 += tiempo; // Actualizo el valor de la comparación
  169. l++;
  170. if( l == MUESTRAS) l = 0;
  171. DAC->DHR8R1 = sinusoidal[l];
  172. TIM2->CR1 |= 0x0001; //Empieza contar
  173.  
  174. TIM2->SR = 0x0000; // Limpio los flags del contador
  175.  
  176. }
  177. }
  178.  
  179. void TIM4_IRQHandler(void) {
  180. if ((TIM4->SR & 0x0002)!=0){ // Si se produce un evento en el canal 1 del TIM4 (TOC), o sea, ejecuto la interrupción
  181.  
  182. TIM4->CR1 &= ~0x0001; // Parar de contar
  183. TIM4 -> CNT = 0; //Poner a 0 CNT
  184. l = 0;
  185. i++;
  186. j++;
  187. k++;
  188.  
  189. TIM4->SR = 0x0000;// Limpio los flags del contador
  190.  
  191. }
  192. }
  193.  
  194. void EXTI0_IRQHandler(void) { //comprobar flag, borrar flag, cambio de modo
  195. if (EXTI->PR!=0){
  196. if(pulsSOL==0){
  197. BSP_LCD_GLASS_Clear();
  198. TIM2 -> CR1 &= ~0x0001;
  199. TIM2 -> CNT = 0;
  200. TIM4 -> CR1 &= ~0x0001;
  201. TIM4 -> CNT = 0;
  202. modo++; // Cambio el modo
  203. espera(TIME);
  204.  
  205. if (modo == 1){
  206. TIM2->CCER = 0x0000;
  207. TIM2 -> CR1 &= ~0x0001;
  208. TIM2 -> CNT = 0;
  209.  
  210. }
  211. if (modo > 1){
  212.  
  213. modo = 0;
  214.  
  215. }
  216. }
  217. }
  218. EXTI->PR = 0x01; //Limpio el flag
  219. }
  220.  
  221. void USART1_IRQHandler(void) {
  222. if ((USART1->SR & 0x0020)!=0) {
  223. valor = USART1->DR;
  224. }
  225. }
  226. /* USER CODE END 0 */
  227.  
  228. /**
  229. * @brief The application entry point.
  230. * @retval int
  231. */
  232. int main(void)
  233. {
  234. /* USER CODE BEGIN 1 */
  235.  
  236. /* USER CODE END 1 */
  237.  
  238. /* MCU Configuration--------------------------------------------------------*/
  239.  
  240. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  241. HAL_Init();
  242.  
  243. /* USER CODE BEGIN Init */
  244.  
  245. /* USER CODE END Init */
  246.  
  247. /* Configure the system clock */
  248. SystemClock_Config();
  249.  
  250. /* USER CODE BEGIN SysInit */
  251.  
  252. /* USER CODE END SysInit */
  253.  
  254. /* Initialize all configured peripherals */
  255. MX_GPIO_Init();
  256. MX_LCD_Init();
  257. MX_TS_Init();
  258. MX_TIM2_Init();
  259. MX_TIM4_Init();
  260. MX_DAC_Init();
  261. MX_ADC_Init();
  262. MX_USART1_UART_Init();
  263. /* USER CODE BEGIN 2 */
  264. BSP_LCD_GLASS_Init();
  265. BSP_LCD_GLASS_BarLevelConfig(0);
  266. BSP_LCD_GLASS_Clear();
  267.  
  268.  
  269.  
  270. //Ponemos BOTON 1 (PA11) como entrada digital (00)
  271. GPIOA->MODER &= ~(1 << (11*2 + 1)); //0 en el 2do bit de pin 11 (23)
  272. GPIOA->MODER &= ~(1 << (11*2)); //0 en el 1er bit de pin 11 (22)
  273.  
  274. GPIOA->PUPDR &= ~(1 << (11*2 + 1));
  275. GPIOA->PUPDR |= (1 << (11*2));
  276.  
  277. //Ponemos BOTON 2 (PA12) como entrada digital (00)
  278. GPIOA->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  279. GPIOA->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  280.  
  281. GPIOA->PUPDR &= ~(1 << (12*2 + 1));
  282. GPIOA->PUPDR |= (1 << (12*2));
  283.  
  284. //Ponemos BOTON 3 (PB2) como entrada digital (00)
  285. GPIOB->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  286. GPIOB->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  287.  
  288. GPIOB->PUPDR &= ~(1 << (2*2 + 1));
  289. GPIOB->PUPDR |= (1 << (2*2));
  290.  
  291.  
  292. //Ponemos BOTON 4 (PC12) como entrada digital (00)
  293. GPIOC->MODER &= ~(1 << (12*2 + 1)); //0 en el 2do bit de pin 12 (25)
  294. GPIOC->MODER &= ~(1 << (12*2)); //0 en el 1er bit de pin 12 (24)
  295.  
  296. GPIOC->PUPDR &= ~(1 << (12*2 + 1));
  297. GPIOC->PUPDR |= (1 << (12*2));
  298.  
  299.  
  300. //Ponemos BOTON 5 (PC13) como entrada digital (00)
  301. GPIOC->MODER &= ~(1 << (13*2 + 1)); //0 en el 2do bit de pin 13 (27)
  302. GPIOC->MODER &= ~(1 << (13*2)); //0 en el 1er bit de pin 13 (26)
  303.  
  304.  
  305. GPIOC->PUPDR &= ~(1 << (13*2 + 1));
  306. GPIOC->PUPDR |= (1 << (13*2));
  307.  
  308.  
  309. //Ponemos BOTON 6 (PD2) como entrada digital (00)
  310. GPIOD->MODER &= ~(1 << (2*2 + 1)); //0 en el 2do bit de pin 2 (5)
  311. GPIOD->MODER &= ~(1 << (2*2)); //0 en el 1er bit de pin 2 (4)
  312.  
  313. GPIOD->PUPDR &= ~(1 << (2*2 + 1));
  314. GPIOD->PUPDR |= (1 << (2*2));
  315.  
  316.  
  317. //Ponemos BOTON 7 (PH1) como entrada digital (00)
  318. GPIOH->MODER &= ~(1 << (1*2 + 1)); //0 en el 2do bit de pin 0 (1)
  319. GPIOH->MODER &= ~(1 << (1*2)); //0 en el 1er bit de pin 0 (0)
  320.  
  321. GPIOH->PUPDR &= ~(1 << (1*2 + 1));
  322. GPIOH->PUPDR |= (1 << (1*2));
  323.  
  324. //Ponemos BOTON 0 (PA0) como entrada digital (00)
  325. GPIOA->MODER &= ~(1 << (0*2 + 1)); //0 en el 2do bit de pin 11 (1)
  326. GPIOA->MODER &= ~(1 << (0*2)); //0 en el 1er bit de pin 11 (0)
  327.  
  328. // Configuración de EXTI0 por flanco de bajada
  329. SYSCFG->EXTICR[0] = 0; // Dejo los bits 0-3 del GPIOA como fuente para EXTI
  330. EXTI->IMR |= 0x01; // Sólo se habilita y no se enmascara la EXTI para PA0
  331. EXTI->RTSR |= 0x01; // Un ‘1’ habilita el evento por flanco de subida en EXTI con PA0
  332. EXTI->FTSR &= ~ (0x01); // Un ‘0’ inhabilita el evento por flanco de bajada en EXT con PA0
  333.  
  334. //Configuramos PA5 como Alternate Function (10)
  335. GPIOA->MODER |= (1 << (2*5 + 1)); //1 en el 2do bit de pin 11
  336. GPIOA->MODER &= ~(1 << (2*5)); //0 en el 1er bit de pin 10
  337.  
  338.  
  339. GPIOA->AFR[0]|=(0x01 << (5*4)); // AFR para decir que el PA5 es AF1 (TIM2)
  340.  
  341.  
  342. // Selección del reloj interno: CR1, CR2, SMRC
  343. TIM2->CR1 = 0x0000; // Contador apagado
  344. TIM2->CR2 = 0x0000; // Siempre "0" en este curso
  345. TIM2->SMCR = 0x0000; // Siempre "0" en este curso
  346.  
  347. TIM2->PSC = 31; // Preescalado
  348. TIM2->CNT = 0; // Inicializo el valor del contador a cero
  349. TIM2->ARR = 0xFFFF;
  350. TIM2->CCR1 = 1000;
  351.  
  352. TIM2->DIER = 0x0002; // Se genera INT
  353.  
  354. TIM2->CCMR1 = 0x0030; // con TOGGLE
  355. TIM2->CCER = 0x0000;
  356.  
  357. TIM2->EGR |= 0x0001; // UG = 1 -> Se genera evento de actualización
  358. TIM2->SR = 0; // Limpio los flags del contador
  359. TIM2->CR1 |= 0x0001; // CEN = 1 -> Arranco el contador
  360.  
  361. NVIC-> ISER[0] |= (1<<28);
  362.  
  363. // Selección del reloj interno: CR1, CR2, SMRC
  364. TIM4->CR1 = 0x0000; // Contador apagado
  365. TIM4->CR2 = 0x0000; // Siempre "0" en este curso
  366. TIM4->SMCR = 0x0000; // Siempre "0" en este curso
  367.  
  368. TIM4->PSC = 3199; // Preescalado
  369. TIM4->CNT = 0; // Inicializo el valor del contador a cero
  370. TIM4->ARR = 0xFFFF;
  371. TIM4->CCR1 = 1000;
  372.  
  373. TIM4->DIER = 0x0002; // Se genera INT
  374.  
  375. TIM4->CCMR1 = 0x0030; // con TOGGLE
  376. TIM4->CCER = 0x0000; // Salida Hardware desactivada
  377.  
  378. TIM4->EGR |= 0x0001; // UG = 1 -> Se genera evento de actualización
  379. TIM4->SR = 0; // Limpio los flags del contador
  380. TIM4->CR1 |= 0x0001; // CEN = 1 -> Arranco el contador
  381.  
  382. NVIC-> ISER[0] |= (1<<6);
  383. NVIC-> ISER[0] |= (1<<30);
  384.  
  385. //Configuracion DAC
  386. GPIOA->MODER |= 0x00000300;
  387. DAC->CR = 0x00000001;
  388.  
  389. // PB6 y PB7 para la USART
  390. GPIOB->MODER |= (0x01 << (2*7+1)); // AF => (10)
  391. GPIOB->MODER &= ~(0x01 << (2*7));
  392. GPIOB->MODER |= (0x01 << (2*6+1)); // AF => (10)
  393. GPIOB->MODER &= ~(0x01 << (2*6));
  394. GPIOB->AFR[0] &= 0x00FFFFFF; // AF para UART => 7
  395. GPIOB->AFR[0] |= 0x77000000;
  396. // Configuración de la USART
  397. USART1->CR1 = 0x0000000C; // UE = 0 , 8 bits, sin
  398. // paridad, OVR8 = 16,
  399. // sin INT, TE = 1, RE = 1
  400. USART1->CR2 = 0x00000000; // 1 bit de parada (00)
  401. USART1->BRR = 0x00000D05; // 208 = D0h
  402. // 0,31*16 = 4,96 = 5h
  403. USART1->CR1 |= 0x01 << 13; // UE = 1
  404. USART1->CR1 |= 0x01 << 5; // Habilitamos la interrupción para Rx (RXNEIE= 1)
  405. NVIC->ISER[1] |= (1 << (37-32)); // Habilito la INT de la USART en el NVIC
  406.  
  407.  
  408. // short pulsadoUSER[N];
  409. short pulsadoDO[N];
  410. short pulsadoRE[N];
  411. short pulsadoMI[N];
  412. short pulsadoFA[N];
  413. short pulsadoSOL[N];
  414. short pulsadoLA[N];
  415. short pulsadoSI[N];
  416. short melodia = 0;
  417. short octava;
  418. /* USER CODE END 2 */
  419.  
  420. /* Infinite loop */
  421. /* USER CODE BEGIN WHILE */
  422.  
  423. while (1)
  424. {
  425.  
  426.  
  427. switch(modo) {
  428.  
  429. case 0:
  430.  
  431.  
  432. if(melodia == 0){
  433.  
  434. if(i < NOTAS)
  435. {
  436. duracion = duraciones[i];
  437. TIM4->CCR1 = duracion;
  438.  
  439.  
  440. tiempo = notas[i];
  441. TIM2->CCR1 += tiempo;
  442.  
  443.  
  444. Bin2Ascii(tiempo,&texto[0]);
  445. BSP_LCD_GLASS_DisplayString((uint8_t *)texto);
  446.  
  447. }else{
  448. i = 0;
  449. }
  450. }else if(melodia ==1){
  451.  
  452. if(j < NOTASDOS)
  453. {
  454. tiempo = notas_dos[j];
  455. duracion = duraciones_dos[j];
  456.  
  457. Bin2Ascii(tiempo,&texto[0]);
  458. BSP_LCD_GLASS_DisplayString((uint8_t *)texto);
  459.  
  460. TIM4->CCR1 = duracion;
  461. TIM2->CCR1 += tiempo;
  462.  
  463.  
  464.  
  465. }else{
  466. j = 0;
  467. }
  468. }else if(melodia ==2){
  469.  
  470. if(k < NOTASTRES)
  471. {
  472. tiempo = notas_tres[k];
  473. duracion = duraciones_tres[k];
  474.  
  475. Bin2Ascii(tiempo,&texto[0]);
  476. BSP_LCD_GLASS_DisplayString((uint8_t *)texto);
  477.  
  478. TIM4->CCR1 = duracion;
  479. TIM2->CCR1 += tiempo;
  480.  
  481.  
  482.  
  483. }else{
  484. k = 0;
  485. }
  486. }
  487.  
  488.  
  489. TIM4->CR1 |= 0x0001;
  490. TIM2->CR1 |= 0x0001;
  491.  
  492.  
  493.  
  494.  
  495.  
  496. pulsadoSOL[N-1] = pulsadoSOL[N-2];
  497. pulsadoSOL[N-2] = pulsadoSOL[N-3];
  498. if(GPIOC->IDR &(1<<13)){
  499. pulsadoSOL[N-3] = 1;
  500. }else{
  501. pulsadoSOL[N-3] = 0;
  502. }
  503.  
  504. if((pulsadoSOL[2]==1)& (pulsadoSOL[1]==0) &(pulsadoSOL[0]==0)){
  505. pulsSOL = 1;
  506. }else if((pulsadoSOL[2]==0)&(pulsadoSOL[1]==1)&(pulsadoSOL[0]==1)){
  507. pulsSOL=0;
  508. }
  509.  
  510.  
  511. //##################### MELODIA 1 ############################################################
  512.  
  513.  
  514. pulsadoDO[N-1] = pulsadoDO[N-2];
  515. pulsadoDO[N-2] = pulsadoDO[N-3];
  516. if(GPIOA->IDR &(1<<11)){
  517. pulsadoDO[N-3] = 1;
  518. }else{
  519. pulsadoDO[N-3] = 0;
  520. }
  521.  
  522. if((pulsadoDO[2]==1)& (pulsadoDO[1]==0) &(pulsadoDO[0]==0)){
  523. TIM4->CR1 &= ~0x0001;
  524. BSP_LCD_GLASS_DisplayString((uint8_t *)" MEL.1");
  525. TIM4 -> CNT = 0;
  526. melodia=1;
  527. j = 0;
  528. }else if((pulsadoDO[2]==0)&(pulsadoDO[1]==1)&(pulsadoDO[0]==1)){
  529. BSP_LCD_GLASS_Clear();
  530. }
  531.  
  532.  
  533. // ##################### MELODIA 2 ############################################################
  534.  
  535.  
  536.  
  537. pulsadoRE[N-1] = pulsadoRE[N-2];
  538. pulsadoRE[N-2] = pulsadoRE[N-3];
  539. if(GPIOA->IDR &(1<<12)){
  540. pulsadoRE[N-3] = 1;
  541. }else{
  542. pulsadoRE[N-3] = 0;
  543. }
  544.  
  545. if((pulsadoRE[2]==1)& (pulsadoRE[1]==0) &(pulsadoRE[0]==0)){
  546. TIM4->CR1 &= ~0x0001;
  547. BSP_LCD_GLASS_DisplayString((uint8_t *)" M2");
  548. TIM4 -> CNT = 0;
  549. melodia=2;
  550. k = 0;
  551.  
  552. }else if((pulsadoRE[2]==0)&(pulsadoRE[1]==1)&(pulsadoRE[0]==1)){
  553. BSP_LCD_GLASS_Clear();
  554. }
  555. //##################### MELODIA 3 ############################################################
  556.  
  557. pulsadoMI[N-1] = pulsadoMI[N-2];
  558. pulsadoMI[N-2] = pulsadoMI[N-3];
  559. if(GPIOB->IDR &(1<<2)){
  560. pulsadoMI[N-3] = 1;
  561. }else{
  562. pulsadoMI[N-3] = 0;
  563. }
  564.  
  565. if((pulsadoMI[2]==1)& (pulsadoMI[1]==0) &(pulsadoMI[0]==0)){
  566. TIM4->CR1 &= ~0x0001;
  567. BSP_LCD_GLASS_DisplayString((uint8_t *)" M3");
  568. TIM4 -> CNT = 0;
  569. melodia = 0;
  570. i = 0;
  571. }else if((pulsadoMI[2]==0)&(pulsadoMI[1]==1)&(pulsadoMI[0]==1)){
  572. BSP_LCD_GLASS_Clear();
  573. }
  574.  
  575.  
  576.  
  577. break;
  578.  
  579.  
  580. case 1:
  581. if(valor == '4'){
  582. octava = 4;
  583. }else if(valor == '3'){
  584. octava = 3;
  585. }
  586.  
  587. //##################### DO ############################################################
  588.  
  589. pulsadoDO[N-1] = pulsadoDO[N-2];
  590. pulsadoDO[N-2] = pulsadoDO[N-3];
  591. if(GPIOA->IDR &(1<<11)){
  592. pulsadoDO[N-3] = 1;
  593. }else{
  594. pulsadoDO[N-3] = 0;
  595. }
  596.  
  597. if((pulsadoDO[2]==1)& (pulsadoDO[1]==0) &(pulsadoDO[0]==0)){
  598. BSP_LCD_GLASS_DisplayString((uint8_t *)" DO");
  599. TIM2->CCER = 0x0001;
  600. if (octava == 4){
  601. tiempo = DO; //Valor calculado en Tabla
  602. }else if(octava == 3){
  603. tiempo = DOT;
  604. }
  605. if(TIM2->CNT == 0){
  606. TIM2->CCR1 = tiempo;
  607. }
  608.  
  609. TIM2->CR1 |= 0x0001;
  610.  
  611. }else if((pulsadoDO[2]==0)&(pulsadoDO[1]==1)&(pulsadoDO[0]==1)){
  612. BSP_LCD_GLASS_Clear();
  613. TIM2 -> CR1 &= ~0x0001;
  614. TIM2 -> CNT = 0;
  615. }
  616.  
  617.  
  618.  
  619.  
  620. //##################### RE ############################################################
  621.  
  622. pulsadoRE[N-1] = pulsadoRE[N-2];
  623. pulsadoRE[N-2] = pulsadoRE[N-3];
  624. if(GPIOA->IDR &(1<<12)){
  625. pulsadoRE[N-3] = 1;
  626. }else{
  627. pulsadoRE[N-3] = 0;
  628. }
  629.  
  630. if((pulsadoRE[2]==1)& (pulsadoRE[1]==0) &(pulsadoRE[0]==0)){
  631. BSP_LCD_GLASS_DisplayString((uint8_t *)" RE");
  632. TIM2->CCER = 0x0001;
  633. if (octava == 4){
  634. tiempo = RE; //Valor calculado en Tabla
  635. }else if(octava == 3){
  636. tiempo = RET;
  637. }
  638.  
  639. if(TIM2->CNT == 0){
  640. TIM2->CCR1 = tiempo;
  641. }
  642.  
  643. TIM2->CR1 |= 0x0001;
  644.  
  645. }else if((pulsadoRE[2]==0)&(pulsadoRE[1]==1)&(pulsadoRE[0]==1)){
  646. BSP_LCD_GLASS_Clear();
  647. TIM2 -> CR1 &= ~0x0001;
  648. TIM2 -> CNT = 0;
  649. }
  650.  
  651.  
  652.  
  653.  
  654. //##################### MI ############################################################
  655.  
  656. pulsadoMI[N-1] = pulsadoMI[N-2];
  657. pulsadoMI[N-2] = pulsadoMI[N-3];
  658. if(GPIOB->IDR &(1<<2)){
  659. pulsadoMI[N-3] = 1;
  660. }else{
  661. pulsadoMI[N-3] = 0;
  662. }
  663.  
  664. if((pulsadoMI[2]==1)& (pulsadoMI[1]==0) &(pulsadoMI[0]==0)){
  665. BSP_LCD_GLASS_DisplayString((uint8_t *)" MI");
  666. TIM2->CCER = 0x0001;
  667. if (octava == 4){
  668. tiempo = MI; //Valor calculado en Tabla
  669. }else if(octava == 3){
  670. tiempo = MIT;
  671. }
  672.  
  673. if(TIM2->CNT == 0){
  674. TIM2->CCR1 = tiempo;
  675. }
  676.  
  677. TIM2->CR1 |= 0x0001;
  678.  
  679. }else if((pulsadoMI[2]==0)&(pulsadoMI[1]==1)&(pulsadoMI[0]==1)){
  680. BSP_LCD_GLASS_Clear();
  681. TIM2 -> CR1 &= ~0x0001;
  682. TIM2 -> CNT = 0;
  683. }
  684.  
  685.  
  686.  
  687.  
  688. //##################### FA ############################################################
  689.  
  690. pulsadoFA[N-1] = pulsadoFA[N-2];
  691. pulsadoFA[N-2] = pulsadoFA[N-3];
  692. if(GPIOC->IDR &(1<<12)){
  693. pulsadoFA[N-3] = 1;
  694. }else{
  695. pulsadoFA[N-3] = 0;
  696. }
  697.  
  698. if((pulsadoFA[2]==1)& (pulsadoFA[1]==0) &(pulsadoFA[0]==0)){
  699. BSP_LCD_GLASS_DisplayString((uint8_t *)" FA");
  700. TIM2->CCER = 0x0001;
  701. if (octava == 4){
  702. tiempo = FA; //Valor calculado en Tabla
  703. }else if(octava == 3){
  704. tiempo = FAT;
  705. }
  706.  
  707. if(TIM2->CNT == 0){
  708. TIM2->CCR1 = tiempo;
  709. }
  710.  
  711. TIM2->CR1 |= 0x0001;
  712.  
  713. }else if((pulsadoFA[2]==0)&(pulsadoFA[1]==1)&(pulsadoFA[0]==1)){
  714. BSP_LCD_GLASS_Clear();
  715. TIM2 -> CR1 &= ~0x0001;
  716. TIM2 -> CNT = 0;
  717. }
  718.  
  719.  
  720.  
  721.  
  722. //##################### SOL ###########################################################
  723.  
  724. pulsadoSOL[N-1] = pulsadoSOL[N-2];
  725. pulsadoSOL[N-2] = pulsadoSOL[N-3];
  726. if(GPIOC->IDR &(1<<13)){
  727. pulsadoSOL[N-3] = 1;
  728. }else{
  729. pulsadoSOL[N-3] = 0;
  730. }
  731.  
  732. if((pulsadoSOL[2]==1)& (pulsadoSOL[1]==0) &(pulsadoSOL[0]==0)){
  733. BSP_LCD_GLASS_DisplayString((uint8_t *)" SOL");
  734. pulsSOL = 1;
  735. TIM2->CCER = 0x0001;
  736. if (octava == 4){
  737. tiempo = SOL; //Valor calculado en Tabla
  738. }else if(octava == 3){
  739. tiempo = SOLT;
  740. }
  741.  
  742. if(TIM2->CNT == 0){
  743. TIM2->CCR1 = tiempo;
  744. }
  745.  
  746. TIM2->CR1 |= 0x0001;
  747.  
  748. }else if((pulsadoSOL[2]==0)&(pulsadoSOL[1]==1)&(pulsadoSOL[0]==1)){
  749. BSP_LCD_GLASS_Clear();
  750. TIM2 -> CR1 &= ~0x0001;
  751. TIM2 -> CNT = 0;
  752. pulsSOL=0;
  753. }
  754.  
  755.  
  756.  
  757.  
  758. //##################### LA ############################################################
  759.  
  760. pulsadoLA[N-1] = pulsadoLA[N-2];
  761. pulsadoLA[N-2] = pulsadoLA[N-3];
  762. if(GPIOD->IDR &(1<<2)){
  763. pulsadoLA[N-3] = 1;
  764. }else{
  765. pulsadoLA[N-3] = 0;
  766. }
  767.  
  768. if((pulsadoLA[2]==1)& (pulsadoLA[1]==0) &(pulsadoLA[0]==0)){
  769. BSP_LCD_GLASS_DisplayString((uint8_t *)" LA");
  770. TIM2->CCER = 0x0001;
  771. if (octava == 4){
  772. tiempo = LA; //Valor calculado en Tabla
  773. }else if(octava == 3){
  774. tiempo = LAT;
  775. }
  776.  
  777. if(TIM2->CNT == 0){
  778. TIM2->CCR1 = tiempo;
  779. }
  780.  
  781. TIM2->CR1 |= 0x0001;
  782.  
  783. }else if((pulsadoLA[2]==0)&(pulsadoLA[1]==1)&(pulsadoLA[0]==1)){
  784. BSP_LCD_GLASS_Clear();
  785. TIM2 -> CR1 &= ~0x0001;
  786. TIM2 -> CNT = 0;
  787. }
  788.  
  789.  
  790.  
  791.  
  792. //##################### SI ############################################################
  793.  
  794. pulsadoSI[N-1] = pulsadoSI[N-2];
  795. pulsadoSI[N-2] = pulsadoSI[N-3];
  796. if(GPIOH->IDR &(1<<1)){
  797. pulsadoSI[N-3] = 1;
  798. }else{
  799. pulsadoSI[N-3] = 0;
  800. }
  801.  
  802. if((pulsadoSI[2]==1)& (pulsadoSI[1]==0) &(pulsadoSI[0]==0)){
  803. BSP_LCD_GLASS_DisplayString((uint8_t *)" SI");
  804. TIM2->CCER = 0x0001;
  805. if (octava == 4){
  806. tiempo = SI; //Valor calculado en Tabla
  807. }else if(octava == 3){
  808. tiempo = SIT;
  809. }
  810.  
  811. if(TIM2->CNT == 0){
  812. TIM2->CCR1 = tiempo;
  813. }
  814.  
  815. TIM2->CR1 |= 0x0001;
  816.  
  817. }else if((pulsadoSI[2]==0)&(pulsadoSI[1]==1)&(pulsadoSI[0]==1)){
  818. BSP_LCD_GLASS_Clear();
  819. TIM2 -> CR1 &= ~0x0001;
  820. TIM2 -> CNT = 0;
  821. }
  822.  
  823. espera(TIME);
  824.  
  825. break;
  826.  
  827.  
  828. } //switch case
  829. /* USER CODE END WHILE */
  830.  
  831. /* USER CODE BEGIN 3 */
  832. }
  833. /* USER CODE END 3 */
  834. }
  835.  
  836. /**
  837. * @brief System Clock Configuration
  838. * @retval None
  839. */
  840. void SystemClock_Config(void)
  841. {
  842. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  843. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  844. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  845.  
  846. /**Configure the main internal regulator output voltage
  847. */
  848. __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  849. /**Initializes the CPU, AHB and APB busses clocks
  850. */
  851. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  852. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  853. RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  854. RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  855. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  856. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  857. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
  858. RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
  859. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  860. {
  861. Error_Handler();
  862. }
  863. /**Initializes the CPU, AHB and APB busses clocks
  864. */
  865. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  866. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  867. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  868. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  869. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  870. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  871.  
  872. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  873. {
  874. Error_Handler();
  875. }
  876. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LCD;
  877. PeriphClkInit.LCDClockSelection = RCC_RTCCLKSOURCE_LSI;
  878.  
  879. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  880. {
  881. Error_Handler();
  882. }
  883. }
  884.  
  885. /**
  886. * @brief ADC Initialization Function
  887. * @param None
  888. * @retval None
  889. */
  890. static void MX_ADC_Init(void)
  891. {
  892.  
  893. /* USER CODE BEGIN ADC_Init 0 */
  894.  
  895. /* USER CODE END ADC_Init 0 */
  896.  
  897. ADC_ChannelConfTypeDef sConfig = {0};
  898.  
  899. /* USER CODE BEGIN ADC_Init 1 */
  900.  
  901. /* USER CODE END ADC_Init 1 */
  902. /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  903. */
  904. hadc.Instance = ADC1;
  905. hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
  906. hadc.Init.Resolution = ADC_RESOLUTION_12B;
  907. hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  908. hadc.Init.ScanConvMode = ADC_SCAN_DISABLE;
  909. hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;
  910. hadc.Init.LowPowerAutoWait = ADC_AUTOWAIT_DISABLE;
  911. hadc.Init.LowPowerAutoPowerOff = ADC_AUTOPOWEROFF_DISABLE;
  912. hadc.Init.ChannelsBank = ADC_CHANNELS_BANK_A;
  913. hadc.Init.ContinuousConvMode = DISABLE;
  914. hadc.Init.NbrOfConversion = 1;
  915. hadc.Init.DiscontinuousConvMode = DISABLE;
  916. hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  917. hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  918. hadc.Init.DMAContinuousRequests = DISABLE;
  919. if (HAL_ADC_Init(&hadc) != HAL_OK)
  920. {
  921. Error_Handler();
  922. }
  923. /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time.
  924. */
  925. sConfig.Channel = ADC_CHANNEL_4;
  926. sConfig.Rank = ADC_REGULAR_RANK_1;
  927. sConfig.SamplingTime = ADC_SAMPLETIME_4CYCLES;
  928. if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK)
  929. {
  930. Error_Handler();
  931. }
  932. /* USER CODE BEGIN ADC_Init 2 */
  933.  
  934. /* USER CODE END ADC_Init 2 */
  935.  
  936. }
  937.  
  938. /**
  939. * @brief DAC Initialization Function
  940. * @param None
  941. * @retval None
  942. */
  943. static void MX_DAC_Init(void)
  944. {
  945.  
  946. /* USER CODE BEGIN DAC_Init 0 */
  947.  
  948. /* USER CODE END DAC_Init 0 */
  949.  
  950. DAC_ChannelConfTypeDef sConfig = {0};
  951.  
  952. /* USER CODE BEGIN DAC_Init 1 */
  953.  
  954. /* USER CODE END DAC_Init 1 */
  955. /**DAC Initialization
  956. */
  957. hdac.Instance = DAC;
  958. if (HAL_DAC_Init(&hdac) != HAL_OK)
  959. {
  960. Error_Handler();
  961. }
  962. /**DAC channel OUT1 config
  963. */
  964. sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
  965. sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
  966. if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
  967. {
  968. Error_Handler();
  969. }
  970. /* USER CODE BEGIN DAC_Init 2 */
  971.  
  972. /* USER CODE END DAC_Init 2 */
  973.  
  974. }
  975.  
  976. /**
  977. * @brief LCD Initialization Function
  978. * @param None
  979. * @retval None
  980. */
  981. static void MX_LCD_Init(void)
  982. {
  983.  
  984. /* USER CODE BEGIN LCD_Init 0 */
  985.  
  986. /* USER CODE END LCD_Init 0 */
  987.  
  988. /* USER CODE BEGIN LCD_Init 1 */
  989.  
  990. /* USER CODE END LCD_Init 1 */
  991. hlcd.Instance = LCD;
  992. hlcd.Init.Prescaler = LCD_PRESCALER_1;
  993. hlcd.Init.Divider = LCD_DIVIDER_31;
  994. hlcd.Init.Duty = LCD_DUTY_1_4;
  995. hlcd.Init.Bias = LCD_BIAS_1_4;
  996. hlcd.Init.VoltageSource = LCD_VOLTAGESOURCE_INTERNAL;
  997. hlcd.Init.Contrast = LCD_CONTRASTLEVEL_0;
  998. hlcd.Init.DeadTime = LCD_DEADTIME_0;
  999. hlcd.Init.PulseOnDuration = LCD_PULSEONDURATION_4;
  1000. hlcd.Init.MuxSegment = LCD_MUXSEGMENT_DISABLE;
  1001. hlcd.Init.BlinkMode = LCD_BLINKMODE_OFF;
  1002. hlcd.Init.BlinkFrequency = LCD_BLINKFREQUENCY_DIV32;
  1003. if (HAL_LCD_Init(&hlcd) != HAL_OK)
  1004. {
  1005. Error_Handler();
  1006. }
  1007. /* USER CODE BEGIN LCD_Init 2 */
  1008.  
  1009. /* USER CODE END LCD_Init 2 */
  1010.  
  1011. }
  1012.  
  1013. /**
  1014. * @brief TIM2 Initialization Function
  1015. * @param None
  1016. * @retval None
  1017. */
  1018. static void MX_TIM2_Init(void)
  1019. {
  1020.  
  1021. /* USER CODE BEGIN TIM2_Init 0 */
  1022.  
  1023. /* USER CODE END TIM2_Init 0 */
  1024.  
  1025. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  1026. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1027.  
  1028. /* USER CODE BEGIN TIM2_Init 1 */
  1029.  
  1030. /* USER CODE END TIM2_Init 1 */
  1031. htim2.Instance = TIM2;
  1032. htim2.Init.Prescaler = 0;
  1033. htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  1034. htim2.Init.Period = 0;
  1035. htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  1036. if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  1037. {
  1038. Error_Handler();
  1039. }
  1040. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  1041. if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  1042. {
  1043. Error_Handler();
  1044. }
  1045. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  1046. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  1047. if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  1048. {
  1049. Error_Handler();
  1050. }
  1051. /* USER CODE BEGIN TIM2_Init 2 */
  1052.  
  1053. /* USER CODE END TIM2_Init 2 */
  1054.  
  1055. }
  1056.  
  1057. /**
  1058. * @brief TIM4 Initialization Function
  1059. * @param None
  1060. * @retval None
  1061. */
  1062. static void MX_TIM4_Init(void)
  1063. {
  1064.  
  1065. /* USER CODE BEGIN TIM4_Init 0 */
  1066.  
  1067. /* USER CODE END TIM4_Init 0 */
  1068.  
  1069. TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  1070. TIM_MasterConfigTypeDef sMasterConfig = {0};
  1071.  
  1072. /* USER CODE BEGIN TIM4_Init 1 */
  1073.  
  1074. /* USER CODE END TIM4_Init 1 */
  1075. htim4.Instance = TIM4;
  1076. htim4.Init.Prescaler = 0;
  1077. htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  1078. htim4.Init.Period = 0;
  1079. htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  1080. if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  1081. {
  1082. Error_Handler();
  1083. }
  1084. sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  1085. if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  1086. {
  1087. Error_Handler();
  1088. }
  1089. sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  1090. sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  1091. if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  1092. {
  1093. Error_Handler();
  1094. }
  1095. /* USER CODE BEGIN TIM4_Init 2 */
  1096.  
  1097. /* USER CODE END TIM4_Init 2 */
  1098.  
  1099. }
  1100.  
  1101. /**
  1102. * @brief TS Initialization Function
  1103. * @param None
  1104. * @retval None
  1105. */
  1106. static void MX_TS_Init(void)
  1107. {
  1108.  
  1109. /* USER CODE BEGIN TS_Init 0 */
  1110.  
  1111. /* USER CODE END TS_Init 0 */
  1112.  
  1113. /* USER CODE BEGIN TS_Init 1 */
  1114.  
  1115. /* USER CODE END TS_Init 1 */
  1116. /* USER CODE BEGIN TS_Init 2 */
  1117.  
  1118. /* USER CODE END TS_Init 2 */
  1119.  
  1120. }
  1121.  
  1122. /**
  1123. * @brief USART1 Initialization Function
  1124. * @param None
  1125. * @retval None
  1126. */
  1127. static void MX_USART1_UART_Init(void)
  1128. {
  1129.  
  1130. /* USER CODE BEGIN USART1_Init 0 */
  1131.  
  1132. /* USER CODE END USART1_Init 0 */
  1133.  
  1134. /* USER CODE BEGIN USART1_Init 1 */
  1135.  
  1136. /* USER CODE END USART1_Init 1 */
  1137. huart1.Instance = USART1;
  1138. huart1.Init.BaudRate = 9600;
  1139. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  1140. huart1.Init.StopBits = UART_STOPBITS_1;
  1141. huart1.Init.Parity = UART_PARITY_NONE;
  1142. huart1.Init.Mode = UART_MODE_TX_RX;
  1143. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  1144. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  1145. if (HAL_UART_Init(&huart1) != HAL_OK)
  1146. {
  1147. Error_Handler();
  1148. }
  1149. /* USER CODE BEGIN USART1_Init 2 */
  1150.  
  1151. /* USER CODE END USART1_Init 2 */
  1152.  
  1153. }
  1154.  
  1155. /**
  1156. * @brief GPIO Initialization Function
  1157. * @param None
  1158. * @retval None
  1159. */
  1160. static void MX_GPIO_Init(void)
  1161. {
  1162. GPIO_InitTypeDef GPIO_InitStruct = {0};
  1163.  
  1164. /* GPIO Ports Clock Enable */
  1165. __HAL_RCC_GPIOC_CLK_ENABLE();
  1166. __HAL_RCC_GPIOH_CLK_ENABLE();
  1167. __HAL_RCC_GPIOA_CLK_ENABLE();
  1168. __HAL_RCC_GPIOB_CLK_ENABLE();
  1169. __HAL_RCC_GPIOD_CLK_ENABLE();
  1170.  
  1171. /*Configure GPIO pins : SOL_Pin FA_Pin */
  1172. GPIO_InitStruct.Pin = SOL_Pin|FA_Pin;
  1173. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1174. GPIO_InitStruct.Pull = GPIO_PULLUP;
  1175. HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  1176.  
  1177. /*Configure GPIO pin : SI_Pin */
  1178. GPIO_InitStruct.Pin = SI_Pin;
  1179. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1180. GPIO_InitStruct.Pull = GPIO_PULLUP;
  1181. HAL_GPIO_Init(SI_GPIO_Port, &GPIO_InitStruct);
  1182.  
  1183. /*Configure GPIO pin : PH1 */
  1184. GPIO_InitStruct.Pin = GPIO_PIN_1;
  1185. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1186. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1187. HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
  1188.  
  1189. /*Configure GPIO pin : B1_Pin */
  1190. GPIO_InitStruct.Pin = B1_Pin;
  1191. GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  1192. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1193. HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  1194.  
  1195. /*Configure GPIO pin : MI_Pin */
  1196. GPIO_InitStruct.Pin = MI_Pin;
  1197. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1198. GPIO_InitStruct.Pull = GPIO_PULLUP;
  1199. HAL_GPIO_Init(MI_GPIO_Port, &GPIO_InitStruct);
  1200.  
  1201. /*Configure GPIO pins : DO_Pin RE_Pin */
  1202. GPIO_InitStruct.Pin = DO_Pin|RE_Pin;
  1203. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1204. GPIO_InitStruct.Pull = GPIO_PULLUP;
  1205. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  1206.  
  1207. /*Configure GPIO pin : PD2 */
  1208. GPIO_InitStruct.Pin = GPIO_PIN_2;
  1209. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  1210. GPIO_InitStruct.Pull = GPIO_NOPULL;
  1211. HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
  1212.  
  1213. }
  1214.  
  1215. /* USER CODE BEGIN 4 */
  1216.  
  1217. /* USER CODE END 4 */
  1218.  
  1219. /**
  1220. * @brief This function is executed in case of error occurrence.
  1221. * @retval None
  1222. */
  1223. void Error_Handler(void)
  1224. {
  1225. /* USER CODE BEGIN Error_Handler_Debug */
  1226. /* User can add his own implementation to report the HAL error return state */
  1227.  
  1228. /* USER CODE END Error_Handler_Debug */
  1229. }
  1230.  
  1231. #ifdef USE_FULL_ASSERT
  1232. /**
  1233. * @brief Reports the name of the source file and the source line number
  1234. * where the assert_param error has occurred.
  1235. * @param file: pointer to the source file name
  1236. * @param line: assert_param error line source number
  1237. * @retval None
  1238. */
  1239. void assert_failed(uint8_t *file, uint32_t line)
  1240. {
  1241. /* USER CODE BEGIN 6 */
  1242. /* User can add his own implementation to report the file name and line number,
  1243. tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  1244. /* USER CODE END 6 */
  1245. }
  1246. #endif /* USE_FULL_ASSERT */
  1247.  
  1248. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement