<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=STM32_HAL</id>
	<title>STM32 HAL - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=STM32_HAL"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=STM32_HAL&amp;action=history"/>
	<updated>2026-06-04T09:31:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=STM32_HAL&amp;diff=33035&amp;oldid=prev</id>
		<title>Chao: Replaced content with &quot;https://w2.electrodragon.com/gollum/search?q=STM32-SDK-HAL-dat.md&quot;</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=STM32_HAL&amp;diff=33035&amp;oldid=prev"/>
		<updated>2024-07-05T10:03:05Z</updated>

		<summary type="html">&lt;p&gt;Replaced content with &amp;quot;https://w2.electrodragon.com/gollum/search?q=STM32-SDK-HAL-dat.md&amp;quot;&lt;/p&gt;
&lt;a href=&quot;//w.electrodragon.com/w/index.php?title=STM32_HAL&amp;amp;diff=33035&amp;amp;oldid=31200&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=STM32_HAL&amp;diff=31200&amp;oldid=prev</id>
		<title>Chao: /* MDK-ARM Setup by STM32CubeMx */</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=STM32_HAL&amp;diff=31200&amp;oldid=prev"/>
		<updated>2021-05-18T06:30:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;MDK-ARM Setup by STM32CubeMx&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Main ==&lt;br /&gt;
=== Vaiables ===&lt;br /&gt;
 /* Private variables ---------------------------------------------------------*/&lt;br /&gt;
 ADC_HandleTypeDef hadc;&lt;br /&gt;
 &lt;br /&gt;
 I2C_HandleTypeDef hi2c1;&lt;br /&gt;
 I2C_HandleTypeDef hi2c2;&lt;br /&gt;
 &lt;br /&gt;
 SPI_HandleTypeDef hspi1;&lt;br /&gt;
 SPI_HandleTypeDef hspi2; &lt;br /&gt;
 &lt;br /&gt;
 UART_HandleTypeDef huart1;&lt;br /&gt;
 UART_HandleTypeDef huart2;&lt;br /&gt;
&lt;br /&gt;
=== Prototype ===&lt;br /&gt;
 /* Private function prototypes -----------------------------------------------*/&lt;br /&gt;
 void SystemClock_Config(void);&lt;br /&gt;
 static void MX_GPIO_Init(void);&lt;br /&gt;
 static void MX_ADC_Init(void);&lt;br /&gt;
 static void MX_I2C1_Init(void);&lt;br /&gt;
 static void MX_I2C2_Init(void);&lt;br /&gt;
 static void MX_SPI1_Init(void);&lt;br /&gt;
 static void MX_SPI2_Init(void);&lt;br /&gt;
 static void MX_USART1_UART_Init(void);&lt;br /&gt;
 static void MX_USART2_UART_Init(void);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Main Init ===&lt;br /&gt;
  MX_GPIO_Init();&lt;br /&gt;
  MX_ADC_Init();&lt;br /&gt;
  MX_I2C1_Init();&lt;br /&gt;
  MX_I2C2_Init();&lt;br /&gt;
  MX_SPI1_Init();&lt;br /&gt;
  MX_SPI2_Init();&lt;br /&gt;
  MX_USART1_UART_Init();&lt;br /&gt;
  MX_USART2_UART_Init();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Clock RCC ===&lt;br /&gt;
&lt;br /&gt;
 void SystemClock_Config(void)&lt;br /&gt;
 {&lt;br /&gt;
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};&lt;br /&gt;
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};&lt;br /&gt;
  RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};&lt;br /&gt;
&lt;br /&gt;
  /** Initializes the CPU, AHB and APB busses clocks &lt;br /&gt;
  */&lt;br /&gt;
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSI14;&lt;br /&gt;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;&lt;br /&gt;
  RCC_OscInitStruct.HSI14State = RCC_HSI14_ON;&lt;br /&gt;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;&lt;br /&gt;
  RCC_OscInitStruct.HSI14CalibrationValue = 16;&lt;br /&gt;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;&lt;br /&gt;
  if (HAL_RCC_OscConfig(&amp;amp;RCC_OscInitStruct) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Initializes the CPU, AHB and APB busses clocks &lt;br /&gt;
  */&lt;br /&gt;
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK&lt;br /&gt;
                              |RCC_CLOCKTYPE_PCLK1;&lt;br /&gt;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;&lt;br /&gt;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;&lt;br /&gt;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;&lt;br /&gt;
&lt;br /&gt;
  if (HAL_RCC_ClockConfig(&amp;amp;RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_I2C1;&lt;br /&gt;
  PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;&lt;br /&gt;
  PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI;&lt;br /&gt;
  if (HAL_RCCEx_PeriphCLKConfig(&amp;amp;PeriphClkInit) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== ADC ===&lt;br /&gt;
 static void MX_ADC_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN ADC_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END ADC_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  ADC_ChannelConfTypeDef sConfig = {0};&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN ADC_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END ADC_Init 1 */&lt;br /&gt;
  /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) &lt;br /&gt;
  */&lt;br /&gt;
  hadc.Instance = ADC1;&lt;br /&gt;
  hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;&lt;br /&gt;
  hadc.Init.Resolution = ADC_RESOLUTION_12B;&lt;br /&gt;
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;&lt;br /&gt;
  hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD;&lt;br /&gt;
  hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV;&lt;br /&gt;
  hadc.Init.LowPowerAutoWait = DISABLE;&lt;br /&gt;
  hadc.Init.LowPowerAutoPowerOff = DISABLE;&lt;br /&gt;
  hadc.Init.ContinuousConvMode = DISABLE;&lt;br /&gt;
  hadc.Init.DiscontinuousConvMode = DISABLE;&lt;br /&gt;
  hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;&lt;br /&gt;
  hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;&lt;br /&gt;
  hadc.Init.DMAContinuousRequests = DISABLE;&lt;br /&gt;
  hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED;&lt;br /&gt;
  if (HAL_ADC_Init(&amp;amp;hadc) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Configure for the selected ADC regular channel to be converted. &lt;br /&gt;
  */&lt;br /&gt;
  sConfig.Channel = ADC_CHANNEL_8;&lt;br /&gt;
  sConfig.Rank = ADC_RANK_CHANNEL_NUMBER;&lt;br /&gt;
  sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;&lt;br /&gt;
  if (HAL_ADC_ConfigChannel(&amp;amp;hadc, &amp;amp;sConfig) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN ADC_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END ADC_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== I2C ===&lt;br /&gt;
 &lt;br /&gt;
 /**&lt;br /&gt;
  * @brief I2C1 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_I2C1_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN I2C1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN I2C1_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C1_Init 1 */&lt;br /&gt;
  hi2c1.Instance = I2C1;&lt;br /&gt;
  hi2c1.Init.Timing = 0x2000090E;&lt;br /&gt;
  hi2c1.Init.OwnAddress1 = 0;&lt;br /&gt;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;&lt;br /&gt;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;&lt;br /&gt;
  hi2c1.Init.OwnAddress2 = 0;&lt;br /&gt;
  hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;&lt;br /&gt;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;&lt;br /&gt;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;&lt;br /&gt;
  if (HAL_I2C_Init(&amp;amp;hi2c1) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Configure Analogue filter &lt;br /&gt;
  */&lt;br /&gt;
  if (HAL_I2CEx_ConfigAnalogFilter(&amp;amp;hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Configure Digital filter &lt;br /&gt;
  */&lt;br /&gt;
  if (HAL_I2CEx_ConfigDigitalFilter(&amp;amp;hi2c1, 0) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN I2C1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief I2C2 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_I2C2_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN I2C2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN I2C2_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C2_Init 1 */&lt;br /&gt;
  hi2c2.Instance = I2C2;&lt;br /&gt;
  hi2c2.Init.Timing = 0x2000090E;&lt;br /&gt;
  hi2c2.Init.OwnAddress1 = 0;&lt;br /&gt;
  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;&lt;br /&gt;
  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;&lt;br /&gt;
  hi2c2.Init.OwnAddress2 = 0;&lt;br /&gt;
  hi2c2.Init.OwnAddress2Masks = I2C_OA2_NOMASK;&lt;br /&gt;
  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;&lt;br /&gt;
  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;&lt;br /&gt;
  if (HAL_I2C_Init(&amp;amp;hi2c2) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Configure Analogue filter &lt;br /&gt;
  */&lt;br /&gt;
  if (HAL_I2CEx_ConfigAnalogFilter(&amp;amp;hi2c2, I2C_ANALOGFILTER_ENABLE) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /** Configure Digital filter &lt;br /&gt;
  */&lt;br /&gt;
  if (HAL_I2CEx_ConfigDigitalFilter(&amp;amp;hi2c2, 0) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN I2C2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
=== SPI ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief SPI1 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_SPI1_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN SPI1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN SPI1_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI1_Init 1 */&lt;br /&gt;
  /* SPI1 parameter configuration*/&lt;br /&gt;
  hspi1.Instance = SPI1;&lt;br /&gt;
  hspi1.Init.Mode = SPI_MODE_MASTER;&lt;br /&gt;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;&lt;br /&gt;
  hspi1.Init.DataSize = SPI_DATASIZE_4BIT;&lt;br /&gt;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;&lt;br /&gt;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;&lt;br /&gt;
  hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;&lt;br /&gt;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;&lt;br /&gt;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;&lt;br /&gt;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;&lt;br /&gt;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;&lt;br /&gt;
  hspi1.Init.CRCPolynomial = 7;&lt;br /&gt;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;&lt;br /&gt;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;&lt;br /&gt;
  if (HAL_SPI_Init(&amp;amp;hspi1) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN SPI1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief SPI2 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_SPI2_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN SPI2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN SPI2_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI2_Init 1 */&lt;br /&gt;
  /* SPI2 parameter configuration*/&lt;br /&gt;
  hspi2.Instance = SPI2;&lt;br /&gt;
  hspi2.Init.Mode = SPI_MODE_SLAVE;&lt;br /&gt;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;&lt;br /&gt;
  hspi2.Init.DataSize = SPI_DATASIZE_4BIT;&lt;br /&gt;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;&lt;br /&gt;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;&lt;br /&gt;
  hspi2.Init.NSS = SPI_NSS_HARD_INPUT;&lt;br /&gt;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;&lt;br /&gt;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;&lt;br /&gt;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;&lt;br /&gt;
  hspi2.Init.CRCPolynomial = 7;&lt;br /&gt;
  hspi2.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;&lt;br /&gt;
  hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;&lt;br /&gt;
  if (HAL_SPI_Init(&amp;amp;hspi2) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN SPI2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END SPI2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== USART ===&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief USART1 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_USART1_UART_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN USART1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART1_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN USART1_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART1_Init 1 */&lt;br /&gt;
  huart1.Instance = USART1;&lt;br /&gt;
  huart1.Init.BaudRate = 9600;&lt;br /&gt;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;&lt;br /&gt;
  huart1.Init.StopBits = UART_STOPBITS_1;&lt;br /&gt;
  huart1.Init.Parity = UART_PARITY_NONE;&lt;br /&gt;
  huart1.Init.Mode = UART_MODE_TX_RX;&lt;br /&gt;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;&lt;br /&gt;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;&lt;br /&gt;
  huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;&lt;br /&gt;
  huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;&lt;br /&gt;
  if (HAL_UART_Init(&amp;amp;huart1) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN USART1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART1_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief USART2 Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_USART2_UART_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN USART2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART2_Init 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE BEGIN USART2_Init 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART2_Init 1 */&lt;br /&gt;
  huart2.Instance = USART2;&lt;br /&gt;
  huart2.Init.BaudRate = 115200;&lt;br /&gt;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;&lt;br /&gt;
  huart2.Init.StopBits = UART_STOPBITS_1;&lt;br /&gt;
  huart2.Init.Parity = UART_PARITY_NONE;&lt;br /&gt;
  huart2.Init.Mode = UART_MODE_TX_RX;&lt;br /&gt;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;&lt;br /&gt;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;&lt;br /&gt;
  huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;&lt;br /&gt;
  huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;&lt;br /&gt;
  if (HAL_UART_Init(&amp;amp;huart2) != HAL_OK)&lt;br /&gt;
  {&lt;br /&gt;
    Error_Handler();&lt;br /&gt;
  }&lt;br /&gt;
  /* USER CODE BEGIN USART2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END USART2_Init 2 */&lt;br /&gt;
&lt;br /&gt;
 } &lt;br /&gt;
=== GPIO ===&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
  * @brief GPIO Initialization Function&lt;br /&gt;
  * @param None&lt;br /&gt;
  * @retval None&lt;br /&gt;
  */&lt;br /&gt;
 static void MX_GPIO_Init(void)&lt;br /&gt;
 {&lt;br /&gt;
  GPIO_InitTypeDef GPIO_InitStruct = {0};&lt;br /&gt;
&lt;br /&gt;
  /* GPIO Ports Clock Enable */&lt;br /&gt;
  __HAL_RCC_GPIOA_CLK_ENABLE();&lt;br /&gt;
  __HAL_RCC_GPIOB_CLK_ENABLE();&lt;br /&gt;
&lt;br /&gt;
  /*Configure GPIO pin Output Level */&lt;br /&gt;
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);&lt;br /&gt;
&lt;br /&gt;
  /*Configure GPIO pin : PB1 */&lt;br /&gt;
  GPIO_InitStruct.Pin = GPIO_PIN_1;&lt;br /&gt;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;&lt;br /&gt;
  GPIO_InitStruct.Pull = GPIO_NOPULL;&lt;br /&gt;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;&lt;br /&gt;
  HAL_GPIO_Init(GPIOB, &amp;amp;GPIO_InitStruct);&lt;br /&gt;
&lt;br /&gt;
  /*Configure GPIO pin : PB2 */&lt;br /&gt;
  GPIO_InitStruct.Pin = GPIO_PIN_2;&lt;br /&gt;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;&lt;br /&gt;
  GPIO_InitStruct.Pull = GPIO_NOPULL;&lt;br /&gt;
  HAL_GPIO_Init(GPIOB, &amp;amp;GPIO_InitStruct);&lt;br /&gt;
&lt;br /&gt;
  /*Configure GPIO pin : PA8 */&lt;br /&gt;
  GPIO_InitStruct.Pin = GPIO_PIN_8;&lt;br /&gt;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;&lt;br /&gt;
  GPIO_InitStruct.Pull = GPIO_NOPULL;&lt;br /&gt;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;&lt;br /&gt;
  GPIO_InitStruct.Alternate = GPIO_AF2_TIM1;&lt;br /&gt;
  HAL_GPIO_Init(GPIOA, &amp;amp;GPIO_InitStruct);&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== stm32f0xx_hal_msp.c ==&lt;br /&gt;
=== void HAL_I2C_MspInit ===&lt;br /&gt;
 void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c)&lt;br /&gt;
 {&lt;br /&gt;
  GPIO_InitTypeDef GPIO_InitStruct = {0};&lt;br /&gt;
  if(hi2c-&amp;gt;Instance==I2C1)&lt;br /&gt;
  {&lt;br /&gt;
  /* USER CODE BEGIN I2C1_MspInit 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C1_MspInit 0 */&lt;br /&gt;
  &lt;br /&gt;
    __HAL_RCC_GPIOB_CLK_ENABLE();&lt;br /&gt;
    /**I2C1 GPIO Configuration    &lt;br /&gt;
    PB7     ------&amp;gt; I2C1_SDA&lt;br /&gt;
    PB8     ------&amp;gt; I2C1_SCL &lt;br /&gt;
    */&lt;br /&gt;
    GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_8;&lt;br /&gt;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;&lt;br /&gt;
    GPIO_InitStruct.Pull = GPIO_PULLUP;&lt;br /&gt;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;&lt;br /&gt;
    GPIO_InitStruct.Alternate = GPIO_AF1_I2C1;&lt;br /&gt;
    HAL_GPIO_Init(GPIOB, &amp;amp;GPIO_InitStruct);&lt;br /&gt;
&lt;br /&gt;
    /* Peripheral clock enable */&lt;br /&gt;
    __HAL_RCC_I2C1_CLK_ENABLE();&lt;br /&gt;
  /* USER CODE BEGIN I2C1_MspInit 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C1_MspInit 1 */&lt;br /&gt;
  }&lt;br /&gt;
  else if(hi2c-&amp;gt;Instance==I2C2)&lt;br /&gt;
  {&lt;br /&gt;
  /* USER CODE BEGIN I2C2_MspInit 0 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C2_MspInit 0 */&lt;br /&gt;
  &lt;br /&gt;
    __HAL_RCC_GPIOB_CLK_ENABLE();&lt;br /&gt;
    /**I2C2 GPIO Configuration    &lt;br /&gt;
    PB10     ------&amp;gt; I2C2_SCL&lt;br /&gt;
    PB11     ------&amp;gt; I2C2_SDA &lt;br /&gt;
    */&lt;br /&gt;
    GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;&lt;br /&gt;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;&lt;br /&gt;
    GPIO_InitStruct.Pull = GPIO_PULLUP;&lt;br /&gt;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;&lt;br /&gt;
    GPIO_InitStruct.Alternate = GPIO_AF1_I2C2;&lt;br /&gt;
    HAL_GPIO_Init(GPIOB, &amp;amp;GPIO_InitStruct);&lt;br /&gt;
&lt;br /&gt;
    /* Peripheral clock enable */&lt;br /&gt;
    __HAL_RCC_I2C2_CLK_ENABLE();&lt;br /&gt;
  /* USER CODE BEGIN I2C2_MspInit 1 */&lt;br /&gt;
&lt;br /&gt;
  /* USER CODE END I2C2_MspInit 1 */&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== USART ==&lt;br /&gt;
=== Setup ===&lt;br /&gt;
* Global interrupt&lt;br /&gt;
* DMA on TX / channel 4 / priority high&lt;br /&gt;
&lt;br /&gt;
=== Use DMA ===&lt;br /&gt;
 HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IIC ==&lt;br /&gt;
 HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)&lt;br /&gt;
&lt;br /&gt;
 HAL_I2C_Mem_Write(&amp;amp;hi2c1,0xA0,100,I2C_MEMADD_SIZE_16BIT,i2cWriteBuf,10,10)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MDK-ARM Setup by STM32CubeMx ==&lt;br /&gt;
* Install MDK-ARM lastest version&lt;br /&gt;
* Install software pack for platform, for example STM32F030xxx&lt;br /&gt;
* Install STM32Cube&lt;br /&gt;
* Follow the following animation, open to watch&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Stm32_quick_build_for_blink.gif | Quick blink IO &lt;br /&gt;
File:Upload_code_STM32.gif | Upload code to board use MDK-ARM or ST-Utility&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Code add this two lines for blinking IO in user code 1 area:&lt;br /&gt;
 HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);               &lt;br /&gt;
 HAL_Delay(1000);&lt;br /&gt;
&lt;br /&gt;
 HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);&lt;br /&gt;
 HAL_Delay(1000);&lt;br /&gt;
&lt;br /&gt;
=== Note ===&lt;br /&gt;
* Default frequency is 8Mhz&lt;br /&gt;
* Choose to output hex compilied file.&lt;br /&gt;
* In STM32Cube, only copy necessary files, otherwise will be very big project folder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: STM32 SDK]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>