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

关于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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版