Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.53 KB | None | 0 0
  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   * @file           : main.c
  5.   * @brief          : Main program body
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */
  19. /* USER CODE END Header */
  20.  
  21. /* Includes ------------------------------------------------------------------*/
  22. #include "main.h"
  23.  
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. #include <stdint.h>
  27. #include <stdio.h>
  28. #include <string.h>
  29. #include <stdarg.h>
  30. /* USER CODE END Includes */
  31.  
  32. /* Private typedef -----------------------------------------------------------*/
  33. /* USER CODE BEGIN PTD */
  34.  
  35. /* USER CODE END PTD */
  36.  
  37. /* Private define ------------------------------------------------------------*/
  38. /* USER CODE BEGIN PD */
  39. /* USER CODE END PD */
  40.  
  41. /* Private macro -------------------------------------------------------------*/
  42. /* USER CODE BEGIN PM */
  43.  
  44. /* USER CODE END PM */
  45.  
  46. /* Private variables ---------------------------------------------------------*/
  47. IWDG_HandleTypeDef hiwdg;
  48.  
  49. TIM_HandleTypeDef htim1;
  50.  
  51. UART_HandleTypeDef huart2;
  52.  
  53. /* USER CODE BEGIN PV */
  54. uint8_t percent = 100;
  55. uint8_t step = 1;
  56. uint8_t volatile RX_Buf[128], RX_Empty = 0, RX_Busy = 0; //bufor do odbierania, wskaźniki empty i busy dla bufora odbierającego
  57. uint8_t volatile TX_Buf[128], TX_Empty = 0, TX_Busy = 0; //bufor do wysyłania, wskaźniki empty i busy dla bufora wysyłającego
  58. int bufSize = 128, comSize = 64, i = 0, j = 0; //rozmiar buforów, rozmiar tablicy pomocniczej, zmienne pomocnicze do przechodzenia po tablicach
  59. int ledTimeOn = 0, ledTimeOff = 0, ledBlinkCount = 0, time, timer; //zmienne przechowujące czas włączenia diody, wyłączenia diody, ilość mrugnięć i zmienne przechowujące czas, który upłynął od początku zwracany przez HAL_GetTick(), odpowiedzialne za opóźnienia
  60. uint8_t COM[64];
  61. uint8_t pulseMode=0;
  62. /* USER CODE END PV */
  63.  
  64. /* Private function prototypes -----------------------------------------------*/
  65. void SystemClock_Config(void);
  66. static void MX_GPIO_Init(void);
  67. static void MX_TIM1_Init(void);
  68. static void MX_USART2_UART_Init(void);
  69. static void MX_IWDG_Init(void);
  70. /* USER CODE BEGIN PFP */
  71.  
  72.  
  73. void IWDG_Refresh(void){
  74.     if(HAL_IWDG_Refresh(&hiwdg) != HAL_OK)
  75.     {
  76.         //Error_SetMessage("WATCHDOG CANT REFRESH\r\n");
  77.         Error_Handler();
  78.     }
  79. }
  80.  
  81. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ //funkcja obsługująca przerwanie po odebraniu znaków przez HAL_UART_Receive_IT
  82.     if(huart->Instance==USART2){ //sprawdzenie czy przerwanie wywołał USART2
  83.         RX_Empty++; //przesunięcie wskaźnika empty o jeden po odebraniu bajta
  84.         if(RX_Empty>=bufSize) RX_Empty = 0; //jeżeli wskaźnik empty wychodzi poza rozmiar bufora przesunięcie go na początek
  85.         HAL_UART_Receive_IT(&huart2,&RX_Buf[RX_Empty],1); //odebranie kolejnego bajta znaków i wpisanie go do bufora od pustego miejsca
  86.     }
  87. }
  88. void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){ //funkcja obsługująca przerwanie po wysłaniu znaków przez HAL_UART_Transmit_IT
  89.     if(huart->Instance==USART2){ //sprawdzenie czy przerwanie wywołał USART2
  90.         if(TX_Busy!=TX_Empty){ //sprawdzenie czy w buforze nadal coś się znajduje
  91.             TX_Busy++; //jeżeli tak to przechodzimy do następnego bajta - przesuwamy wskaźnik busy dalej
  92.             if(TX_Busy>=bufSize) TX_Empty=0; //jeżeli wskaźnik busy wychodzi poza rozmiar bufora przesunięcie go na początek
  93.             HAL_UART_Transmit_IT(&huart2,&TX_Buf[TX_Busy],1); //wysłanie kolejnego bajta od pierwszego zajętego miejsca w buforze
  94.         }
  95.     }
  96. }
  97.  
  98. /*-------------OBSŁUGA WYSYŁANIA-------------*/
  99. void USART2_fsend(char* format, ...)
  100. {
  101.     char tmp_rs[128];
  102.     int i;
  103.     __IO int idx;
  104.  
  105.     va_list arglist;
  106.     va_start(arglist,format);
  107.     vsprintf(tmp_rs,format,arglist);
  108.     va_end(arglist);
  109.  
  110.     idx=TX_Empty;
  111.  
  112.     for(i=0;i<strlen(tmp_rs);i++)
  113.     {
  114.         TX_Buf[idx]=tmp_rs[i];
  115.         idx++;
  116.         if(idx >= bufSize)idx=0;
  117.     }
  118.     __disable_irq();
  119.  
  120.     if((TX_Empty==TX_Busy)&&(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_TXE)==SET))
  121.     {
  122.         TX_Empty=idx;
  123.         uint8_t tmp=TX_Buf[TX_Busy];
  124.         TX_Busy++;
  125.         if(TX_Busy >= bufSize) TX_Busy=0;
  126.         HAL_UART_Transmit_IT(&huart2, &tmp, 1);
  127.     }
  128.     else
  129.     {
  130.         TX_Empty=idx;
  131.     }
  132.     __enable_irq();
  133. }//fsend
  134.  
  135. void parse() {
  136.     if (RX_Busy != RX_Empty) { //jeżeli coś znajduje się w buforze odbierającym
  137.         if(RX_Buf[RX_Busy] != ';') { //jeżeli element nie jest średnikiem
  138.             COM[j] = RX_Buf[RX_Busy]; //wpisanie danej z bufora do tablicy przechowującej komendy
  139.             j++; //przejście do kolejnego elementu w tablicy komend
  140.             if (j >= bufSize) j = 0; //jeżeli wskaźnik na element w tablicy komend wychodzi poza jej rozmiar przesunięcie go na początek
  141.         } else {
  142.             COM[j] = '\0'; //dodanie 0 na końcu w celu umożliwienia interpretacji jako łańcuch
  143.             j = 0; //wyzerowanie wskaźnika w tablicy komend
  144.             pulseMode = 0;
  145.             ledBlinkCount = 0;
  146.             if(strcmp(COM, "LED[ON]") == 0) { //sprawdzanie czy elementy w tablicy komend są zgodne z poszczególnymi wzorcami - włączanie, wyłączanie i mruganie diodą
  147.                 HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET); //ustawienie pinu diody
  148.             } else if(strcmp(COM, "LED[OFF]") == 0) {
  149.                 HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET); //resetowanie pinu diody
  150.             } else if((sscanf(COM, "LED[BLINK,%d,%d,%d]", &ledTimeOn, &ledTimeOff, &ledBlinkCount)) == 3) { //sprawdzanie czy komenda BLINK zawiera kolejno trzy parametry i przypisanie ich do zmiennych
  151.                 time = HAL_GetTick(); //pobranie wartości ticków w milisekundach
  152.             } else if(strcmp(COM, "LED[PULSE]") == 0){
  153.                 pulseMode=1;
  154.             } else{
  155.                 USART2_fsend("ERR\n\r"); //zwrócenie błędu jeżeli żadna z powyższych komend nie została dopasowana
  156.             }
  157.         }
  158.  
  159.         RX_Busy++; //zwiększenie wskaźnika busy (przejście na następny element do odczytu)
  160.         if(RX_Busy >= bufSize) RX_Busy = 0;//jeżeli wskaźnik wykracza poza rozmiar bufora przesunięcie go na początek
  161.     }
  162. }
  163.  
  164. void blinker(void){
  165.     if(ledBlinkCount > 0) { //jeżeli wykryto komendę mrugania
  166.         timer = HAL_GetTick() - time; //ustawienie timera
  167.  
  168.         if(timer <= ledTimeOn) { //ustawianie diody dopóki czas nie osiągnie wartości przekazanej w parametrze komendy
  169.             HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_SET);
  170.         } else if(timer <= (ledTimeOn + ledTimeOff)) { //resetowanie diody dopóki czas nie osiągnie sum wartości włączenia i wyłączenia diody przekazanej w parametrze komendy
  171.             HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  172.         }
  173.  
  174.         if(timer > (ledTimeOn + ledTimeOff)) { //po zapaleniu i zgaszeniu diody pobiera nowy czas i zmniejsza licznik mrugnięć
  175.             time = HAL_GetTick();
  176.             ledBlinkCount--;
  177.         }
  178.     }
  179. }
  180.  
  181. void pin8Topin5(void){
  182.     if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)){
  183.               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, SET);
  184.           }else{
  185.               HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, RESET);
  186.           }
  187. }
  188.  
  189. void pulse(TIM_OC_InitTypeDef oc){
  190.     if((HAL_GetTick()-xD)>30){
  191.  
  192.               oc.Pulse = percent;
  193.               HAL_TIM_PWM_ConfigChannel(&htim1, &oc, TIM_CHANNEL_1);
  194.               if( ( ( percent + step ) < 0 ) || ( ( percent + step ) > 100 ) )
  195.               {
  196.                   step = -step;
  197.               }
  198.               percent += step;
  199.  
  200.               xD = HAL_GetTick();
  201.           }
  202. }
  203.  
  204.  
  205. /* USER CODE END PFP */
  206.  
  207. /* Private user code ---------------------------------------------------------*/
  208. /* USER CODE BEGIN 0 */
  209.  
  210. /* USER CODE END 0 */
  211.  
  212. /**
  213.   * @brief  The application entry point.
  214.   * @retval int
  215.   */
  216. int main(void)
  217. {
  218.   /* USER CODE BEGIN 1 */
  219. if(__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST) != RESET)
  220. {
  221.     USART2_fsend("Watchdog");
  222. }
  223.   /* USER CODE END 1 */
  224.  
  225.  
  226.   /* MCU Configuration--------------------------------------------------------*/
  227.  
  228.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  229.   HAL_Init();
  230.  
  231.   /* USER CODE BEGIN Init */
  232.  
  233.   /* USER CODE END Init */
  234.  
  235.   /* Configure the system clock */
  236.   SystemClock_Config();
  237.  
  238.   /* USER CODE BEGIN SysInit */
  239.  
  240.   /* USER CODE END SysInit */
  241.  
  242.   /* Initialize all configured peripherals */
  243.   MX_GPIO_Init();
  244.   MX_TIM1_Init();
  245.   MX_USART2_UART_Init();
  246.   MX_IWDG_Init();
  247.   /* USER CODE BEGIN 2 */
  248.   USART2_fsend("Hello, I am STM32 !!!\n\r"); //wysłanie wstępnej wiadomości
  249.   HAL_UART_Receive_IT(&huart2, &RX_Buf[RX_Empty], 1); //pierwsze uruchomienie funkcji do nasłuchiwania na USART z wykorzystaniem przerwań
  250.   timer = HAL_GetTick(); //pobranie wartości ticków w milisekundach
  251.   HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  252.   xD=HAL_GetTick();
  253.   TIM_OC_InitTypeDef oc;
  254.   oc.OCMode = TIM_OCMODE_PWM1;
  255.   oc.OCPolarity = TIM_OCPOLARITY_HIGH;
  256.   oc.OCFastMode = TIM_OCFAST_DISABLE;
  257.   /* USER CODE END 2 */
  258.  
  259.   /* Infinite loop */
  260.   /* USER CODE BEGIN WHILE */
  261.   while (1)
  262.   {
  263.     /* USER CODE END WHILE */
  264.  
  265.     /* USER CODE BEGIN 3 */
  266.  
  267.       IWDG_Refresh();
  268.       pin8Topin5();
  269.       parse(oc);
  270.       blinker();
  271.  
  272.       if(pulseMode==1){
  273.  
  274.       if((HAL_GetTick()-timer)>30){
  275.  
  276.           oc.Pulse = percent;
  277.           HAL_TIM_PWM_ConfigChannel(&htim1, &oc, TIM_CHANNEL_1);
  278.           if( ( ( percent + step ) < 0 ) || ( ( percent + step ) > 100 ) )
  279.           {
  280.               step = -step;
  281.           }
  282.           percent += step;
  283.  
  284.           timer = HAL_GetTick();
  285.       }
  286.       }
  287.  
  288.   }
  289.   /* USER CODE END 3 */
  290. }
  291.  
  292. /**
  293.   * @brief System Clock Configuration
  294.   * @retval None
  295.   */
  296. void SystemClock_Config(void)
  297. {
  298.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  299.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  300.  
  301.   /** Initializes the CPU, AHB and APB busses clocks
  302.   */
  303.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI;
  304.   RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  305.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  306.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  307.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  308.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  309.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  310.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  311.   {
  312.     Error_Handler();
  313.   }
  314.   /** Initializes the CPU, AHB and APB busses clocks
  315.   */
  316.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  317.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  318.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  319.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  320.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  321.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  322.  
  323.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  324.   {
  325.     Error_Handler();
  326.   }
  327. }
  328.  
  329. /**
  330.   * @brief IWDG Initialization Function
  331.   * @param None
  332.   * @retval None
  333.   */
  334. static void MX_IWDG_Init(void)
  335. {
  336.  
  337.   /* USER CODE BEGIN IWDG_Init 0 */
  338.  
  339.   /* USER CODE END IWDG_Init 0 */
  340.  
  341.   /* USER CODE BEGIN IWDG_Init 1 */
  342.  
  343.   /* USER CODE END IWDG_Init 1 */
  344.   hiwdg.Instance = IWDG;
  345.   hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
  346.   hiwdg.Init.Reload = 4095;
  347.   if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  348.   {
  349.     USART2_fsend("Blad inicjacji watchdoga)");
  350.     Error_Handler();
  351.   }
  352.   /* USER CODE BEGIN IWDG_Init 2 */
  353.  
  354.   /* USER CODE END IWDG_Init 2 */
  355.  
  356. }
  357.  
  358. /**
  359.   * @brief TIM1 Initialization Function
  360.   * @param None
  361.   * @retval None
  362.   */
  363. static void MX_TIM1_Init(void)
  364. {
  365.  
  366.   /* USER CODE BEGIN TIM1_Init 0 */
  367.  
  368.   /* USER CODE END TIM1_Init 0 */
  369.  
  370.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  371.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  372.   TIM_OC_InitTypeDef oc;
  373.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
  374.  
  375.   /* USER CODE BEGIN TIM1_Init 1 */
  376.  
  377.   /* USER CODE END TIM1_Init 1 */
  378.   htim1.Instance = TIM1;
  379.   htim1.Init.Prescaler = 0;
  380.   htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
  381.   htim1.Init.Period = 100;
  382.   htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  383.   htim1.Init.RepetitionCounter = 0;
  384.   htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  385.   if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  386.   {
  387.     Error_Handler();
  388.   }
  389.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  390.   if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
  391.   {
  392.     Error_Handler();
  393.   }
  394.   if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
  395.   {
  396.     Error_Handler();
  397.   }
  398.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  399.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  400.   if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK)
  401.   {
  402.     Error_Handler();
  403.   }
  404.   oc.OCMode = TIM_OCMODE_PWM1;
  405.   oc.Pulse = 10;
  406.   oc.OCPolarity = TIM_OCPOLARITY_HIGH;
  407.   oc.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  408.   oc.OCFastMode = TIM_OCFAST_DISABLE;
  409.   oc.OCIdleState = TIM_OCIDLESTATE_RESET;
  410.   oc.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  411.  
  412.   if (HAL_TIM_PWM_ConfigChannel(&htim1, &oc, TIM_CHANNEL_1) != HAL_OK)
  413.   {
  414.     Error_Handler();
  415.   }
  416.   if (HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1) != HAL_OK)
  417.   {
  418.       Error_Handler();
  419.   }
  420.   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  421.   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  422.   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  423.   sBreakDeadTimeConfig.DeadTime = 0;
  424.   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  425.   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  426.   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  427.   if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK)
  428.   {
  429.     Error_Handler();
  430.   }
  431.   /* USER CODE BEGIN TIM1_Init 2 */
  432.  
  433.   /* USER CODE END TIM1_Init 2 */
  434.   HAL_TIM_MspPostInit(&htim1);
  435.  
  436. }
  437.  
  438. /**
  439.   * @brief USART2 Initialization Function
  440.   * @param None
  441.   * @retval None
  442.   */
  443. static void MX_USART2_UART_Init(void)
  444. {
  445.  
  446.   /* USER CODE BEGIN USART2_Init 0 */
  447.  
  448.   /* USER CODE END USART2_Init 0 */
  449.  
  450.   /* USER CODE BEGIN USART2_Init 1 */
  451.  
  452.   /* USER CODE END USART2_Init 1 */
  453.   huart2.Instance = USART2;
  454.   huart2.Init.BaudRate = 115200;
  455.   huart2.Init.WordLength = UART_WORDLENGTH_8B;
  456.   huart2.Init.StopBits = UART_STOPBITS_1;
  457.   huart2.Init.Parity = UART_PARITY_NONE;
  458.   huart2.Init.Mode = UART_MODE_TX_RX;
  459.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  460.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  461.   if (HAL_UART_Init(&huart2) != HAL_OK)
  462.   {
  463.     Error_Handler();
  464.   }
  465.   /* USER CODE BEGIN USART2_Init 2 */
  466.  
  467.   /* USER CODE END USART2_Init 2 */
  468.  
  469. }
  470.  
  471. /**
  472.   * @brief GPIO Initialization Function
  473.   * @param None
  474.   * @retval None
  475.   */
  476. static void MX_GPIO_Init(void)
  477. {
  478.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  479.  
  480.   /* GPIO Ports Clock Enable */
  481.   __HAL_RCC_GPIOC_CLK_ENABLE();
  482.   __HAL_RCC_GPIOD_CLK_ENABLE();
  483.   __HAL_RCC_GPIOA_CLK_ENABLE();
  484.   __HAL_RCC_GPIOB_CLK_ENABLE();
  485.  
  486.   /*Configure GPIO pin Output Level */
  487.   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  488.  
  489.   /*Configure GPIO pin : B1_Pin */
  490.   GPIO_InitStruct.Pin = B1_Pin;
  491.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  492.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  493.   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
  494.  
  495.   /*Configure GPIO pin : LD2_Pin */
  496.   GPIO_InitStruct.Pin = LD2_Pin;
  497.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  498.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  499.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  500.   HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
  501.  
  502.   /* EXTI interrupt init*/
  503.   HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  504.   HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  505.  
  506. }
  507.  
  508. /* USER CODE BEGIN 4 */
  509.  
  510. /* USER CODE END 4 */
  511.  
  512. /**
  513.   * @brief  This function is executed in case of error occurrence.
  514.   * @retval None
  515.   */
  516. void Error_Handler(void)
  517. {
  518.   /* USER CODE BEGIN Error_Handler_Debug */
  519.   /* User can add his own implementation to report the HAL error return state */
  520.  
  521.   /* USER CODE END Error_Handler_Debug */
  522. }
  523.  
  524. #ifdef  USE_FULL_ASSERT
  525. /**
  526.   * @brief  Reports the name of the source file and the source line number
  527.   *         where the assert_param error has occurred.
  528.   * @param  file: pointer to the source file name
  529.   * @param  line: assert_param error line source number
  530.   * @retval None
  531.   */
  532. void assert_failed(uint8_t *file, uint32_t line)
  533. {
  534.   /* USER CODE BEGIN 6 */
  535.   /* User can add his own implementation to report the file name and line number,
  536.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  537.   /* USER CODE END 6 */
  538. }
  539. #endif /* USE_FULL_ASSERT */
  540.  
  541. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement