你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32L476管脚配置的功耗问题

[复制链接]
wang7885 提问时间:2017-9-21 15:57 /
使用STM32Cube 生产代码,测量STM32L476的低功耗,详见 static void MX_GPIO_Init(void) 函数:当把进入低功耗的代码放置在管脚配置之前,测量1.5uA ,正常;
当把进入低功耗的代码放置在配置外部中断管脚之后,测量 500 uA
请问是否正常?为什么?
谢谢!

  1. /**
  2.   ******************************************************************************
  3.   * File Name          : main.c
  4.   * Description        : Main program body
  5.   ******************************************************************************
  6.   * This notice applies to any and all portions of this file
  7.   * that are not between comment pairs USER CODE BEGIN and
  8.   * USER CODE END. Other portions of this file, whether
  9.   * inserted by the user or by software development tools
  10.   * are owned by their respective copyright owners.
  11.   *
  12.   * Copyright (c) 2017 STMicroelectronics International N.V.
  13.   * All rights reserved.
  14.   *
  15.   * Redistribution and use in source and binary forms, with or without
  16.   * modification, are permitted, provided that the following conditions are met:
  17.   *
  18.   * 1. Redistribution of source code must retain the above copyright notice,
  19.   *    this list of conditions and the following disclaimer.
  20.   * 2. Redistributions in binary form must reproduce the above copyright notice,
  21.   *    this list of conditions and the following disclaimer in the documentation
  22.   *    and/or other materials provided with the distribution.
  23.   * 3. Neither the name of STMicroelectronics nor the names of other
  24.   *    contributors to this software may be used to endorse or promote products
  25.   *    derived from this software without specific written permission.
  26.   * 4. This software, including modifications and/or derivative works of this
  27.   *    software, must execute solely and exclusively on microcontroller or
  28.   *    microprocessor devices manufactured by or for STMicroelectronics.
  29.   * 5. Redistribution and use of this software other than as permitted under
  30.   *    this license is void and will automatically terminate your rights under
  31.   *    this license.
  32.   *
  33.   * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
  34.   * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
  35.   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  36.   * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
  37.   * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
  38.   * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  39.   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  40.   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  41.   * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  42.   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  43.   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  44.   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  45.   *
  46.   ******************************************************************************
  47.   */
  48. /* Includes ------------------------------------------------------------------*/
  49. #include "main.h"
  50. #include "stm32l4xx_hal.h"
  51. #include "cmsis_os.h"

  52. /* USER CODE BEGIN Includes */
  53. #include "BSP.h"
  54. #include "APP_Main.h"
  55. /* USER CODE END Includes */

  56. /* Private variables ---------------------------------------------------------*/
  57. ADC_HandleTypeDef hadc1;
  58. DMA_HandleTypeDef hdma_adc1;

  59. CRC_HandleTypeDef hcrc;

  60. I2C_HandleTypeDef hi2c1;
  61. I2C_HandleTypeDef hi2c2;

  62. IWDG_HandleTypeDef hiwdg;

  63. LPTIM_HandleTypeDef hlptim1;

  64. RTC_HandleTypeDef hrtc;

  65. SAI_HandleTypeDef hsai_BlockA2;
  66. DMA_HandleTypeDef hdma_sai2_a;

  67. SPI_HandleTypeDef hspi1;

  68. TIM_HandleTypeDef htim2;
  69. TIM_HandleTypeDef htim3;
  70. TIM_HandleTypeDef htim5;
  71. TIM_HandleTypeDef htim7;
  72. TIM_HandleTypeDef htim16;

  73. UART_HandleTypeDef huart4;
  74. UART_HandleTypeDef huart3;
  75. DMA_HandleTypeDef hdma_usart3_rx;

  76. SRAM_HandleTypeDef hsram1;

  77. osThreadId defaultTaskHandle;

  78. /* USER CODE BEGIN PV */
  79. /* Private variables ---------------------------------------------------------*/

  80. /* USER CODE END PV */

  81. /* Private function prototypes -----------------------------------------------*/
  82. void SystemClock_Config(void);
  83. static void MX_GPIO_Init(void);
  84. static void MX_DMA_Init(void);
  85. static void MX_ADC1_Init(void);
  86. static void MX_CRC_Init(void);
  87. static void MX_I2C1_Init(void);
  88. static void MX_I2C2_Init(void);
  89. static void MX_SPI1_Init(void);
  90. static void MX_USART3_UART_Init(void);
  91. static void MX_UART4_Init(void);
  92. static void MX_FMC_Init(void);
  93. static void MX_RTC_Init(void);
  94. static void MX_TIM2_Init(void);
  95. static void MX_TIM16_Init(void);
  96. static void MX_IWDG_Init(void);
  97. static void MX_SAI2_Init(void);
  98. static void MX_TIM7_Init(void);
  99. static void MX_TIM5_Init(void);
  100. static void MX_TIM3_Init(void);
  101. static void MX_LPTIM1_Init(void);
  102. void StartDefaultTask(void const * argument);

  103. void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);
  104.                                 

  105. /* USER CODE BEGIN PFP */
  106. /* Private function prototypes -----------------------------------------------*/

  107. /* USER CODE END PFP */

  108. /* USER CODE BEGIN 0 */

  109. /* USER CODE END 0 */

  110. int main(void)
  111. {

  112.   /* USER CODE BEGIN 1 */

  113.   /* USER CODE END 1 */

  114.   /* MCU Configuration----------------------------------------------------------*/

  115.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  116.   HAL_Init();

  117.   /* USER CODE BEGIN Init */
  118.   /* USER CODE END Init */

  119.   /* Configure the system clock */
  120.   SystemClock_Config();

  121.   /* USER CODE BEGIN SysInit */
  122.   /* USER CODE END SysInit */

  123.   /* Initialize all configured peripherals */
  124.   MX_GPIO_Init();

  125. #if 0
  126.   MX_DMA_Init();
  127.   MX_ADC1_Init();
  128.   MX_CRC_Init();
  129.   MX_I2C1_Init();
  130.   MX_I2C2_Init();
  131.   MX_SPI1_Init();
  132.   MX_USART3_UART_Init();
  133.   MX_UART4_Init();
  134.   MX_FMC_Init();
  135.   MX_RTC_Init();
  136.   MX_TIM2_Init();
  137.   MX_TIM16_Init();
  138.   MX_IWDG_Init();
  139.   MX_SAI2_Init();
  140.   MX_TIM7_Init();
  141.   MX_TIM5_Init();
  142.   MX_TIM3_Init();
  143.   MX_LPTIM1_Init();

  144.   /* USER CODE BEGIN 2 */

  145.   APP_Main();

  146.   /* USER CODE END 2 */

  147.   /* USER CODE BEGIN RTOS_MUTEX */
  148.   /* add mutexes, ... */
  149.   /* USER CODE END RTOS_MUTEX */

  150.   /* USER CODE BEGIN RTOS_SEMAPHORES */
  151.   /* add semaphores, ... */
  152.   /* USER CODE END RTOS_SEMAPHORES */

  153.   /* USER CODE BEGIN RTOS_TIMERS */
  154.   /* start timers, add new ones, ... */
  155.   /* USER CODE END RTOS_TIMERS */

  156.   /* Create the thread(s) */
  157.   /* definition and creation of defaultTask */
  158.   osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  159.   defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  160.   /* USER CODE BEGIN RTOS_THREADS */
  161.   /* add threads, ... */
  162.   /* USER CODE END RTOS_THREADS */

  163.   /* USER CODE BEGIN RTOS_QUEUES */
  164.   /* add queues, ... */
  165.   /* USER CODE END RTOS_QUEUES */


  166.   /* Start scheduler */
  167.   osKernelStart();
  168.   
  169.   /* We should never get here as control is now taken by the scheduler */

  170.   /* Infinite loop */
  171.   /* USER CODE BEGIN WHILE */
  172.   while (1)
  173.   {
  174.   /* USER CODE END WHILE */

  175.   /* USER CODE BEGIN 3 */

  176.   }
  177.   /* USER CODE END 3 */
  178. #endif
  179. }

  180. /** System Clock Configuration
  181. */
  182. void SystemClock_Config(void)
  183. {

  184.   RCC_OscInitTypeDef RCC_OscInitStruct;
  185.   RCC_ClkInitTypeDef RCC_ClkInitStruct;
  186.   RCC_PeriphCLKInitTypeDef PeriphClkInit;

  187.     /**Initializes the CPU, AHB and APB busses clocks
  188.     */
  189.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_HSE;
  190.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  191.   RCC_OscInitStruct.LSIState = RCC_LSI_ON;
  192.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  193.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  194.   RCC_OscInitStruct.PLL.PLLM = 1;
  195.   RCC_OscInitStruct.PLL.PLLN = 18;
  196.   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  197.   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  198.   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
  199.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  200.   {
  201.     _Error_Handler(__FILE__, __LINE__);
  202.   }

  203.     /**Initializes the CPU, AHB and APB busses clocks
  204.     */
  205.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  206.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  207.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  208.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  209.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  210.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  211.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  212.   {
  213.     _Error_Handler(__FILE__, __LINE__);
  214.   }

  215.   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART3
  216.                               |RCC_PERIPHCLK_UART4|RCC_PERIPHCLK_LPTIM1
  217.                               |RCC_PERIPHCLK_SAI2|RCC_PERIPHCLK_I2C1
  218.                               |RCC_PERIPHCLK_I2C2;
  219.   PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
  220.   PeriphClkInit.Uart4ClockSelection = RCC_UART4CLKSOURCE_PCLK1;
  221.   PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
  222.   PeriphClkInit.I2c2ClockSelection = RCC_I2C2CLKSOURCE_PCLK1;
  223.   PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSI;
  224.   PeriphClkInit.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLSAI2;
  225.   PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
  226.   PeriphClkInit.PLLSAI2.PLLSAI2Source = RCC_PLLSOURCE_HSE;
  227.   PeriphClkInit.PLLSAI2.PLLSAI2M = 1;
  228.   PeriphClkInit.PLLSAI2.PLLSAI2N = 26;
  229.   PeriphClkInit.PLLSAI2.PLLSAI2P = RCC_PLLP_DIV17;
  230.   PeriphClkInit.PLLSAI2.PLLSAI2R = RCC_PLLR_DIV8;
  231.   PeriphClkInit.PLLSAI2.PLLSAI2ClockOut = RCC_PLLSAI2_SAI2CLK;
  232.   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  233.   {
  234.     _Error_Handler(__FILE__, __LINE__);
  235.   }

  236.     /**Configure the main internal regulator output voltage
  237.     */
  238.   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
  239.   {
  240.     _Error_Handler(__FILE__, __LINE__);
  241.   }

  242.     /**Configure the Systick interrupt time
  243.     */
  244.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/8000);

  245.     /**Configure the Systick
  246.     */
  247.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);

  248.   /* SysTick_IRQn interrupt configuration */
  249.   HAL_NVIC_SetPriority(SysTick_IRQn, 15, 0);
  250. }

  251. /* ADC1 init function */
  252. static void MX_ADC1_Init(void)
  253. {

  254.   ADC_MultiModeTypeDef multimode;
  255.   ADC_ChannelConfTypeDef sConfig;

  256.     /**Common config
  257.     */
  258.   hadc1.Instance = ADC1;
  259.   hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  260.   hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  261.   hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  262.   hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  263.   hadc1.Init.EOCSelection = ADC_EOC_SINGLE_SEQ_CONV;
  264.   hadc1.Init.LowPowerAutoWait = ENABLE;
  265.   hadc1.Init.ContinuousConvMode = ENABLE;
  266.   hadc1.Init.NbrOfConversion = 7;
  267.   hadc1.Init.DiscontinuousConvMode = DISABLE;
  268.   hadc1.Init.NbrOfDiscConversion = 1;
  269.   hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  270.   hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  271.   hadc1.Init.DMAContinuousRequests = ENABLE;
  272.   hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  273.   hadc1.Init.OversamplingMode = DISABLE;
  274.   if (HAL_ADC_Init(&hadc1) != HAL_OK)
  275.   {
  276.     _Error_Handler(__FILE__, __LINE__);
  277.   }

  278.     /**Configure the ADC multi-mode
  279.     */
  280.   multimode.Mode = ADC_MODE_INDEPENDENT;
  281.   if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK)
  282.   {
  283.     _Error_Handler(__FILE__, __LINE__);
  284.   }

  285.     /**Configure Regular Channel
  286.     */
  287.   sConfig.Channel = ADC_CHANNEL_1;
  288.   sConfig.Rank = 1;
  289.   sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;
  290.   sConfig.SingleDiff = ADC_SINGLE_ENDED;
  291.   sConfig.OffsetNumber = ADC_OFFSET_NONE;
  292.   sConfig.Offset = 0;
  293.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  294.   {
  295.     _Error_Handler(__FILE__, __LINE__);
  296.   }

  297.     /**Configure Regular Channel
  298.     */
  299.   sConfig.SamplingTime = ADC_SAMPLETIME_12CYCLES_5;
  300.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  301.   {
  302.     _Error_Handler(__FILE__, __LINE__);
  303.   }

  304.     /**Configure Regular Channel
  305.     */
  306.   sConfig.Channel = ADC_CHANNEL_2;
  307.   sConfig.Rank = 2;
  308.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  309.   {
  310.     _Error_Handler(__FILE__, __LINE__);
  311.   }

  312.     /**Configure Regular Channel
  313.     */
  314.   sConfig.Channel = ADC_CHANNEL_3;
  315.   sConfig.Rank = 3;
  316.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  317.   {
  318.     _Error_Handler(__FILE__, __LINE__);
  319.   }

  320.     /**Configure Regular Channel
  321.     */
  322.   sConfig.Channel = ADC_CHANNEL_4;
  323.   sConfig.Rank = 4;
  324.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  325.   {
  326.     _Error_Handler(__FILE__, __LINE__);
  327.   }

  328.     /**Configure Regular Channel
  329.     */
  330.   sConfig.Channel = ADC_CHANNEL_5;
  331.   sConfig.Rank = 5;
  332.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  333.   {
  334.     _Error_Handler(__FILE__, __LINE__);
  335.   }

  336.     /**Configure Regular Channel
  337.     */
  338.   sConfig.Channel = ADC_CHANNEL_6;
  339.   sConfig.Rank = 6;
  340.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  341.   {
  342.     _Error_Handler(__FILE__, __LINE__);
  343.   }

  344.     /**Configure Regular Channel
  345.     */
  346.   sConfig.Channel = ADC_CHANNEL_7;
  347.   sConfig.Rank = 7;
  348.   if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  349.   {
  350.     _Error_Handler(__FILE__, __LINE__);
  351.   }

  352. }

  353. /* CRC init function */
  354. static void MX_CRC_Init(void)
  355. {

  356.   hcrc.Instance = CRC;
  357.   hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
  358.   hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  359.   hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  360.   hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  361.   hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_WORDS;
  362.   if (HAL_CRC_Init(&hcrc) != HAL_OK)
  363.   {
  364.     _Error_Handler(__FILE__, __LINE__);
  365.   }

  366. }

  367. /* I2C1 init function */
  368. static void MX_I2C1_Init(void)
  369. {

  370.   hi2c1.Instance = I2C1;
  371.   hi2c1.Init.Timing = 0x20622E3E;
  372.   hi2c1.Init.OwnAddress1 = 0;
  373.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  374.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  375.   hi2c1.Init.OwnAddress2 = 0;
  376.   hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  377.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  378.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  379.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  380.   {
  381.     _Error_Handler(__FILE__, __LINE__);
  382.   }

  383.     /**Configure Analogue filter
  384.     */
  385.   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  386.   {
  387.     _Error_Handler(__FILE__, __LINE__);
  388.   }

  389.     /**Configure Digital filter
  390.     */
  391.   if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK)
  392.   {
  393.     _Error_Handler(__FILE__, __LINE__);
  394.   }

  395. }

  396. /* I2C2 init function */
  397. static void MX_I2C2_Init(void)
  398. {

  399.   hi2c2.Instance = I2C2;
  400.   hi2c2.Init.Timing = 0x20622E3E;
  401.   hi2c2.Init.OwnAddress1 = 0;
  402.   hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  403.   hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  404.   hi2c2.Init.OwnAddress2 = 0;
  405.   hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;
  406.   hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  407.   hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  408.   if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  409.   {
  410.     _Error_Handler(__FILE__, __LINE__);
  411.   }

  412.     /**Configure Analogue filter
  413.     */
  414.   if (HAL_I2CEx_ConfigAnalogFilter(&hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)
  415.   {
  416.     _Error_Handler(__FILE__, __LINE__);
  417.   }

  418.     /**Configure Digital filter
  419.     */
  420.   if (HAL_I2CEx_ConfigDigitalFilter(&hi2c2, 0) != HAL_OK)
  421.   {
  422.     _Error_Handler(__FILE__, __LINE__);
  423.   }

  424. }

  425. /* IWDG init function */
  426. static void MX_IWDG_Init(void)
  427. {

  428.   hiwdg.Instance = IWDG;
  429.   hiwdg.Init.Prescaler = IWDG_PRESCALER_128;
  430.   hiwdg.Init.Window = 4095;
  431.   hiwdg.Init.Reload = 4095;
  432.   if (HAL_IWDG_Init(&hiwdg) != HAL_OK)
  433.   {
  434.     _Error_Handler(__FILE__, __LINE__);
  435.   }

  436. }

  437. /* LPTIM1 init function */
  438. static void MX_LPTIM1_Init(void)
  439. {

  440.   hlptim1.Instance = LPTIM1;
  441.   hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  442.   hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;
  443.   hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;
  444.   hlptim1.Init.OutputPolarity = LPTIM_OUTPUTPOLARITY_HIGH;
  445.   hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
  446.   hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
  447.   hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
  448.   hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;
  449.   if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)
  450.   {
  451.     _Error_Handler(__FILE__, __LINE__);
  452.   }

  453. }

  454. /* RTC init function */
  455. static void MX_RTC_Init(void)
  456. {

  457.   RTC_TimeTypeDef sTime;
  458.   RTC_DateTypeDef sDate;
  459.   RTC_AlarmTypeDef sAlarm;

  460.     /**Initialize RTC Only
  461.     */
  462.   hrtc.Instance = RTC;
  463.   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
  464.   hrtc.Init.AsynchPrediv = 127;
  465.   hrtc.Init.SynchPrediv = 255;
  466.   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
  467.   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
  468.   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
  469.   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
  470.   if (HAL_RTC_Init(&hrtc) != HAL_OK)
  471.   {
  472.     _Error_Handler(__FILE__, __LINE__);
  473.   }

  474.     /**Initialize RTC and set the Time and Date
  475.     */
  476.   if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
  477.   sTime.Hours = 0x0;
  478.   sTime.Minutes = 0x0;
  479.   sTime.Seconds = 0x0;
  480.   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  481.   sTime.StoreOperation = RTC_STOREOPERATION_RESET;
  482.   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK)
  483.   {
  484.     _Error_Handler(__FILE__, __LINE__);
  485.   }

  486.   sDate.WeekDay = RTC_WEEKDAY_MONDAY;
  487.   sDate.Month = RTC_MONTH_JANUARY;
  488.   sDate.Date = 0x1;
  489.   sDate.Year = 0x0;

  490.   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK)
  491.   {
  492.     _Error_Handler(__FILE__, __LINE__);
  493.   }

  494.     HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
  495.   }
  496.     /**Enable the Alarm A
  497.     */
  498.   sAlarm.AlarmTime.Hours = 0x0;
  499.   sAlarm.AlarmTime.Minutes = 0x0;
  500.   sAlarm.AlarmTime.Seconds = 0x0;
  501.   sAlarm.AlarmTime.SubSeconds = 0x0;
  502.   sAlarm.AlarmTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
  503.   sAlarm.AlarmTime.StoreOperation = RTC_STOREOPERATION_RESET;
  504.   sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
  505.   sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  506.   sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  507.   sAlarm.AlarmDateWeekDay = 0x1;
  508.   sAlarm.Alarm = RTC_ALARM_A;
  509.   if (HAL_RTC_SetAlarm(&hrtc, &sAlarm, RTC_FORMAT_BCD) != HAL_OK)
  510.   {
  511.     _Error_Handler(__FILE__, __LINE__);
  512.   }

  513. }

  514. /* SAI2 init function */
  515. static void MX_SAI2_Init(void)
  516. {

  517.   hsai_BlockA2.Instance = SAI2_Block_A;
  518.   hsai_BlockA2.Init.AudioMode = SAI_MODEMASTER_TX;
  519.   hsai_BlockA2.Init.Synchro = SAI_ASYNCHRONOUS;
  520.   hsai_BlockA2.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLE;
  521.   hsai_BlockA2.Init.NoDivider = SAI_MASTERDIVIDER_ENABLE;
  522.   hsai_BlockA2.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_EMPTY;
  523.   hsai_BlockA2.Init.AudioFrequency = SAI_AUDIO_FREQUENCY_MCKDIV;
  524.   hsai_BlockA2.Init.Mckdiv = 3;
  525.   hsai_BlockA2.Init.SynchroExt = SAI_SYNCEXT_DISABLE;
  526.   hsai_BlockA2.Init.MonoStereoMode = SAI_STEREOMODE;
  527.   hsai_BlockA2.Init.CompandingMode = SAI_NOCOMPANDING;
  528.   hsai_BlockA2.Init.TriState = SAI_OUTPUT_NOTRELEASED;
  529.   if (HAL_SAI_InitProtocol(&hsai_BlockA2, SAI_I2S_STANDARD, SAI_PROTOCOL_DATASIZE_32BIT, 2) != HAL_OK)
  530.   {
  531.     _Error_Handler(__FILE__, __LINE__);
  532.   }

  533. }

  534. /* SPI1 init function */
  535. static void MX_SPI1_Init(void)
  536. {

  537.   hspi1.Instance = SPI1;
  538.   hspi1.Init.Mode = SPI_MODE_MASTER;
  539.   hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  540.   hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  541.   hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  542.   hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  543.   hspi1.Init.NSS = SPI_NSS_SOFT;
  544.   hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
  545.   hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  546.   hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  547.   hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  548.   hspi1.Init.CRCPolynomial = 7;
  549.   hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  550.   hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
  551.   if (HAL_SPI_Init(&hspi1) != HAL_OK)
  552.   {
  553.     _Error_Handler(__FILE__, __LINE__);
  554.   }

  555. }

  556. /* TIM2 init function */
  557. static void MX_TIM2_Init(void)
  558. {

  559.   TIM_ClockConfigTypeDef sClockSourceConfig;
  560.   TIM_MasterConfigTypeDef sMasterConfig;

  561.   htim2.Instance = TIM2;
  562.   htim2.Init.Prescaler = 0;
  563.   htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  564.   htim2.Init.Period = 65535;
  565.   htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  566.   if (HAL_TIM_Base_Init(&htim2) != HAL_OK)
  567.   {
  568.     _Error_Handler(__FILE__, __LINE__);
  569.   }

  570.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;
  571.   sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;
  572.   sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;
  573.   sClockSourceConfig.ClockFilter = 0;
  574.   if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK)
  575.   {
  576.     _Error_Handler(__FILE__, __LINE__);
  577.   }

  578.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  579.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  580.   if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  581.   {
  582.     _Error_Handler(__FILE__, __LINE__);
  583.   }

  584. }

  585. /* TIM3 init function */
  586. static void MX_TIM3_Init(void)
  587. {

  588.   TIM_ClockConfigTypeDef sClockSourceConfig;
  589.   TIM_MasterConfigTypeDef sMasterConfig;
  590.   TIM_OC_InitTypeDef sConfigOC;

  591.   htim3.Instance = TIM3;
  592.   htim3.Init.Prescaler = 123;
  593.   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  594.   htim3.Init.Period = 1000;
  595.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  596.   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  597.   {
  598.     _Error_Handler(__FILE__, __LINE__);
  599.   }

  600.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  601.   if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
  602.   {
  603.     _Error_Handler(__FILE__, __LINE__);
  604.   }

  605.   if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
  606.   {
  607.     _Error_Handler(__FILE__, __LINE__);
  608.   }

  609.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  610.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  611.   if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  612.   {
  613.     _Error_Handler(__FILE__, __LINE__);
  614.   }

  615.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  616.   sConfigOC.Pulse = 900;
  617.   sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  618.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  619.   if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  620.   {
  621.     _Error_Handler(__FILE__, __LINE__);
  622.   }

  623.   HAL_TIM_MspPostInit(&htim3);

  624. }

  625. /* TIM5 init function */
  626. static void MX_TIM5_Init(void)
  627. {

  628.   TIM_ClockConfigTypeDef sClockSourceConfig;
  629.   TIM_MasterConfigTypeDef sMasterConfig;

  630.   htim5.Instance = TIM5;
  631.   htim5.Init.Prescaler = 7199;
  632.   htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
  633.   htim5.Init.Period = 100;
  634.   htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  635.   if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
  636.   {
  637.     _Error_Handler(__FILE__, __LINE__);
  638.   }

  639.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  640.   if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
  641.   {
  642.     _Error_Handler(__FILE__, __LINE__);
  643.   }

  644.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  645.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  646.   if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
  647.   {
  648.     _Error_Handler(__FILE__, __LINE__);
  649.   }

  650. }

  651. /* TIM7 init function */
  652. static void MX_TIM7_Init(void)
  653. {

  654.   TIM_MasterConfigTypeDef sMasterConfig;

  655.   htim7.Instance = TIM7;
  656.   htim7.Init.Prescaler = 35999;
  657.   htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
  658.   htim7.Init.Period = 10000;
  659.   if (HAL_TIM_Base_Init(&htim7) != HAL_OK)
  660.   {
  661.     _Error_Handler(__FILE__, __LINE__);
  662.   }

  663.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  664.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  665.   if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK)
  666.   {
  667.     _Error_Handler(__FILE__, __LINE__);
  668.   }

  669. }

  670. /* TIM16 init function */
  671. static void MX_TIM16_Init(void)
  672. {

  673.   TIM_OC_InitTypeDef sConfigOC;
  674.   TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig;

  675.   htim16.Instance = TIM16;
  676.   htim16.Init.Prescaler = 719;
  677.   htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
  678.   htim16.Init.Period = 500;
  679.   htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  680.   htim16.Init.RepetitionCounter = 0;
  681.   if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
  682.   {
  683.     _Error_Handler(__FILE__, __LINE__);
  684.   }

  685.   if (HAL_TIM_PWM_Init(&htim16) != HAL_OK)
  686.   {
  687.     _Error_Handler(__FILE__, __LINE__);
  688.   }

  689.   sConfigOC.OCMode = TIM_OCMODE_PWM1;
  690.   sConfigOC.Pulse = 250;
  691.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  692.   sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
  693.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  694.   sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
  695.   sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
  696.   if (HAL_TIM_PWM_ConfigChannel(&htim16, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  697.   {
  698.     _Error_Handler(__FILE__, __LINE__);
  699.   }

  700.   sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
  701.   sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
  702.   sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
  703.   sBreakDeadTimeConfig.DeadTime = 0;
  704.   sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
  705.   sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
  706.   sBreakDeadTimeConfig.BreakFilter = 0;
  707.   sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
  708.   if (HAL_TIMEx_ConfigBreakDeadTime(&htim16, &sBreakDeadTimeConfig) != HAL_OK)
  709.   {
  710.     _Error_Handler(__FILE__, __LINE__);
  711.   }

  712.   HAL_TIM_MspPostInit(&htim16);

  713. }

  714. /* UART4 init function */
  715. static void MX_UART4_Init(void)
  716. {

  717.   huart4.Instance = UART4;
  718.   huart4.Init.BaudRate = 115200;
  719.   huart4.Init.WordLength = UART_WORDLENGTH_8B;
  720.   huart4.Init.StopBits = UART_STOPBITS_1;
  721.   huart4.Init.Parity = UART_PARITY_NONE;
  722.   huart4.Init.Mode = UART_MODE_TX_RX;
  723.   huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  724.   huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  725.   huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  726.   huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
  727.   huart4.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
  728.   huart4.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
  729.   if (HAL_UART_Init(&huart4) != HAL_OK)
  730.   {
  731.     _Error_Handler(__FILE__, __LINE__);
  732.   }

  733. }

  734. /* USART3 init function */
  735. static void MX_USART3_UART_Init(void)
  736. {

  737.   huart3.Instance = USART3;
  738.   huart3.Init.BaudRate = 38400;
  739.   huart3.Init.WordLength = UART_WORDLENGTH_8B;
  740.   huart3.Init.StopBits = UART_STOPBITS_1;
  741.   huart3.Init.Parity = UART_PARITY_NONE;
  742.   huart3.Init.Mode = UART_MODE_TX_RX;
  743.   huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  744.   huart3.Init.OverSampling = UART_OVERSAMPLING_16;
  745.   huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  746.   huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
  747.   huart3.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
  748.   huart3.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
  749.   if (HAL_UART_Init(&huart3) != HAL_OK)
  750.   {
  751.     _Error_Handler(__FILE__, __LINE__);
  752.   }

  753. }

  754. /**
  755.   * Enable DMA controller clock
  756.   */
  757. static void MX_DMA_Init(void)
  758. {
  759.   /* DMA controller clock enable */
  760.   __HAL_RCC_DMA2_CLK_ENABLE();
  761.   __HAL_RCC_DMA1_CLK_ENABLE();

  762.   /* DMA interrupt init */
  763.   /* DMA1_Channel1_IRQn interrupt configuration */
  764.   HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 5, 0);
  765.   HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
  766.   /* DMA1_Channel3_IRQn interrupt configuration */
  767.   HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 5, 0);
  768.   HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
  769.   /* DMA2_Channel3_IRQn interrupt configuration */
  770.   HAL_NVIC_SetPriority(DMA2_Channel3_IRQn, 0, 0);
  771.   HAL_NVIC_EnableIRQ(DMA2_Channel3_IRQn);

  772. }
  773. /* FMC initialization function */
  774. static void MX_FMC_Init(void)
  775. {
  776.   FMC_NORSRAM_TimingTypeDef Timing;

  777.   /** Perform the SRAM1 memory initialization sequence
  778.   */
  779.   hsram1.Instance = FMC_NORSRAM_DEVICE;
  780.   hsram1.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  781.   /* hsram1.Init */
  782.   hsram1.Init.NSBank = FMC_NORSRAM_BANK1;
  783.   hsram1.Init.DataAddressMux = FMC_DATA_ADDRESS_MUX_DISABLE;
  784.   hsram1.Init.MemoryType = FMC_MEMORY_TYPE_SRAM;
  785.   hsram1.Init.MemoryDataWidth = FMC_NORSRAM_MEM_BUS_WIDTH_16;
  786.   hsram1.Init.BurstAccessMode = FMC_BURST_ACCESS_MODE_DISABLE;
  787.   hsram1.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  788.   hsram1.Init.WaitSignalActive = FMC_WAIT_TIMING_BEFORE_WS;
  789.   hsram1.Init.WriteOperation = FMC_WRITE_OPERATION_ENABLE;
  790.   hsram1.Init.WaitSignal = FMC_WAIT_SIGNAL_DISABLE;
  791.   hsram1.Init.ExtendedMode = FMC_EXTENDED_MODE_DISABLE;
  792.   hsram1.Init.AsynchronousWait = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  793.   hsram1.Init.WriteBurst = FMC_WRITE_BURST_DISABLE;
  794.   hsram1.Init.ContinuousClock = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;
  795.   hsram1.Init.PageSize = FMC_PAGE_SIZE_NONE;
  796.   /* Timing */
  797.   Timing.AddressSetupTime = 1;
  798.   Timing.AddressHoldTime = 15;
  799.   Timing.DataSetupTime = 1;
  800.   Timing.BusTurnAroundDuration = 1;
  801.   Timing.CLKDivision = 16;
  802.   Timing.DataLatency = 17;
  803.   Timing.AccessMode = FMC_ACCESS_MODE_A;
  804.   /* ExtTiming */

  805.   if (HAL_SRAM_Init(&hsram1, &Timing, NULL) != HAL_OK)
  806.   {
  807.     _Error_Handler(__FILE__, __LINE__);
  808.   }

  809. }

  810. /** Configure pins as
  811.         * Analog
  812.         * Input
  813.         * Output
  814.         * EVENT_OUT
  815.         * EXTI
  816. */
  817. static void MX_GPIO_Init(void)
  818. {

  819.   GPIO_InitTypeDef GPIO_InitStruct;

  820.   /* GPIO Ports Clock Enable */
  821.   __HAL_RCC_GPIOE_CLK_ENABLE();
  822. //  __HAL_RCC_GPIOC_CLK_ENABLE();
  823. //  __HAL_RCC_GPIOH_CLK_ENABLE();
  824. //  __HAL_RCC_GPIOA_CLK_ENABLE();
  825. //  __HAL_RCC_GPIOB_CLK_ENABLE();
  826. //  __HAL_RCC_GPIOD_CLK_ENABLE();

  827. #if 0
  828.   /*Configure GPIO pin Output Level */
  829.   HAL_GPIO_WritePin(GPIOA, PCA_EN_Pin|INTMCUtoBLE_Pin|FLASH_CS_Pin, GPIO_PIN_SET);

  830.   /*Configure GPIO pin Output Level */
  831.   HAL_GPIO_WritePin(GPIOA, TP39_Pin|LED_G_Pin|LED_Y_Pin|LED_R_Pin
  832.                           |VCC5V_EN_Pin, GPIO_PIN_RESET);

  833.   /*Configure GPIO pin Output Level */
  834.   HAL_GPIO_WritePin(MOTOR_WDT_GPIO_Port, MOTOR_WDT_Pin, GPIO_PIN_RESET);

  835.   /*Configure GPIO pin Output Level */
  836.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1|LCD_RST_Pin, GPIO_PIN_SET);

  837.   /*Configure GPIO pin Output Level */
  838.   HAL_GPIO_WritePin(GPIOD, BLE_RSV2_Pin|I2S_1V8_EN_Pin|SYSTEM_POW_EN_Pin|BLE_RESET_Pin, GPIO_PIN_SET);

  839.   /*Configure GPIO pin Output Level */
  840.   HAL_GPIO_WritePin(REFVCC_EN_GPIO_Port, REFVCC_EN_Pin, GPIO_PIN_RESET);

  841.   /*Configure GPIO pin Output Level */
  842.   HAL_GPIO_WritePin(SENSOR_POW_EN_GPIO_Port, SENSOR_POW_EN_Pin, GPIO_PIN_RESET);

  843.   /*Configure GPIO pin Output Level */
  844.   HAL_GPIO_WritePin(BLE_RSV1_GPIO_Port, BLE_RSV1_Pin, GPIO_PIN_SET);

  845. #endif
  846.   //App_PowerManager();  //1.6 uA when enable it
  847.   /*Configure GPIO pins : KEY_1_Pin KEY_2_Pin KEY_3_Pin KEY_4_Pin
  848.                            KEY_5_Pin */
  849.   GPIO_InitStruct.Pin = KEY_1_Pin|KEY_2_Pin|KEY_3_Pin|KEY_4_Pin
  850.                           |KEY_5_Pin;
  851.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  852.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  853.   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  854.   App_PowerManager(); //500 uA

  855.   /*Configure GPIO pins : KEY_7_Pin HAL_LOCK2_Pin */
  856.   GPIO_InitStruct.Pin = KEY_7_Pin|HAL_LOCK2_Pin;
  857.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  858.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  859.   HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  860.   /*Configure GPIO pin : EXT_PHASE_B_Pin */
  861.   GPIO_InitStruct.Pin = EXT_PHASE_B_Pin;
  862.   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  863.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  864.   HAL_GPIO_Init(EXT_PHASE_B_GPIO_Port, &GPIO_InitStruct);

  865.   /*Configure GPIO pins : PCA_EN_Pin INTMCUtoBLE_Pin FLASH_CS_Pin */
  866.   GPIO_InitStruct.Pin = PCA_EN_Pin|INTMCUtoBLE_Pin|FLASH_CS_Pin;
  867.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  868.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  869.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  870.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  871.   /*Configure GPIO pin : TP39_Pin */
  872.   GPIO_InitStruct.Pin = TP39_Pin;
  873.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  874.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  875.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  876.   HAL_GPIO_Init(TP39_GPIO_Port, &GPIO_InitStruct);

  877.   /*Configure GPIO pin : MOTOR_WDT_Pin */
  878.   GPIO_InitStruct.Pin = MOTOR_WDT_Pin;
  879.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  880.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  881.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  882.   HAL_GPIO_Init(MOTOR_WDT_GPIO_Port, &GPIO_InitStruct);

  883.   /*Configure GPIO pin : PB1 */
  884.   GPIO_InitStruct.Pin = GPIO_PIN_1;
  885.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  886.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  887.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  888.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  889.   /*Configure GPIO pin : LCD_RST_Pin */
  890.   GPIO_InitStruct.Pin = LCD_RST_Pin;
  891.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  892.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  893.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  894.   HAL_GPIO_Init(LCD_RST_GPIO_Port, &GPIO_InitStruct);

  895.   /*Configure GPIO pin : EXT_PHASE_Z_Pin */
  896.   GPIO_InitStruct.Pin = EXT_PHASE_Z_Pin;
  897.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  898.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  899.   HAL_GPIO_Init(EXT_PHASE_Z_GPIO_Port, &GPIO_InitStruct);

  900.   /*Configure GPIO pin : BLE_RSV2_Pin */
  901.   GPIO_InitStruct.Pin = BLE_RSV2_Pin;
  902.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  903.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  904.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  905.   HAL_GPIO_Init(BLE_RSV2_GPIO_Port, &GPIO_InitStruct);

  906.   /*Configure GPIO pin : REFVCC_EN_Pin */
  907.   GPIO_InitStruct.Pin = REFVCC_EN_Pin;
  908.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  909.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  910.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  911.   HAL_GPIO_Init(REFVCC_EN_GPIO_Port, &GPIO_InitStruct);

  912.   /*Configure GPIO pin : BLE_INT_TOMCU_Pin */
  913.   GPIO_InitStruct.Pin = BLE_INT_TOMCU_Pin;
  914.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
  915.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  916.   HAL_GPIO_Init(BLE_INT_TOMCU_GPIO_Port, &GPIO_InitStruct);

  917.   /*Configure GPIO pin : SENSOR_POW_EN_Pin */
  918.   GPIO_InitStruct.Pin = SENSOR_POW_EN_Pin;
  919.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  920.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  921.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  922.   HAL_GPIO_Init(SENSOR_POW_EN_GPIO_Port, &GPIO_InitStruct);

  923.   /*Configure GPIO pins : LED_G_Pin LED_Y_Pin LED_R_Pin VCC5V_EN_Pin */
  924.   GPIO_InitStruct.Pin = LED_G_Pin|LED_Y_Pin|LED_R_Pin|VCC5V_EN_Pin;
  925.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  926.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  927.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  928.   HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  929.   /*Configure GPIO pin : PCA_INT_Pin */
  930.   GPIO_InitStruct.Pin = PCA_INT_Pin;
  931.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  932.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  933.   HAL_GPIO_Init(PCA_INT_GPIO_Port, &GPIO_InitStruct);

  934.   /*Configure GPIO pin : MOTOR_ENCODE1_Pin */
  935.   GPIO_InitStruct.Pin = MOTOR_ENCODE1_Pin;
  936.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  937.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  938.   HAL_GPIO_Init(MOTOR_ENCODE1_GPIO_Port, &GPIO_InitStruct);

  939.   /*Configure GPIO pins : I2S_1V8_EN_Pin SYSTEM_POW_EN_Pin */
  940.   GPIO_InitStruct.Pin = I2S_1V8_EN_Pin|SYSTEM_POW_EN_Pin;
  941.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  942.   GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  943.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  944.   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  945.   /*Configure GPIO pin : BLE_RESET_Pin */
  946.   GPIO_InitStruct.Pin = BLE_RESET_Pin;
  947.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  948.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  949.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  950.   HAL_GPIO_Init(BLE_RESET_GPIO_Port, &GPIO_InitStruct);

  951.   /*Configure GPIO pin : KEY_6_Pin */
  952.   GPIO_InitStruct.Pin = KEY_6_Pin;
  953.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  954.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  955.   HAL_GPIO_Init(KEY_6_GPIO_Port, &GPIO_InitStruct);

  956.   /*Configure GPIO pin : MOTOR_ENCODE2_Pin */
  957.   GPIO_InitStruct.Pin = MOTOR_ENCODE2_Pin;
  958.   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING;
  959.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  960.   HAL_GPIO_Init(MOTOR_ENCODE2_GPIO_Port, &GPIO_InitStruct);

  961.   /*Configure GPIO pin : BLE_RSV1_Pin */
  962.   GPIO_InitStruct.Pin = BLE_RSV1_Pin;
  963.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
  964.   GPIO_InitStruct.Pull = GPIO_PULLUP;
  965.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  966.   HAL_GPIO_Init(BLE_RSV1_GPIO_Port, &GPIO_InitStruct);

  967.   /* EXTI interrupt init*/
  968.   HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0);
  969.   HAL_NVIC_EnableIRQ(EXTI0_IRQn);

  970.   HAL_NVIC_SetPriority(EXTI2_IRQn, 5, 0);
  971.   HAL_NVIC_EnableIRQ(EXTI2_IRQn);

  972.   HAL_NVIC_SetPriority(EXTI3_IRQn, 5, 0);
  973.   HAL_NVIC_EnableIRQ(EXTI3_IRQn);

  974.   HAL_NVIC_SetPriority(EXTI4_IRQn, 5, 0);
  975.   HAL_NVIC_EnableIRQ(EXTI4_IRQn);

  976.   HAL_NVIC_SetPriority(EXTI9_5_IRQn, 5, 0);
  977.   HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);

  978.   HAL_NVIC_SetPriority(EXTI15_10_IRQn, 5, 0);
  979.   HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);

  980. }

  981. /* USER CODE BEGIN 4 */

  982. /* USER CODE END 4 */

  983. /* StartDefaultTask function */
  984. void StartDefaultTask(void const * argument)
  985. {

  986.   /* USER CODE BEGIN 5 */
  987.   /* Infinite loop */
  988.   for(;;)
  989.   {
  990.     osDelay(1);
  991.   }
  992.   /* USER CODE END 5 */
  993. }

  994. /**
  995.   * @brief  Period elapsed callback in non blocking mode
  996.   * @note   This function is called  when TIM17 interrupt took place, inside
  997.   * HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment
  998.   * a global variable "uwTick" used as application time base.
  999.   * @param  htim : TIM handle
  1000.   * @retval None
  1001.   */
  1002. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  1003. {
  1004. /* USER CODE BEGIN Callback 0 */
  1005.         HAL_TIM_PeriodElapsedCallbackMy(htim);
  1006. /* USER CODE END Callback 0 */
  1007.   if (htim->Instance == TIM17) {
  1008.     HAL_IncTick();
  1009.   }
  1010. /* USER CODE BEGIN Callback 1 */

  1011. /* USER CODE END Callback 1 */
  1012. }

  1013. /**
  1014.   * @brief  This function is executed in case of error occurrence.
  1015.   * @param  None
  1016.   * @retval None
  1017.   */
  1018. void _Error_Handler(char * file, int line)
  1019. {
  1020.   /* USER CODE BEGIN Error_Handler_Debug */
  1021.   /* User can add his own implementation to report the HAL error return state */
  1022.   while(1)
  1023.   {
  1024.   }
  1025.   /* USER CODE END Error_Handler_Debug */
  1026. }

  1027. #ifdef USE_FULL_ASSERT

  1028. /**
  1029.    * @brief Reports the name of the source file and the source line number
  1030.    * where the assert_param error has occurred.
  1031.    * @param file: pointer to the source file name
  1032.    * @param line: assert_param error line source number
  1033.    * @retval None
  1034.    */
  1035. void assert_failed(uint8_t* file, uint32_t line)
  1036. {
  1037.   /* USER CODE BEGIN 6 */
  1038.   /* User can add his own implementation to report the file name and line number,
  1039.     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  1040.   /* USER CODE END 6 */

  1041. }

  1042. #endif

  1043. /**
  1044.   * @}
  1045.   */

  1046. /**
  1047.   * @}
  1048. */

  1049. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
复制代码


点评

这个长的代码,楼主可以用附件啊  发表于 2018-2-5 10:33
收藏 评论4 发布时间:2017-9-21 15:57

举报

4个回答
废鱼 回答时间:2017-9-21 16:12:56
不正常,楼主要根据外部电路进行IO配置。比如外部上拉,就用输入上拉。
wang7885 回答时间:2017-9-21 16:23:38
本帖最后由 wang7885 于 2017-9-21 17:16 编辑
安 发表于 2017-9-21 16:12
不正常,楼主要根据外部电路进行IO配置。比如外部上拉,就用输入上拉。

感谢回复!图片是相关引脚的原理图,本意是想让按键触发外部中断来唤醒,配置代码是Cube 生成的。
现象是管脚配置成了中断模式后,功耗增加了许多。
废鱼 回答时间:2017-9-21 16:52:46
不光要考虑中断,其他的引脚也是类似问题。都需要进行对应配置。还有注意悬空的时候,也会有漏电。我一般设置为输出低。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版