Advertisement
Guest User

Untitled

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