Guest User

MyCode

a guest
Mar 22nd, 2024
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 19.61 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.  * Copyright (c) 2024 STMicroelectronics.
  10.  * All rights reserved.
  11.  *
  12.  * This software is licensed under terms that can be found in the LICENSE file
  13.  * in the root directory of this software component.
  14.  * If no LICENSE file comes with this software, it is provided AS-IS.
  15.  *
  16.  ******************************************************************************
  17.  */
  18. /* USER CODE END Header */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "main.h"
  21.  
  22. /* Private includes ----------------------------------------------------------*/
  23. /* USER CODE BEGIN Includes */
  24. #include "stdio.h"
  25. #include "stdlib.h"
  26. #include "math.h"
  27. #include "string.h"
  28.  
  29. /* USER CODE END Includes */
  30.  
  31. /* Private typedef -----------------------------------------------------------*/
  32. /* USER CODE BEGIN PTD */
  33.  
  34. /* USER CODE END PTD */
  35.  
  36. /* Private define ------------------------------------------------------------*/
  37. /* USER CODE BEGIN PD */
  38. #define MAX_BUFFER_SIZE 64
  39. #define MAX_COMMAND_PARSED 10
  40.  
  41. /* USER CODE END PD */
  42.  
  43. /* Private macro -------------------------------------------------------------*/
  44. /* USER CODE BEGIN PM */
  45.  
  46. /* USER CODE END PM */
  47.  
  48. /* Private variables ---------------------------------------------------------*/
  49. ADC_HandleTypeDef hadc3;
  50.  
  51. TIM_HandleTypeDef htim16;
  52. TIM_HandleTypeDef htim17;
  53.  
  54. UART_HandleTypeDef huart3;
  55. DMA_HandleTypeDef hdma_usart3_rx;
  56. DMA_HandleTypeDef hdma_usart3_tx;
  57.  
  58. /* USER CODE BEGIN PV */
  59. uint8_t CMD_LINE[MAX_BUFFER_SIZE];
  60. uint8_t Flag_Enable_Parse_And_Receive = 0;
  61. char *CMD_PARSED[MAX_COMMAND_PARSED];
  62.  
  63. /* USER CODE END PV */
  64.  
  65. /* Private function prototypes -----------------------------------------------*/
  66. void SystemClock_Config(void);
  67. static void MX_GPIO_Init(void);
  68. static void MX_DMA_Init(void);
  69. static void MX_ADC3_Init(void);
  70. static void MX_TIM16_Init(void);
  71. static void MX_USART3_UART_Init(void);
  72. static void MX_TIM17_Init(void);
  73. /* USER CODE BEGIN PFP */
  74.  
  75. /* USER CODE END PFP */
  76.  
  77. /* Private user code ---------------------------------------------------------*/
  78. /* USER CODE BEGIN 0 */
  79. typedef struct {
  80.     uint8_t mode;
  81.     uint8_t enable;
  82.     uint8_t period;
  83.     uint8_t continuous_refresh;
  84.     uint8_t read_pos_vel;
  85.     uint8_t samples;
  86. } Command_line;
  87. typedef enum {
  88.     STATE_RESET,
  89.     STATE_CONFIG,
  90.     STATE_MANUALCTR,
  91.     STATE_OPENLOOP,
  92.     STATE_AUTOMATIC,
  93.     STATE_ERROR
  94. } Table_State;
  95. typedef struct {
  96.     Table_State State;
  97.     uint8_t mode;
  98. } Search_engine;
  99.  
  100. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
  101.     if (huart == &huart3) {
  102.         Flag_Enable_Parse_And_Receive = 1;
  103.     }
  104. }
  105. void error() {
  106.  
  107. }
  108. void config() {
  109.  
  110. }
  111. void initialize_modes(Search_engine Modes[5][5]) {
  112.     for (uint8_t i = 0; i < 4; i++) {
  113.         for (uint8_t j = 0; j < 4; j++) {
  114.             Modes[i][j].State = STATE_ERROR;
  115.             Modes[i][j].mode = j;
  116.         }
  117.     }
  118.     Modes[STATE_RESET][0].State = STATE_RESET;
  119.     Modes[STATE_RESET][1].State = STATE_CONFIG;
  120.     Modes[STATE_CONFIG][0].State = STATE_RESET;
  121.     Modes[STATE_CONFIG][1].State = STATE_CONFIG;
  122.     Modes[STATE_CONFIG][2].State = STATE_MANUALCTR;
  123.     Modes[STATE_CONFIG][3].State = STATE_OPENLOOP;
  124.     Modes[STATE_CONFIG][4].State = STATE_AUTOMATIC;
  125.     Modes[STATE_MANUALCTR][1].State = STATE_CONFIG;
  126.     Modes[STATE_MANUALCTR][2].State = STATE_MANUALCTR;
  127.     Modes[STATE_MANUALCTR][3].State = STATE_OPENLOOP;
  128.     Modes[STATE_OPENLOOP][1].State = STATE_CONFIG;
  129.     Modes[STATE_OPENLOOP][2].State = STATE_MANUALCTR;
  130.     Modes[STATE_OPENLOOP][3].State = STATE_OPENLOOP;
  131.     Modes[STATE_AUTOMATIC][1].State = STATE_CONFIG;
  132.     Modes[STATE_AUTOMATIC][4].State = STATE_AUTOMATIC;
  133.  
  134. }
  135. void state_configuration(Table_State Current_State, Command_line *User_Inputs) {
  136.     switch (Current_State) {
  137.     case STATE_RESET:
  138.         User_Inputs->enable = 0;
  139.         User_Inputs->period = 1;
  140.         User_Inputs->continuous_refresh = 0;
  141.         User_Inputs->read_pos_vel = 0;
  142.         User_Inputs->samples = 0;
  143.         break;
  144.     case STATE_CONFIG:
  145.         config();
  146.         break;
  147.     case STATE_MANUALCTR:
  148.         break;
  149.     case STATE_OPENLOOP:
  150.         break;
  151.     case STATE_AUTOMATIC:
  152.         break;
  153.     case STATE_ERROR:
  154.         break;
  155.     }
  156.  
  157. }
  158. Table_State get_state(Search_engine Modes[5][5], Command_line *User_Inputs,
  159.         Table_State Current_State) {
  160.     uint8_t mode = 0;
  161.  
  162.     mode = User_Inputs->mode;
  163.     if (mode < 0 || mode > 4) {
  164.  
  165.     } else {
  166.         Table_State Next_State = Modes[Current_State][mode].State;
  167.         if (Next_State == STATE_ERROR) {
  168.             //handle error
  169.         } else
  170.             return Next_State;
  171.     }
  172.     exit(EXIT_FAILURE);
  173. }
  174.  
  175. uint8_t parsing(uint8_t CMD_LINE[], char *CMD_PARSED[]) {
  176.     uint8_t Space_Counter = 0;
  177.     char *Token = strtok((char*) CMD_LINE, " ");
  178.     while (Token != NULL) {
  179.         CMD_PARSED[Space_Counter] = Token;
  180.         Space_Counter++;
  181.         Token = strtok(NULL, " ");
  182.     }
  183.     Space_Counter--;
  184.     return Space_Counter;
  185. }
  186. uint8_t get_mode(char *CMD_PARSED[], Command_line *User_Inputs) {
  187.     for (uint8_t i = 0; i < 1; i++) {
  188.         if (strcmp(CMD_PARSED[i], "CS") == 0) {
  189.             User_Inputs->mode = strtoul(CMD_PARSED[++i], NULL, 10);
  190.             if (User_Inputs->mode > 4) {
  191.                 User_Inputs->mode = 0;
  192.                 return 1;
  193.             }
  194.         }
  195.     }
  196.     return 7;
  197. }
  198. uint8_t validate_commands(char *CMD_PARSED[], uint8_t Space_Counter,
  199.         Command_line *User_Inputs, Table_State Current_State) {
  200.     for (uint8_t i = 0; i < Space_Counter; i++) {
  201.         if (strcmp(CMD_PARSED[i], "EN") == 0) {
  202.             if (Current_State == STATE_MANUALCTR
  203.                     || Current_State == STATE_OPENLOOP
  204.                     || Current_State == STATE_AUTOMATIC) {
  205.                 User_Inputs->enable = strtoul(CMD_PARSED[++i], NULL, 10);
  206.                 if (User_Inputs->enable > 1) {
  207.                     User_Inputs->enable = 0;
  208.                     return 2;
  209.                 }
  210.             }
  211.  
  212.         } else if (strcmp(CMD_PARSED[i], "HW") == 0) {
  213.             if (Current_State == STATE_CONFIG) {
  214.                 User_Inputs->period = strtoul(CMD_PARSED[++i], NULL, 10);
  215.                 if (User_Inputs->period > 1000 || User_Inputs->period < 1) {
  216.                     User_Inputs->period = 1;
  217.                     return 3;
  218.                 }
  219.             }
  220.  
  221.         } else if (strcmp(CMD_PARSED[i], "CR") == 0) {
  222.             if (Current_State == STATE_CONFIG) {
  223.                 User_Inputs->continuous_refresh = strtoul(CMD_PARSED[++i], NULL,
  224.                         10);
  225.                 if (User_Inputs->continuous_refresh > 2) {
  226.                     User_Inputs->continuous_refresh = 0;
  227.                     return 4;
  228.                 }
  229.             }
  230.  
  231.         } else if (strcmp(CMD_PARSED[i], "L") == 0) {
  232.             if (Current_State == STATE_CONFIG) {
  233.                 User_Inputs->read_pos_vel = strtoul(CMD_PARSED[++i], NULL, 10);
  234.                 if (User_Inputs->read_pos_vel > 2) {
  235.                     User_Inputs->read_pos_vel = 0;
  236.                     return 5;
  237.                 }
  238.             }
  239.  
  240.         } else if (strcmp(CMD_PARSED[i], "KA") == 0) {
  241.             if (Current_State == STATE_CONFIG) {
  242.                 User_Inputs->samples = strtoul(CMD_PARSED[++i], NULL, 10);
  243.                 if (User_Inputs->samples > 10000) {
  244.                     User_Inputs->samples = 0;
  245.                     return 6;
  246.                 }
  247.             }
  248.         }
  249.     }
  250.     return 7;
  251.  
  252. }
  253.  
  254. /* USER CODE END 0 */
  255.  
  256. /**
  257.  * @brief  The application entry point.
  258.  * @retval int
  259.  */
  260. int main(void) {
  261.     /* USER CODE BEGIN 1 */
  262.     Command_line User_Inputs = { 0 };
  263.     Search_engine Modes[5][5];
  264.     Table_State Current_State = STATE_RESET;
  265.     Table_State Next_State = STATE_RESET;
  266.     /* USER CODE END 1 */
  267.  
  268.     /* MCU Configuration--------------------------------------------------------*/
  269.  
  270.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  271.     HAL_Init();
  272.  
  273.     /* USER CODE BEGIN Init */
  274.  
  275.     /* USER CODE END Init */
  276.  
  277.     /* Configure the system clock */
  278.     SystemClock_Config();
  279.  
  280.     /* USER CODE BEGIN SysInit */
  281.  
  282.     /* USER CODE END SysInit */
  283.  
  284.     /* Initialize all configured peripherals */
  285.     MX_GPIO_Init();
  286.     MX_DMA_Init();
  287.     MX_ADC3_Init();
  288.     MX_TIM16_Init();
  289.     MX_USART3_UART_Init();
  290.     MX_TIM17_Init();
  291.     /* USER CODE BEGIN 2 */
  292.     initialize_modes(Modes);
  293.     HAL_UARTEx_ReceiveToIdle_DMA(&huart3, CMD_LINE, MAX_BUFFER_SIZE);
  294.     __HAL_DMA_DISABLE_IT(&hdma_usart3_rx, DMA_IT_HT);
  295.     /* USER CODE END 2 */
  296.  
  297.     /* Infinite loop */
  298.     /* USER CODE BEGIN WHILE */
  299.     while (1) {
  300.         if (Flag_Enable_Parse_And_Receive == 1) {
  301.             Flag_Enable_Parse_And_Receive = 0;
  302.             uint8_t Spaces_Counter = parsing(CMD_LINE, CMD_PARSED);
  303.             get_mode(CMD_PARSED,&User_Inputs);
  304.             Next_State = get_state(Modes, &User_Inputs, Current_State);
  305.             Current_State = Next_State;
  306.             validate_commands(CMD_PARSED, Spaces_Counter, &User_Inputs,
  307.                     Current_State);
  308.             state_configuration(Current_State, &User_Inputs);
  309.             memset(CMD_LINE, 0, MAX_BUFFER_SIZE);
  310.             HAL_UARTEx_ReceiveToIdle_DMA(&huart3, CMD_LINE,
  311.             MAX_BUFFER_SIZE);
  312.             __HAL_DMA_DISABLE_IT(&hdma_usart3_rx, DMA_IT_HT);
  313.         }
  314.         /* USER CODE END WHILE */
  315.  
  316.         /* USER CODE BEGIN 3 */
  317.     }
  318.     /* USER CODE END 3 */
  319. }
  320.  
  321. /**
  322.  * @brief System Clock Configuration
  323.  * @retval None
  324.  */
  325. void SystemClock_Config(void) {
  326.     RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };
  327.     RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
  328.  
  329.     /** Supply configuration update enable
  330.      */
  331.     HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);
  332.  
  333.     /** Configure the main internal regulator output voltage
  334.      */
  335.     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
  336.  
  337.     while (!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {
  338.     }
  339.  
  340.     /** Macro to configure the PLL clock source
  341.      */
  342.     __HAL_RCC_PLL_PLLSOURCE_CONFIG(RCC_PLLSOURCE_HSE);
  343.  
  344.     /** Initializes the RCC Oscillators according to the specified parameters
  345.      * in the RCC_OscInitTypeDef structure.
  346.      */
  347.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI
  348.             | RCC_OSCILLATORTYPE_HSE;
  349.     RCC_OscInitStruct.HSEState = RCC_HSE_BYPASS;
  350.     RCC_OscInitStruct.HSIState = RCC_HSI_DIV1;
  351.     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  352.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  353.     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
  354.         Error_Handler();
  355.     }
  356.  
  357.     /** Initializes the CPU, AHB and APB buses clocks
  358.      */
  359.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
  360.             | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2 | RCC_CLOCKTYPE_D3PCLK1
  361.             | RCC_CLOCKTYPE_D1PCLK1;
  362.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  363.     RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  364.     RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1;
  365.     RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1;
  366.     RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV1;
  367.     RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1;
  368.     RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1;
  369.  
  370.     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
  371.         Error_Handler();
  372.     }
  373. }
  374.  
  375. /**
  376.  * @brief ADC3 Initialization Function
  377.  * @param None
  378.  * @retval None
  379.  */
  380. static void MX_ADC3_Init(void) {
  381.  
  382.     /* USER CODE BEGIN ADC3_Init 0 */
  383.  
  384.     /* USER CODE END ADC3_Init 0 */
  385.  
  386.     ADC_ChannelConfTypeDef sConfig = { 0 };
  387.  
  388.     /* USER CODE BEGIN ADC3_Init 1 */
  389.  
  390.     /* USER CODE END ADC3_Init 1 */
  391.  
  392.     /** Common config
  393.      */
  394.     hadc3.Instance = ADC3;
  395.     hadc3.Init.Resolution = ADC_RESOLUTION_16B;
  396.     hadc3.Init.ScanConvMode = ADC_SCAN_DISABLE;
  397.     hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  398.     hadc3.Init.LowPowerAutoWait = DISABLE;
  399.     hadc3.Init.ContinuousConvMode = DISABLE;
  400.     hadc3.Init.NbrOfConversion = 1;
  401.     hadc3.Init.DiscontinuousConvMode = DISABLE;
  402.     hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  403.     hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  404.     hadc3.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
  405.     hadc3.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  406.     hadc3.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
  407.     hadc3.Init.OversamplingMode = DISABLE;
  408.     if (HAL_ADC_Init(&hadc3) != HAL_OK) {
  409.         Error_Handler();
  410.     }
  411.  
  412.     /** Configure Regular Channel
  413.      */
  414.     sConfig.Channel = ADC_CHANNEL_1;
  415.     sConfig.Rank = ADC_REGULAR_RANK_1;
  416.     sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
  417.     sConfig.SingleDiff = ADC_SINGLE_ENDED;
  418.     sConfig.OffsetNumber = ADC_OFFSET_NONE;
  419.     sConfig.Offset = 0;
  420.     sConfig.OffsetSignedSaturation = DISABLE;
  421.     if (HAL_ADC_ConfigChannel(&hadc3, &sConfig) != HAL_OK) {
  422.         Error_Handler();
  423.     }
  424.     /* USER CODE BEGIN ADC3_Init 2 */
  425.  
  426.     /* USER CODE END ADC3_Init 2 */
  427.  
  428. }
  429.  
  430. /**
  431.  * @brief TIM16 Initialization Function
  432.  * @param None
  433.  * @retval None
  434.  */
  435. static void MX_TIM16_Init(void) {
  436.  
  437.     /* USER CODE BEGIN TIM16_Init 0 */
  438.  
  439.     /* USER CODE END TIM16_Init 0 */
  440.  
  441.     /* USER CODE BEGIN TIM16_Init 1 */
  442.  
  443.     /* USER CODE END TIM16_Init 1 */
  444.     htim16.Instance = TIM16;
  445.     htim16.Init.Prescaler = 64 - 1;
  446.     htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
  447.     htim16.Init.Period = 1000 - 1;
  448.     htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  449.     htim16.Init.RepetitionCounter = 0;
  450.     htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  451.     if (HAL_TIM_Base_Init(&htim16) != HAL_OK) {
  452.         Error_Handler();
  453.     }
  454.     /* USER CODE BEGIN TIM16_Init 2 */
  455.  
  456.     /* USER CODE END TIM16_Init 2 */
  457.  
  458. }
  459.  
  460. /**
  461.  * @brief TIM17 Initialization Function
  462.  * @param None
  463.  * @retval None
  464.  */
  465. static void MX_TIM17_Init(void) {
  466.  
  467.     /* USER CODE BEGIN TIM17_Init 0 */
  468.  
  469.     /* USER CODE END TIM17_Init 0 */
  470.  
  471.     /* USER CODE BEGIN TIM17_Init 1 */
  472.  
  473.     /* USER CODE END TIM17_Init 1 */
  474.     htim17.Instance = TIM17;
  475.     htim17.Init.Prescaler = 64000 - 1;
  476.     htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
  477.     htim17.Init.Period = 65535;
  478.     htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  479.     htim17.Init.RepetitionCounter = 0;
  480.     htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  481.     if (HAL_TIM_Base_Init(&htim17) != HAL_OK) {
  482.         Error_Handler();
  483.     }
  484.     /* USER CODE BEGIN TIM17_Init 2 */
  485.  
  486.     /* USER CODE END TIM17_Init 2 */
  487.  
  488. }
  489.  
  490. /**
  491.  * @brief USART3 Initialization Function
  492.  * @param None
  493.  * @retval None
  494.  */
  495. static void MX_USART3_UART_Init(void) {
  496.  
  497.     /* USER CODE BEGIN USART3_Init 0 */
  498.  
  499.     /* USER CODE END USART3_Init 0 */
  500.  
  501.     /* USER CODE BEGIN USART3_Init 1 */
  502.  
  503.     /* USER CODE END USART3_Init 1 */
  504.     huart3.Instance = USART3;
  505.     huart3.Init.BaudRate = 115200;
  506.     huart3.Init.WordLength = UART_WORDLENGTH_8B;
  507.     huart3.Init.StopBits = UART_STOPBITS_1;
  508.     huart3.Init.Parity = UART_PARITY_NONE;
  509.     huart3.Init.Mode = UART_MODE_TX_RX;
  510.     huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  511.     huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  512.     huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  513.     huart3.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  514.     huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  515.     if (HAL_UART_Init(&huart3) != HAL_OK) {
  516.         Error_Handler();
  517.     }
  518.     if (HAL_UARTEx_SetTxFifoThreshold(&huart3, UART_TXFIFO_THRESHOLD_1_8)
  519.             != HAL_OK) {
  520.         Error_Handler();
  521.     }
  522.     if (HAL_UARTEx_SetRxFifoThreshold(&huart3, UART_RXFIFO_THRESHOLD_1_8)
  523.             != HAL_OK) {
  524.         Error_Handler();
  525.     }
  526.     if (HAL_UARTEx_DisableFifoMode(&huart3) != HAL_OK) {
  527.         Error_Handler();
  528.     }
  529.     /* USER CODE BEGIN USART3_Init 2 */
  530.  
  531.     /* USER CODE END USART3_Init 2 */
  532.  
  533. }
  534.  
  535. /**
  536.  * Enable DMA controller clock
  537.  */
  538. static void MX_DMA_Init(void) {
  539.  
  540.     /* DMA controller clock enable */
  541.     __HAL_RCC_DMA1_CLK_ENABLE();
  542.  
  543.     /* DMA interrupt init */
  544.     /* DMA1_Stream0_IRQn interrupt configuration */
  545.     HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
  546.     HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  547.     /* DMA1_Stream1_IRQn interrupt configuration */
  548.     HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 0, 0);
  549.     HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn);
  550.  
  551. }
  552.  
  553. /**
  554.  * @brief GPIO Initialization Function
  555.  * @param None
  556.  * @retval None
  557.  */
  558. static void MX_GPIO_Init(void) {
  559.     GPIO_InitTypeDef GPIO_InitStruct = { 0 };
  560.     /* USER CODE BEGIN MX_GPIO_Init_1 */
  561.     /* USER CODE END MX_GPIO_Init_1 */
  562.  
  563.     /* GPIO Ports Clock Enable */
  564.     __HAL_RCC_GPIOC_CLK_ENABLE();
  565.     __HAL_RCC_GPIOF_CLK_ENABLE();
  566.     __HAL_RCC_GPIOH_CLK_ENABLE();
  567.     __HAL_RCC_GPIOA_CLK_ENABLE();
  568.     __HAL_RCC_GPIOB_CLK_ENABLE();
  569.     __HAL_RCC_GPIOD_CLK_ENABLE();
  570.     __HAL_RCC_GPIOG_CLK_ENABLE();
  571.     __HAL_RCC_GPIOE_CLK_ENABLE();
  572.  
  573.     /*Configure GPIO pin Output Level */
  574.     HAL_GPIO_WritePin(GPIOB, LD1_Pin | LD3_Pin, GPIO_PIN_RESET);
  575.  
  576.     /*Configure GPIO pin Output Level */
  577.     HAL_GPIO_WritePin(USB_OTG_FS_PWR_EN_GPIO_Port, USB_OTG_FS_PWR_EN_Pin,
  578.             GPIO_PIN_RESET);
  579.  
  580.     /*Configure GPIO pin Output Level */
  581.     HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
  582.  
  583.     /*Configure GPIO pin : PC13 */
  584.     GPIO_InitStruct.Pin = GPIO_PIN_13;
  585.     GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  586.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  587.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  588.  
  589.     /*Configure GPIO pins : PC1 PC4 PC5 */
  590.     GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5;
  591.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  592.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  593.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  594.     GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  595.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
  596.  
  597.     /*Configure GPIO pins : PA1 PA2 PA7 */
  598.     GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_7;
  599.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  600.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  601.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  602.     GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  603.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  604.  
  605.     /*Configure GPIO pins : LD1_Pin LD3_Pin */
  606.     GPIO_InitStruct.Pin = LD1_Pin | LD3_Pin;
  607.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  608.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  609.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  610.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  611.  
  612.     /*Configure GPIO pin : PB13 */
  613.     GPIO_InitStruct.Pin = GPIO_PIN_13;
  614.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  615.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  616.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  617.     GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  618.     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  619.  
  620.     /*Configure GPIO pin : USB_OTG_FS_PWR_EN_Pin */
  621.     GPIO_InitStruct.Pin = USB_OTG_FS_PWR_EN_Pin;
  622.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  623.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  624.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  625.     HAL_GPIO_Init(USB_OTG_FS_PWR_EN_GPIO_Port, &GPIO_InitStruct);
  626.  
  627.     /*Configure GPIO pin : PG5 */
  628.     GPIO_InitStruct.Pin = GPIO_PIN_5;
  629.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  630.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  631.     HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  632.  
  633.     /*Configure GPIO pins : PA8 PA11 PA12 */
  634.     GPIO_InitStruct.Pin = GPIO_PIN_8 | GPIO_PIN_11 | GPIO_PIN_12;
  635.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  636.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  637.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  638.     GPIO_InitStruct.Alternate = GPIO_AF10_OTG1_FS;
  639.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  640.  
  641.     /*Configure GPIO pins : PG11 PG13 */
  642.     GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_13;
  643.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  644.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  645.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  646.     GPIO_InitStruct.Alternate = GPIO_AF11_ETH;
  647.     HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
  648.  
  649.     /*Configure GPIO pin : LD2_Pin */
  650.     GPIO_InitStruct.Pin = LD2_Pin;
  651.     GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  652.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  653.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  654.     HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
  655.  
  656.     /* EXTI interrupt init*/
  657.     HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
  658.     HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
  659.  
  660.     /* USER CODE BEGIN MX_GPIO_Init_2 */
  661.     /* USER CODE END MX_GPIO_Init_2 */
  662. }
  663.  
  664. /* USER CODE BEGIN 4 */
  665.  
  666. /* USER CODE END 4 */
  667.  
  668. /**
  669.  * @brief  This function is executed in case of error occurrence.
  670.  * @retval None
  671.  */
  672. void Error_Handler(void) {
  673.     /* USER CODE BEGIN Error_Handler_Debug */
  674.     /* User can add his own implementation to report the HAL error return state */
  675.     __disable_irq();
  676.     while (1) {
  677.     }
  678.     /* USER CODE END Error_Handler_Debug */
  679. }
  680.  
  681. #ifdef  USE_FULL_ASSERT
  682. /**
  683.   * @brief  Reports the name of the source file and the source line number
  684.   *         where the assert_param error has occurred.
  685.   * @param  file: pointer to the source file name
  686.   * @param  line: assert_param error line source number
  687.   * @retval None
  688.   */
  689. void assert_failed(uint8_t *file, uint32_t line)
  690. {
  691.   /* USER CODE BEGIN 6 */
  692.   /* User can add his own implementation to report the file name and line number,
  693.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  694.   /* USER CODE END 6 */
  695. }
  696. #endif /* USE_FULL_ASSERT */
  697.  
Advertisement
Add Comment
Please, Sign In to add comment