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