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_RNG_Init(void);
79*5c591343SA. Cody Schuffelen static void MX_RTC_Init(void);
80*5c591343SA. Cody Schuffelen static void MX_USART2_UART_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 #define CPU_CORE_FREQUENCY_HZ 800000000 /* CPU core frequency in Hz */
85*5c591343SA. Cody Schuffelen void SWO_Init(uint32_t portBits, uint32_t cpuCoreFreqHz);
86*5c591343SA. Cody Schuffelen /* USER CODE END PFP */
87*5c591343SA. Cody Schuffelen
88*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 0 */
89*5c591343SA. Cody Schuffelen
90*5c591343SA. Cody Schuffelen /* USER CODE END 0 */
91*5c591343SA. Cody Schuffelen
92*5c591343SA. Cody Schuffelen /**
93*5c591343SA. Cody Schuffelen * @brief The application entry point.
94*5c591343SA. Cody Schuffelen *
95*5c591343SA. Cody Schuffelen * @retval None
96*5c591343SA. Cody Schuffelen */
main(void)97*5c591343SA. Cody Schuffelen int main(void)
98*5c591343SA. Cody Schuffelen {
99*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 1 */
100*5c591343SA. Cody Schuffelen
101*5c591343SA. Cody Schuffelen /* USER CODE END 1 */
102*5c591343SA. Cody Schuffelen
103*5c591343SA. Cody Schuffelen /* MCU Configuration----------------------------------------------------------*/
104*5c591343SA. Cody Schuffelen
105*5c591343SA. Cody Schuffelen /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
106*5c591343SA. Cody Schuffelen HAL_Init();
107*5c591343SA. Cody Schuffelen
108*5c591343SA. Cody Schuffelen /* USER CODE BEGIN Init */
109*5c591343SA. Cody Schuffelen
110*5c591343SA. Cody Schuffelen /* USER CODE END Init */
111*5c591343SA. Cody Schuffelen
112*5c591343SA. Cody Schuffelen /* Configure the system clock */
113*5c591343SA. Cody Schuffelen SystemClock_Config();
114*5c591343SA. Cody Schuffelen
115*5c591343SA. Cody Schuffelen /* USER CODE BEGIN SysInit */
116*5c591343SA. Cody Schuffelen
117*5c591343SA. Cody Schuffelen /* USER CODE END SysInit */
118*5c591343SA. Cody Schuffelen
119*5c591343SA. Cody Schuffelen /* Initialize all configured peripherals */
120*5c591343SA. Cody Schuffelen MX_GPIO_Init();
121*5c591343SA. Cody Schuffelen MX_RNG_Init();
122*5c591343SA. Cody Schuffelen MX_RTC_Init();
123*5c591343SA. Cody Schuffelen MX_USART2_UART_Init();
124*5c591343SA. Cody Schuffelen MX_USB_DEVICE_Init();
125*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 2 */
126*5c591343SA. Cody Schuffelen InitializeITM();
127*5c591343SA. Cody Schuffelen fprintf(stderr, "\r\n\r\n=========================\r\n"
128*5c591343SA. Cody Schuffelen "= Nucleo-L476RG TPM 2.0 =\r\n"
129*5c591343SA. Cody Schuffelen "=========================\r\n");
130*5c591343SA. Cody Schuffelen printf("Nucleo-L476RG TPM 2.0\r\n");
131*5c591343SA. Cody Schuffelen
132*5c591343SA. Cody Schuffelen if(!TpmInitializeDevice())
133*5c591343SA. Cody Schuffelen {
134*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
135*5c591343SA. Cody Schuffelen }
136*5c591343SA. Cody Schuffelen
137*5c591343SA. Cody Schuffelen /* USER CODE END 2 */
138*5c591343SA. Cody Schuffelen
139*5c591343SA. Cody Schuffelen /* Infinite loop */
140*5c591343SA. Cody Schuffelen /* USER CODE BEGIN WHILE */
141*5c591343SA. Cody Schuffelen while (1)
142*5c591343SA. Cody Schuffelen {
143*5c591343SA. Cody Schuffelen
144*5c591343SA. Cody Schuffelen /* USER CODE END WHILE */
145*5c591343SA. Cody Schuffelen
146*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 3 */
147*5c591343SA. Cody Schuffelen if(!TpmOperationsLoop())
148*5c591343SA. Cody Schuffelen {
149*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
150*5c591343SA. Cody Schuffelen }
151*5c591343SA. Cody Schuffelen
152*5c591343SA. Cody Schuffelen }
153*5c591343SA. Cody Schuffelen /* USER CODE END 3 */
154*5c591343SA. Cody Schuffelen
155*5c591343SA. Cody Schuffelen }
156*5c591343SA. Cody Schuffelen
157*5c591343SA. Cody Schuffelen /**
158*5c591343SA. Cody Schuffelen * @brief System Clock Configuration
159*5c591343SA. Cody Schuffelen * @retval None
160*5c591343SA. Cody Schuffelen */
SystemClock_Config(void)161*5c591343SA. Cody Schuffelen void SystemClock_Config(void)
162*5c591343SA. Cody Schuffelen {
163*5c591343SA. Cody Schuffelen
164*5c591343SA. Cody Schuffelen RCC_OscInitTypeDef RCC_OscInitStruct;
165*5c591343SA. Cody Schuffelen RCC_ClkInitTypeDef RCC_ClkInitStruct;
166*5c591343SA. Cody Schuffelen RCC_PeriphCLKInitTypeDef PeriphClkInit;
167*5c591343SA. Cody Schuffelen
168*5c591343SA. Cody Schuffelen /**Configure LSE Drive Capability
169*5c591343SA. Cody Schuffelen */
170*5c591343SA. Cody Schuffelen HAL_PWR_EnableBkUpAccess();
171*5c591343SA. Cody Schuffelen
172*5c591343SA. Cody Schuffelen __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
173*5c591343SA. Cody Schuffelen
174*5c591343SA. Cody Schuffelen /**Initializes the CPU, AHB and APB busses clocks
175*5c591343SA. Cody Schuffelen */
176*5c591343SA. Cody Schuffelen RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE
177*5c591343SA. Cody Schuffelen |RCC_OSCILLATORTYPE_MSI;
178*5c591343SA. Cody Schuffelen RCC_OscInitStruct.LSEState = RCC_LSE_ON;
179*5c591343SA. Cody Schuffelen RCC_OscInitStruct.HSIState = RCC_HSI_ON;
180*5c591343SA. Cody Schuffelen RCC_OscInitStruct.HSICalibrationValue = 16;
181*5c591343SA. Cody Schuffelen RCC_OscInitStruct.MSIState = RCC_MSI_ON;
182*5c591343SA. Cody Schuffelen RCC_OscInitStruct.MSICalibrationValue = 0;
183*5c591343SA. Cody Schuffelen RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_11;
184*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
185*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
186*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLM = 1; // <-- This one gets dropped by V1.11.0 add me manually back in when CubeMX ran
187*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLN = 10;
188*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
189*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
190*5c591343SA. Cody Schuffelen RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
191*5c591343SA. Cody Schuffelen if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
192*5c591343SA. Cody Schuffelen {
193*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
194*5c591343SA. Cody Schuffelen }
195*5c591343SA. Cody Schuffelen
196*5c591343SA. Cody Schuffelen /**Initializes the CPU, AHB and APB busses clocks
197*5c591343SA. Cody Schuffelen */
198*5c591343SA. Cody Schuffelen RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
199*5c591343SA. Cody Schuffelen |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
200*5c591343SA. Cody Schuffelen RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
201*5c591343SA. Cody Schuffelen RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
202*5c591343SA. Cody Schuffelen RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
203*5c591343SA. Cody Schuffelen RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
204*5c591343SA. Cody Schuffelen
205*5c591343SA. Cody Schuffelen if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
206*5c591343SA. Cody Schuffelen {
207*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
208*5c591343SA. Cody Schuffelen }
209*5c591343SA. Cody Schuffelen
210*5c591343SA. Cody Schuffelen PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART2
211*5c591343SA. Cody Schuffelen |RCC_PERIPHCLK_USB|RCC_PERIPHCLK_RNG;
212*5c591343SA. Cody Schuffelen PeriphClkInit.Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1;
213*5c591343SA. Cody Schuffelen PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
214*5c591343SA. Cody Schuffelen PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_MSI;
215*5c591343SA. Cody Schuffelen PeriphClkInit.RngClockSelection = RCC_RNGCLKSOURCE_MSI;
216*5c591343SA. Cody Schuffelen if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
217*5c591343SA. Cody Schuffelen {
218*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
219*5c591343SA. Cody Schuffelen }
220*5c591343SA. Cody Schuffelen
221*5c591343SA. Cody Schuffelen /**Configure the main internal regulator output voltage
222*5c591343SA. Cody Schuffelen */
223*5c591343SA. Cody Schuffelen if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
224*5c591343SA. Cody Schuffelen {
225*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
226*5c591343SA. Cody Schuffelen }
227*5c591343SA. Cody Schuffelen
228*5c591343SA. Cody Schuffelen /**Configure the Systick interrupt time
229*5c591343SA. Cody Schuffelen */
230*5c591343SA. Cody Schuffelen HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
231*5c591343SA. Cody Schuffelen
232*5c591343SA. Cody Schuffelen /**Configure the Systick
233*5c591343SA. Cody Schuffelen */
234*5c591343SA. Cody Schuffelen HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
235*5c591343SA. Cody Schuffelen
236*5c591343SA. Cody Schuffelen /**Enable MSI Auto calibration
237*5c591343SA. Cody Schuffelen */
238*5c591343SA. Cody Schuffelen HAL_RCCEx_EnableMSIPLLMode();
239*5c591343SA. Cody Schuffelen
240*5c591343SA. Cody Schuffelen /* SysTick_IRQn interrupt configuration */
241*5c591343SA. Cody Schuffelen HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
242*5c591343SA. Cody Schuffelen }
243*5c591343SA. Cody Schuffelen
244*5c591343SA. Cody Schuffelen /* RNG init function */
MX_RNG_Init(void)245*5c591343SA. Cody Schuffelen static void MX_RNG_Init(void)
246*5c591343SA. Cody Schuffelen {
247*5c591343SA. Cody Schuffelen
248*5c591343SA. Cody Schuffelen hrng.Instance = RNG;
249*5c591343SA. Cody Schuffelen if (HAL_RNG_Init(&hrng) != HAL_OK)
250*5c591343SA. Cody Schuffelen {
251*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
252*5c591343SA. Cody Schuffelen }
253*5c591343SA. Cody Schuffelen
254*5c591343SA. Cody Schuffelen }
255*5c591343SA. Cody Schuffelen
256*5c591343SA. Cody Schuffelen /* RTC init function */
MX_RTC_Init(void)257*5c591343SA. Cody Schuffelen static void MX_RTC_Init(void)
258*5c591343SA. Cody Schuffelen {
259*5c591343SA. Cody Schuffelen
260*5c591343SA. Cody Schuffelen RTC_TimeTypeDef sTime;
261*5c591343SA. Cody Schuffelen RTC_DateTypeDef sDate;
262*5c591343SA. Cody Schuffelen
263*5c591343SA. Cody Schuffelen /**Initialize RTC Only
264*5c591343SA. Cody Schuffelen */
265*5c591343SA. Cody Schuffelen hrtc.Instance = RTC;
266*5c591343SA. Cody Schuffelen if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x32F2){
267*5c591343SA. Cody Schuffelen hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
268*5c591343SA. Cody Schuffelen hrtc.Init.AsynchPrediv = 127;
269*5c591343SA. Cody Schuffelen hrtc.Init.SynchPrediv = 255;
270*5c591343SA. Cody Schuffelen hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
271*5c591343SA. Cody Schuffelen hrtc.Init.OutPutRemap = RTC_OUTPUT_REMAP_NONE;
272*5c591343SA. Cody Schuffelen hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
273*5c591343SA. Cody Schuffelen hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
274*5c591343SA. Cody Schuffelen if (HAL_RTC_Init(&hrtc) != HAL_OK)
275*5c591343SA. Cody Schuffelen {
276*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
277*5c591343SA. Cody Schuffelen }
278*5c591343SA. Cody Schuffelen
279*5c591343SA. Cody Schuffelen /**Initialize RTC and set the Time and Date
280*5c591343SA. Cody Schuffelen */
281*5c591343SA. Cody Schuffelen sTime.Hours = 0;
282*5c591343SA. Cody Schuffelen sTime.Minutes = 0;
283*5c591343SA. Cody Schuffelen sTime.Seconds = 0;
284*5c591343SA. Cody Schuffelen sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
285*5c591343SA. Cody Schuffelen sTime.StoreOperation = RTC_STOREOPERATION_RESET;
286*5c591343SA. Cody Schuffelen if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK)
287*5c591343SA. Cody Schuffelen {
288*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
289*5c591343SA. Cody Schuffelen }
290*5c591343SA. Cody Schuffelen
291*5c591343SA. Cody Schuffelen sDate.WeekDay = RTC_WEEKDAY_MONDAY;
292*5c591343SA. Cody Schuffelen sDate.Month = RTC_MONTH_JANUARY;
293*5c591343SA. Cody Schuffelen sDate.Date = 1;
294*5c591343SA. Cody Schuffelen sDate.Year = 0;
295*5c591343SA. Cody Schuffelen
296*5c591343SA. Cody Schuffelen if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK)
297*5c591343SA. Cody Schuffelen {
298*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
299*5c591343SA. Cody Schuffelen }
300*5c591343SA. Cody Schuffelen
301*5c591343SA. Cody Schuffelen HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x32F2);
302*5c591343SA. Cody Schuffelen }
303*5c591343SA. Cody Schuffelen
304*5c591343SA. Cody Schuffelen }
305*5c591343SA. Cody Schuffelen
306*5c591343SA. Cody Schuffelen /* USART2 init function */
MX_USART2_UART_Init(void)307*5c591343SA. Cody Schuffelen static void MX_USART2_UART_Init(void)
308*5c591343SA. Cody Schuffelen {
309*5c591343SA. Cody Schuffelen
310*5c591343SA. Cody Schuffelen huart2.Instance = USART2;
311*5c591343SA. Cody Schuffelen huart2.Init.BaudRate = 115200;
312*5c591343SA. Cody Schuffelen huart2.Init.WordLength = UART_WORDLENGTH_8B;
313*5c591343SA. Cody Schuffelen huart2.Init.StopBits = UART_STOPBITS_1;
314*5c591343SA. Cody Schuffelen huart2.Init.Parity = UART_PARITY_NONE;
315*5c591343SA. Cody Schuffelen huart2.Init.Mode = UART_MODE_TX;
316*5c591343SA. Cody Schuffelen huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
317*5c591343SA. Cody Schuffelen huart2.Init.OverSampling = UART_OVERSAMPLING_16;
318*5c591343SA. Cody Schuffelen huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
319*5c591343SA. Cody Schuffelen huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
320*5c591343SA. Cody Schuffelen if (HAL_UART_Init(&huart2) != HAL_OK)
321*5c591343SA. Cody Schuffelen {
322*5c591343SA. Cody Schuffelen _Error_Handler(__FILE__, __LINE__);
323*5c591343SA. Cody Schuffelen }
324*5c591343SA. Cody Schuffelen
325*5c591343SA. Cody Schuffelen }
326*5c591343SA. Cody Schuffelen
327*5c591343SA. Cody Schuffelen /** Configure pins as
328*5c591343SA. Cody Schuffelen * Analog
329*5c591343SA. Cody Schuffelen * Input
330*5c591343SA. Cody Schuffelen * Output
331*5c591343SA. Cody Schuffelen * EVENT_OUT
332*5c591343SA. Cody Schuffelen * EXTI
333*5c591343SA. Cody Schuffelen */
MX_GPIO_Init(void)334*5c591343SA. Cody Schuffelen static void MX_GPIO_Init(void)
335*5c591343SA. Cody Schuffelen {
336*5c591343SA. Cody Schuffelen
337*5c591343SA. Cody Schuffelen GPIO_InitTypeDef GPIO_InitStruct;
338*5c591343SA. Cody Schuffelen
339*5c591343SA. Cody Schuffelen /* GPIO Ports Clock Enable */
340*5c591343SA. Cody Schuffelen __HAL_RCC_GPIOC_CLK_ENABLE();
341*5c591343SA. Cody Schuffelen __HAL_RCC_GPIOH_CLK_ENABLE();
342*5c591343SA. Cody Schuffelen __HAL_RCC_GPIOA_CLK_ENABLE();
343*5c591343SA. Cody Schuffelen __HAL_RCC_GPIOB_CLK_ENABLE();
344*5c591343SA. Cody Schuffelen
345*5c591343SA. Cody Schuffelen /*Configure GPIO pin Output Level */
346*5c591343SA. Cody Schuffelen HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);
347*5c591343SA. Cody Schuffelen
348*5c591343SA. Cody Schuffelen /*Configure GPIO pin : B1_Pin */
349*5c591343SA. Cody Schuffelen GPIO_InitStruct.Pin = B1_Pin;
350*5c591343SA. Cody Schuffelen GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
351*5c591343SA. Cody Schuffelen GPIO_InitStruct.Pull = GPIO_NOPULL;
352*5c591343SA. Cody Schuffelen HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);
353*5c591343SA. Cody Schuffelen
354*5c591343SA. Cody Schuffelen /*Configure GPIO pin : LD2_Pin */
355*5c591343SA. Cody Schuffelen GPIO_InitStruct.Pin = LD2_Pin;
356*5c591343SA. Cody Schuffelen GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
357*5c591343SA. Cody Schuffelen GPIO_InitStruct.Pull = GPIO_NOPULL;
358*5c591343SA. Cody Schuffelen GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
359*5c591343SA. Cody Schuffelen HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);
360*5c591343SA. Cody Schuffelen
361*5c591343SA. Cody Schuffelen }
362*5c591343SA. Cody Schuffelen
363*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 4 */
364*5c591343SA. Cody Schuffelen
365*5c591343SA. Cody Schuffelen /* USER CODE END 4 */
366*5c591343SA. Cody Schuffelen
367*5c591343SA. Cody Schuffelen /**
368*5c591343SA. Cody Schuffelen * @brief This function is executed in case of error occurrence.
369*5c591343SA. Cody Schuffelen * @param file: The file name as string.
370*5c591343SA. Cody Schuffelen * @param line: The line in file as a number.
371*5c591343SA. Cody Schuffelen * @retval None
372*5c591343SA. Cody Schuffelen */
_Error_Handler(char * file,int line)373*5c591343SA. Cody Schuffelen void _Error_Handler(char *file, int line)
374*5c591343SA. Cody Schuffelen {
375*5c591343SA. Cody Schuffelen /* USER CODE BEGIN Error_Handler_Debug */
376*5c591343SA. Cody Schuffelen dbgPrint("PANIC: EXECUTION HALTED %s@%d\r\n", file, line);
377*5c591343SA. Cody Schuffelen /* User can add his own implementation to report the HAL error return state */
378*5c591343SA. Cody Schuffelen while(1)
379*5c591343SA. Cody Schuffelen {
380*5c591343SA. Cody Schuffelen }
381*5c591343SA. Cody Schuffelen /* USER CODE END Error_Handler_Debug */
382*5c591343SA. Cody Schuffelen }
383*5c591343SA. Cody Schuffelen
384*5c591343SA. Cody Schuffelen #ifdef USE_FULL_ASSERT
385*5c591343SA. Cody Schuffelen /**
386*5c591343SA. Cody Schuffelen * @brief Reports the name of the source file and the source line number
387*5c591343SA. Cody Schuffelen * where the assert_param error has occurred.
388*5c591343SA. Cody Schuffelen * @param file: pointer to the source file name
389*5c591343SA. Cody Schuffelen * @param line: assert_param error line source number
390*5c591343SA. Cody Schuffelen * @retval None
391*5c591343SA. Cody Schuffelen */
assert_failed(uint8_t * file,uint32_t line)392*5c591343SA. Cody Schuffelen void assert_failed(uint8_t* file, uint32_t line)
393*5c591343SA. Cody Schuffelen {
394*5c591343SA. Cody Schuffelen /* USER CODE BEGIN 6 */
395*5c591343SA. Cody Schuffelen /* User can add his own implementation to report the file name and line number,
396*5c591343SA. Cody Schuffelen tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
397*5c591343SA. Cody Schuffelen /* USER CODE END 6 */
398*5c591343SA. Cody Schuffelen }
399*5c591343SA. Cody Schuffelen #endif /* USE_FULL_ASSERT */
400*5c591343SA. Cody Schuffelen
401*5c591343SA. Cody Schuffelen /**
402*5c591343SA. Cody Schuffelen * @}
403*5c591343SA. Cody Schuffelen */
404*5c591343SA. Cody Schuffelen
405*5c591343SA. Cody Schuffelen /**
406*5c591343SA. Cody Schuffelen * @}
407*5c591343SA. Cody Schuffelen */
408*5c591343SA. Cody Schuffelen
409*5c591343SA. Cody Schuffelen /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
410