xref: /aosp_15_r20/external/ms-tpm-20-ref/Samples/Nucleo-TPM/L4A6RG/Src/main.c (revision 5c591343844d1f9da7da26467c4bf7efc8a7a413)
1*5c591343SA. Cody Schuffelen 
2*5c591343SA. Cody Schuffelen /**
3*5c591343SA. Cody Schuffelen   ******************************************************************************
4*5c591343SA. Cody Schuffelen   * @file           : main.c
5*5c591343SA. Cody Schuffelen   * @brief          : Main program body
6*5c591343SA. Cody Schuffelen   ******************************************************************************
7*5c591343SA. Cody Schuffelen   * This notice applies to any and all portions of this file
8*5c591343SA. Cody Schuffelen   * that are not between comment pairs USER CODE BEGIN and
9*5c591343SA. Cody Schuffelen   * USER CODE END. Other portions of this file, whether
10*5c591343SA. Cody Schuffelen   * inserted by the user or by software development tools
11*5c591343SA. Cody Schuffelen   * are owned by their respective copyright owners.
12*5c591343SA. Cody Schuffelen   *
13*5c591343SA. Cody Schuffelen   * Copyright (c) 2018 STMicroelectronics International N.V.
14*5c591343SA. Cody Schuffelen   * All rights reserved.
15*5c591343SA. Cody Schuffelen   *
16*5c591343SA. Cody Schuffelen   * Redistribution and use in source and binary forms, with or without
17*5c591343SA. Cody Schuffelen   * modification, are permitted, provided that the following conditions are met:
18*5c591343SA. Cody Schuffelen   *
19*5c591343SA. Cody Schuffelen   * 1. Redistribution of source code must retain the above copyright notice,
20*5c591343SA. Cody Schuffelen   *    this list of conditions and the following disclaimer.
21*5c591343SA. Cody Schuffelen   * 2. Redistributions in binary form must reproduce the above copyright notice,
22*5c591343SA. Cody Schuffelen   *    this list of conditions and the following disclaimer in the documentation
23*5c591343SA. Cody Schuffelen   *    and/or other materials provided with the distribution.
24*5c591343SA. Cody Schuffelen   * 3. Neither the name of STMicroelectronics nor the names of other
25*5c591343SA. Cody Schuffelen   *    contributors to this software may be used to endorse or promote products
26*5c591343SA. Cody Schuffelen   *    derived from this software without specific written permission.
27*5c591343SA. Cody Schuffelen   * 4. This software, including modifications and/or derivative works of this
28*5c591343SA. Cody Schuffelen   *    software, must execute solely and exclusively on microcontroller or
29*5c591343SA. Cody Schuffelen   *    microprocessor devices manufactured by or for STMicroelectronics.
30*5c591343SA. Cody Schuffelen   * 5. Redistribution and use of this software other than as permitted under
31*5c591343SA. Cody Schuffelen   *    this license is void and will automatically terminate your rights under
32*5c591343SA. Cody Schuffelen   *    this license.
33*5c591343SA. Cody Schuffelen   *
34*5c591343SA. Cody Schuffelen   * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
35*5c591343SA. Cody Schuffelen   * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
36*5c591343SA. Cody Schuffelen   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
37*5c591343SA. Cody Schuffelen   * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
38*5c591343SA. Cody Schuffelen   * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
39*5c591343SA. Cody Schuffelen   * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
40*5c591343SA. Cody Schuffelen   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41*5c591343SA. Cody Schuffelen   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
42*5c591343SA. Cody Schuffelen   * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
43*5c591343SA. Cody Schuffelen   * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
44*5c591343SA. Cody Schuffelen   * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
45*5c591343SA. Cody Schuffelen   * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
46*5c591343SA. Cody Schuffelen   *
47*5c591343SA. Cody Schuffelen   ******************************************************************************
48*5c591343SA. Cody Schuffelen   */
49*5c591343SA. Cody Schuffelen /* Includes ------------------------------------------------------------------*/
50*5c591343SA. Cody Schuffelen #include "main.h"
51*5c591343SA. Cody Schuffelen #include "stm32l4xx_hal.h"
52*5c591343SA. Cody Schuffelen #include "usb_device.h"
53*5c591343SA. Cody Schuffelen 
54*5c591343SA. Cody Schuffelen /* USER CODE BEGIN Includes */
55*5c591343SA. Cody Schuffelen #include <stdint.h>
56*5c591343SA. Cody Schuffelen #include <stdbool.h>
57*5c591343SA. Cody Schuffelen #include <time.h>
58*5c591343SA. Cody Schuffelen #include "TpmDevice.h"
59*5c591343SA. Cody Schuffelen #include "StmUtil.h"
60*5c591343SA. Cody Schuffelen 
61*5c591343SA. Cody Schuffelen /* USER CODE END Includes */
62*5c591343SA. Cody Schuffelen 
63*5c591343SA. Cody Schuffelen /* Private variables ---------------------------------------------------------*/
64*5c591343SA. Cody Schuffelen RNG_HandleTypeDef hrng;
65*5c591343SA. Cody Schuffelen 
66*5c591343SA. Cody Schuffelen RTC_HandleTypeDef hrtc;
67*5c591343SA. Cody Schuffelen 
68*5c591343SA. Cody Schuffelen UART_HandleTypeDef huart2;
69*5c591343SA. Cody Schuffelen 
70*5c591343SA. Cody Schuffelen /* USER CODE BEGIN PV */
71*5c591343SA. Cody Schuffelen /* Private variables ---------------------------------------------------------*/
72*5c591343SA. Cody Schuffelen 
73*5c591343SA. Cody Schuffelen /* USER CODE END PV */
74*5c591343SA. Cody Schuffelen 
75*5c591343SA. Cody Schuffelen /* Private function prototypes -----------------------------------------------*/
76*5c591343SA. Cody Schuffelen void SystemClock_Config(void);
77*5c591343SA. Cody Schuffelen static void MX_GPIO_Init(void);
78*5c591343SA. Cody Schuffelen static void MX_USART2_UART_Init(void);
79*5c591343SA. Cody Schuffelen static void MX_RTC_Init(void);
80*5c591343SA. Cody Schuffelen static void MX_RNG_Init(void);
81*5c591343SA. Cody Schuffelen 
82*5c591343SA. Cody Schuffelen /* USER CODE BEGIN PFP */
83*5c591343SA. Cody Schuffelen /* Private function prototypes -----------------------------------------------*/
84*5c591343SA. Cody Schuffelen 
85*5c591343SA. Cody Schuffelen /* USER CODE END PFP */
86*5c591343SA. Cody Schuffelen 
87*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 0 */
88*5c591343SA. Cody Schuffelen 
89*5c591343SA. Cody Schuffelen /* USER CODE END 0 */
90*5c591343SA. Cody Schuffelen 
91*5c591343SA. Cody Schuffelen /**
92*5c591343SA. Cody Schuffelen   * @brief  The application entry point.
93*5c591343SA. Cody Schuffelen   *
94*5c591343SA. Cody Schuffelen   * @retval None
95*5c591343SA. Cody Schuffelen   */
main(void)96*5c591343SA. Cody Schuffelen int main(void)
97*5c591343SA. Cody Schuffelen {
98*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN 1 */
99*5c591343SA. Cody Schuffelen 
100*5c591343SA. Cody Schuffelen   /* USER CODE END 1 */
101*5c591343SA. Cody Schuffelen 
102*5c591343SA. Cody Schuffelen   /* MCU Configuration----------------------------------------------------------*/
103*5c591343SA. Cody Schuffelen 
104*5c591343SA. Cody Schuffelen   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
105*5c591343SA. Cody Schuffelen   HAL_Init();
106*5c591343SA. Cody Schuffelen 
107*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN Init */
108*5c591343SA. Cody Schuffelen 
109*5c591343SA. Cody Schuffelen   /* USER CODE END Init */
110*5c591343SA. Cody Schuffelen 
111*5c591343SA. Cody Schuffelen   /* Configure the system clock */
112*5c591343SA. Cody Schuffelen   SystemClock_Config();
113*5c591343SA. Cody Schuffelen 
114*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN SysInit */
115*5c591343SA. Cody Schuffelen 
116*5c591343SA. Cody Schuffelen   /* USER CODE END SysInit */
117*5c591343SA. Cody Schuffelen 
118*5c591343SA. Cody Schuffelen   /* Initialize all configured peripherals */
119*5c591343SA. Cody Schuffelen   MX_GPIO_Init();
120*5c591343SA. Cody Schuffelen   MX_USART2_UART_Init();
121*5c591343SA. Cody Schuffelen   MX_RTC_Init();
122*5c591343SA. Cody Schuffelen   MX_USB_DEVICE_Init();
123*5c591343SA. Cody Schuffelen   MX_RNG_Init();
124*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN 2 */
125*5c591343SA. Cody Schuffelen   InitializeITM();
126*5c591343SA. Cody Schuffelen   fprintf(stderr, "\r\n\r\n=========================\r\n"
127*5c591343SA. Cody Schuffelen                           "= Nucleo-L476RG TPM 2.0 =\r\n"
128*5c591343SA. Cody Schuffelen                           "=========================\r\n");
129*5c591343SA. Cody Schuffelen   printf("Nucleo-L476RG TPM 2.0\r\n");
130*5c591343SA. Cody Schuffelen 
131*5c591343SA. Cody Schuffelen   if(!TpmInitializeDevice())
132*5c591343SA. Cody Schuffelen   {
133*5c591343SA. Cody Schuffelen       _Error_Handler(__FILE__, __LINE__);
134*5c591343SA. Cody Schuffelen   }
135*5c591343SA. Cody Schuffelen 
136*5c591343SA. Cody Schuffelen   /* USER CODE END 2 */
137*5c591343SA. Cody Schuffelen 
138*5c591343SA. Cody Schuffelen   /* Infinite loop */
139*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN WHILE */
140*5c591343SA. Cody Schuffelen   while (1)
141*5c591343SA. Cody Schuffelen   {
142*5c591343SA. Cody Schuffelen 
143*5c591343SA. Cody Schuffelen   /* USER CODE END WHILE */
144*5c591343SA. Cody Schuffelen 
145*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN 3 */
146*5c591343SA. Cody Schuffelen       if(!TpmOperationsLoop())
147*5c591343SA. Cody Schuffelen       {
148*5c591343SA. Cody Schuffelen           _Error_Handler(__FILE__, __LINE__);
149*5c591343SA. Cody Schuffelen       }
150*5c591343SA. Cody Schuffelen 
151*5c591343SA. Cody Schuffelen   }
152*5c591343SA. Cody Schuffelen   /* USER CODE END 3 */
153*5c591343SA. Cody Schuffelen 
154*5c591343SA. Cody Schuffelen }
155*5c591343SA. Cody Schuffelen 
156*5c591343SA. Cody Schuffelen /**
157*5c591343SA. Cody Schuffelen   * @brief System Clock Configuration
158*5c591343SA. Cody Schuffelen   * @retval None
159*5c591343SA. Cody Schuffelen   */
SystemClock_Config(void)160*5c591343SA. Cody Schuffelen void SystemClock_Config(void)
161*5c591343SA. Cody Schuffelen {
162*5c591343SA. Cody Schuffelen 
163*5c591343SA. Cody Schuffelen   RCC_OscInitTypeDef RCC_OscInitStruct;
164*5c591343SA. Cody Schuffelen   RCC_ClkInitTypeDef RCC_ClkInitStruct;
165*5c591343SA. Cody Schuffelen   RCC_PeriphCLKInitTypeDef PeriphClkInit;
166*5c591343SA. Cody Schuffelen 
167*5c591343SA. Cody Schuffelen     /**Configure LSE Drive Capability
168*5c591343SA. Cody Schuffelen     */
169*5c591343SA. Cody Schuffelen   HAL_PWR_EnableBkUpAccess();
170*5c591343SA. Cody Schuffelen 
171*5c591343SA. Cody Schuffelen   __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
172*5c591343SA. Cody Schuffelen 
173*5c591343SA. Cody Schuffelen     /**Initializes the CPU, AHB and APB busses clocks
174*5c591343SA. Cody Schuffelen     */
175*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48|RCC_OSCILLATORTYPE_HSI
176*5c591343SA. Cody Schuffelen                               |RCC_OSCILLATORTYPE_LSE;
177*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.LSEState = RCC_LSE_ON;
178*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
179*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;
180*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.HSICalibrationValue = 64;
181*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
182*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
183*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLM = 1;  // <-- This one gets dropped by V1.11.0 add me manually back in when CubeMX ran
184*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLN = 10;
185*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
186*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
187*5c591343SA. Cody Schuffelen   RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
188*5c591343SA. Cody Schuffelen   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
189*5c591343SA. Cody Schuffelen   {
190*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
191*5c591343SA. Cody Schuffelen   }
192*5c591343SA. Cody Schuffelen 
193*5c591343SA. Cody Schuffelen     /**Initializes the CPU, AHB and APB busses clocks
194*5c591343SA. Cody Schuffelen     */
195*5c591343SA. Cody Schuffelen   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
196*5c591343SA. Cody Schuffelen                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
197*5c591343SA. Cody Schuffelen   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
198*5c591343SA. Cody Schuffelen   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
199*5c591343SA. Cody Schuffelen   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
200*5c591343SA. Cody Schuffelen   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
201*5c591343SA. Cody Schuffelen 
202*5c591343SA. Cody Schuffelen   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
203*5c591343SA. Cody Schuffelen   {
204*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
205*5c591343SA. Cody Schuffelen   }
206*5c591343SA. Cody Schuffelen 
207*5c591343SA. Cody Schuffelen   PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART2
208*5c591343SA. Cody Schuffelen                               |RCC_PERIPHCLK_USB|RCC_PERIPHCLK_RNG;
209*5c591343SA. Cody Schuffelen   PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
210*5c591343SA. Cody Schuffelen   PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
211*5c591343SA. Cody Schuffelen   PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_HSI48;
212*5c591343SA. Cody Schuffelen   PeriphClkInit.RngClockSelection = RCC_RNGCLKSOURCE_HSI48;
213*5c591343SA. Cody Schuffelen   if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
214*5c591343SA. Cody Schuffelen   {
215*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
216*5c591343SA. Cody Schuffelen   }
217*5c591343SA. Cody Schuffelen 
218*5c591343SA. Cody Schuffelen     /**Configure the main internal regulator output voltage
219*5c591343SA. Cody Schuffelen     */
220*5c591343SA. Cody Schuffelen   if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
221*5c591343SA. Cody Schuffelen   {
222*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
223*5c591343SA. Cody Schuffelen   }
224*5c591343SA. Cody Schuffelen 
225*5c591343SA. Cody Schuffelen     /**Configure the Systick interrupt time
226*5c591343SA. Cody Schuffelen     */
227*5c591343SA. Cody Schuffelen   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
228*5c591343SA. Cody Schuffelen 
229*5c591343SA. Cody Schuffelen     /**Configure the Systick
230*5c591343SA. Cody Schuffelen     */
231*5c591343SA. Cody Schuffelen   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
232*5c591343SA. Cody Schuffelen 
233*5c591343SA. Cody Schuffelen   /* SysTick_IRQn interrupt configuration */
234*5c591343SA. Cody Schuffelen   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
235*5c591343SA. Cody Schuffelen }
236*5c591343SA. Cody Schuffelen 
237*5c591343SA. Cody Schuffelen /* RNG init function */
MX_RNG_Init(void)238*5c591343SA. Cody Schuffelen static void MX_RNG_Init(void)
239*5c591343SA. Cody Schuffelen {
240*5c591343SA. Cody Schuffelen 
241*5c591343SA. Cody Schuffelen   hrng.Instance = RNG;
242*5c591343SA. Cody Schuffelen   if (HAL_RNG_Init(&hrng) != HAL_OK)
243*5c591343SA. Cody Schuffelen   {
244*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
245*5c591343SA. Cody Schuffelen   }
246*5c591343SA. Cody Schuffelen 
247*5c591343SA. Cody Schuffelen }
248*5c591343SA. Cody Schuffelen 
249*5c591343SA. Cody Schuffelen /* RTC init function */
MX_RTC_Init(void)250*5c591343SA. Cody Schuffelen static void MX_RTC_Init(void)
251*5c591343SA. Cody Schuffelen {
252*5c591343SA. Cody Schuffelen 
253*5c591343SA. Cody Schuffelen   RTC_TimeTypeDef sTime;
254*5c591343SA. Cody Schuffelen   RTC_DateTypeDef sDate;
255*5c591343SA. Cody Schuffelen 
256*5c591343SA. Cody Schuffelen     /**Initialize RTC Only
257*5c591343SA. Cody Schuffelen     */
258*5c591343SA. Cody Schuffelen   hrtc.Instance = RTC;
259*5c591343SA. Cody Schuffelen if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
260*5c591343SA. Cody Schuffelen   hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
261*5c591343SA. Cody Schuffelen   hrtc.Init.AsynchPrediv = 127;
262*5c591343SA. Cody Schuffelen   hrtc.Init.SynchPrediv = 255;
263*5c591343SA. Cody Schuffelen   hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
264*5c591343SA. Cody Schuffelen   hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
265*5c591343SA. Cody Schuffelen   hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
266*5c591343SA. Cody Schuffelen   hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
267*5c591343SA. Cody Schuffelen   if (HAL_RTC_Init(&hrtc) != HAL_OK)
268*5c591343SA. Cody Schuffelen   {
269*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
270*5c591343SA. Cody Schuffelen   }
271*5c591343SA. Cody Schuffelen 
272*5c591343SA. Cody Schuffelen     /**Initialize RTC and set the Time and Date
273*5c591343SA. Cody Schuffelen     */
274*5c591343SA. Cody Schuffelen   sTime.Hours = 0;
275*5c591343SA. Cody Schuffelen   sTime.Minutes = 0;
276*5c591343SA. Cody Schuffelen   sTime.Seconds = 0;
277*5c591343SA. Cody Schuffelen   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
278*5c591343SA. Cody Schuffelen   sTime.StoreOperation = RTC_STOREOPERATION_RESET;
279*5c591343SA. Cody Schuffelen   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
280*5c591343SA. Cody Schuffelen   {
281*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
282*5c591343SA. Cody Schuffelen   }
283*5c591343SA. Cody Schuffelen 
284*5c591343SA. Cody Schuffelen   sDate.WeekDay = RTC_WEEKDAY_MONDAY;
285*5c591343SA. Cody Schuffelen   sDate.Month = RTC_MONTH_JANUARY;
286*5c591343SA. Cody Schuffelen   sDate.Date = 1;
287*5c591343SA. Cody Schuffelen   sDate.Year = 0;
288*5c591343SA. Cody Schuffelen 
289*5c591343SA. Cody Schuffelen   if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
290*5c591343SA. Cody Schuffelen   {
291*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
292*5c591343SA. Cody Schuffelen   }
293*5c591343SA. Cody Schuffelen 
294*5c591343SA. Cody Schuffelen     HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
295*5c591343SA. Cody Schuffelen   }
296*5c591343SA. Cody Schuffelen 
297*5c591343SA. Cody Schuffelen }
298*5c591343SA. Cody Schuffelen 
299*5c591343SA. Cody Schuffelen /* USART2 init function */
MX_USART2_UART_Init(void)300*5c591343SA. Cody Schuffelen static void MX_USART2_UART_Init(void)
301*5c591343SA. Cody Schuffelen {
302*5c591343SA. Cody Schuffelen 
303*5c591343SA. Cody Schuffelen   huart2.Instance = USART2;
304*5c591343SA. Cody Schuffelen   huart2.Init.BaudRate = 115200;
305*5c591343SA. Cody Schuffelen   huart2.Init.WordLength = UART_WORDLENGTH_8B;
306*5c591343SA. Cody Schuffelen   huart2.Init.StopBits = UART_STOPBITS_1;
307*5c591343SA. Cody Schuffelen   huart2.Init.Parity = UART_PARITY_NONE;
308*5c591343SA. Cody Schuffelen   huart2.Init.Mode = UART_MODE_TX;
309*5c591343SA. Cody Schuffelen   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
310*5c591343SA. Cody Schuffelen   huart2.Init.OverSampling = UART_OVERSAMPLING_16;
311*5c591343SA. Cody Schuffelen   huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
312*5c591343SA. Cody Schuffelen   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
313*5c591343SA. Cody Schuffelen   if (HAL_UART_Init(&huart2) != HAL_OK)
314*5c591343SA. Cody Schuffelen   {
315*5c591343SA. Cody Schuffelen     _Error_Handler(__FILE__, __LINE__);
316*5c591343SA. Cody Schuffelen   }
317*5c591343SA. Cody Schuffelen 
318*5c591343SA. Cody Schuffelen }
319*5c591343SA. Cody Schuffelen 
320*5c591343SA. Cody Schuffelen /** Configure pins as
321*5c591343SA. Cody Schuffelen         * Analog
322*5c591343SA. Cody Schuffelen         * Input
323*5c591343SA. Cody Schuffelen         * Output
324*5c591343SA. Cody Schuffelen         * EVENT_OUT
325*5c591343SA. Cody Schuffelen         * EXTI
326*5c591343SA. Cody Schuffelen */
MX_GPIO_Init(void)327*5c591343SA. Cody Schuffelen static void MX_GPIO_Init(void)
328*5c591343SA. Cody Schuffelen {
329*5c591343SA. Cody Schuffelen 
330*5c591343SA. Cody Schuffelen   GPIO_InitTypeDef GPIO_InitStruct;
331*5c591343SA. Cody Schuffelen 
332*5c591343SA. Cody Schuffelen   /* GPIO Ports Clock Enable */
333*5c591343SA. Cody Schuffelen   __HAL_RCC_GPIOC_CLK_ENABLE();
334*5c591343SA. Cody Schuffelen   __HAL_RCC_GPIOA_CLK_ENABLE();
335*5c591343SA. Cody Schuffelen   __HAL_RCC_GPIOB_CLK_ENABLE();
336*5c591343SA. Cody Schuffelen 
337*5c591343SA. Cody Schuffelen   /*Configure GPIO pin Output Level */
338*5c591343SA. Cody Schuffelen   HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
339*5c591343SA. Cody Schuffelen 
340*5c591343SA. Cody Schuffelen   /*Configure GPIO pin : B1_Pin */
341*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Pin = B1_Pin;
342*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
343*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Pull = GPIO_NOPULL;
344*5c591343SA. Cody Schuffelen   HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
345*5c591343SA. Cody Schuffelen 
346*5c591343SA. Cody Schuffelen   /*Configure GPIO pin : LD2_Pin */
347*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Pin = LD2_Pin;
348*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
349*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Pull = GPIO_NOPULL;
350*5c591343SA. Cody Schuffelen   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
351*5c591343SA. Cody Schuffelen   HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
352*5c591343SA. Cody Schuffelen 
353*5c591343SA. Cody Schuffelen }
354*5c591343SA. Cody Schuffelen 
355*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 4 */
356*5c591343SA. Cody Schuffelen 
357*5c591343SA. Cody Schuffelen /* USER CODE END 4 */
358*5c591343SA. Cody Schuffelen 
359*5c591343SA. Cody Schuffelen /**
360*5c591343SA. Cody Schuffelen   * @brief  This function is executed in case of error occurrence.
361*5c591343SA. Cody Schuffelen   * @param  file: The file name as string.
362*5c591343SA. Cody Schuffelen   * @param  line: The line in file as a number.
363*5c591343SA. Cody Schuffelen   * @retval None
364*5c591343SA. Cody Schuffelen   */
_Error_Handler(char * file,int line)365*5c591343SA. Cody Schuffelen void _Error_Handler(char *file, int line)
366*5c591343SA. Cody Schuffelen {
367*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN Error_Handler_Debug */
368*5c591343SA. Cody Schuffelen     dbgPrint("PANIC: EXECUTION HALTED %s@%d\r\n", file, line);
369*5c591343SA. Cody Schuffelen   /* User can add his own implementation to report the HAL error return state */
370*5c591343SA. Cody Schuffelen   while(1)
371*5c591343SA. Cody Schuffelen   {
372*5c591343SA. Cody Schuffelen   }
373*5c591343SA. Cody Schuffelen   /* USER CODE END Error_Handler_Debug */
374*5c591343SA. Cody Schuffelen }
375*5c591343SA. Cody Schuffelen 
376*5c591343SA. Cody Schuffelen #ifdef  USE_FULL_ASSERT
377*5c591343SA. Cody Schuffelen /**
378*5c591343SA. Cody Schuffelen   * @brief  Reports the name of the source file and the source line number
379*5c591343SA. Cody Schuffelen   *         where the assert_param error has occurred.
380*5c591343SA. Cody Schuffelen   * @param  file: pointer to the source file name
381*5c591343SA. Cody Schuffelen   * @param  line: assert_param error line source number
382*5c591343SA. Cody Schuffelen   * @retval None
383*5c591343SA. Cody Schuffelen   */
assert_failed(uint8_t * file,uint32_t line)384*5c591343SA. Cody Schuffelen void assert_failed(uint8_t* file, uint32_t line)
385*5c591343SA. Cody Schuffelen {
386*5c591343SA. Cody Schuffelen   /* USER CODE BEGIN 6 */
387*5c591343SA. Cody Schuffelen   /* User can add his own implementation to report the file name and line number,
388*5c591343SA. Cody Schuffelen      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
389*5c591343SA. Cody Schuffelen   /* USER CODE END 6 */
390*5c591343SA. Cody Schuffelen }
391*5c591343SA. Cody Schuffelen #endif /* USE_FULL_ASSERT */
392*5c591343SA. Cody Schuffelen 
393*5c591343SA. Cody Schuffelen /**
394*5c591343SA. Cody Schuffelen   * @}
395*5c591343SA. Cody Schuffelen   */
396*5c591343SA. Cody Schuffelen 
397*5c591343SA. Cody Schuffelen /**
398*5c591343SA. Cody Schuffelen   * @}
399*5c591343SA. Cody Schuffelen   */
400*5c591343SA. Cody Schuffelen 
401*5c591343SA. Cody Schuffelen /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
402