You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							299 lines
						
					
					
						
							8.8 KiB
						
					
					
				
			
		
		
	
	
							299 lines
						
					
					
						
							8.8 KiB
						
					
					
				| /**
 | |
|   ******************************************************************************
 | |
|   * File Name          : main.c
 | |
|   * Description        : Main program body
 | |
|   ******************************************************************************
 | |
|   *
 | |
|   * COPYRIGHT(c) 2016 STMicroelectronics
 | |
|   *
 | |
|   * Redistribution and use in source and binary forms, with or without modification,
 | |
|   * are permitted provided that the following conditions are met:
 | |
|   *   1. Redistributions of source code must retain the above copyright notice,
 | |
|   *      this list of conditions and the following disclaimer.
 | |
|   *   2. Redistributions in binary form must reproduce the above copyright notice,
 | |
|   *      this list of conditions and the following disclaimer in the documentation
 | |
|   *      and/or other materials provided with the distribution.
 | |
|   *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | |
|   *      may be used to endorse or promote products derived from this software
 | |
|   *      without specific prior written permission.
 | |
|   *
 | |
|   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | |
|   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
|   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | |
|   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | |
|   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
|   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | |
|   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | |
|   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | |
|   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | |
|   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|   *
 | |
|   ******************************************************************************
 | |
|   */
 | |
| /* Includes ------------------------------------------------------------------*/
 | |
| #include "stm32f1xx_hal.h"
 | |
| #include "usb_device.h"
 | |
| 
 | |
| /* USER CODE BEGIN Includes */
 | |
| 
 | |
| /* USER CODE END Includes */
 | |
| 
 | |
| /* Private variables ---------------------------------------------------------*/
 | |
| RTC_HandleTypeDef hrtc;
 | |
| 
 | |
| UART_HandleTypeDef huart2;
 | |
| 
 | |
| /* USER CODE BEGIN PV */
 | |
| /* Private variables ---------------------------------------------------------*/
 | |
| 
 | |
| /* USER CODE END PV */
 | |
| 
 | |
| /* Private function prototypes -----------------------------------------------*/
 | |
| void SystemClock_Config(void);
 | |
| 
 | |
| void Error_Handler(void);
 | |
| 
 | |
| static void MX_GPIO_Init(void);
 | |
| 
 | |
| static void MX_RTC_Init(void);
 | |
| 
 | |
| static void MX_USART2_UART_Init(void);
 | |
| 
 | |
| /* USER CODE BEGIN PFP */
 | |
| /* Private function prototypes -----------------------------------------------*/
 | |
| 
 | |
| /* USER CODE END PFP */
 | |
| 
 | |
| /* USER CODE BEGIN 0 */
 | |
| 
 | |
| /* USER CODE END 0 */
 | |
| 
 | |
| void _Noreturn main(void)
 | |
| {
 | |
| 	/* USER CODE BEGIN 1 */
 | |
| 
 | |
| 	/* USER CODE END 1 */
 | |
| 
 | |
| 	/* MCU Configuration----------------------------------------------------------*/
 | |
| 
 | |
| 	/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
 | |
| 	HAL_Init();
 | |
| 
 | |
| 	/* Configure the system clock */
 | |
| 	SystemClock_Config();
 | |
| 
 | |
| 	/* Initialize all configured peripherals */
 | |
| 	MX_GPIO_Init();
 | |
| 	MX_RTC_Init();
 | |
| 	MX_USART2_UART_Init();
 | |
| 	MX_USB_DEVICE_Init();
 | |
| 
 | |
| 	/* USER CODE BEGIN 2 */
 | |
| 
 | |
| 	/* USER CODE END 2 */
 | |
| 
 | |
| 	/* Infinite loop */
 | |
| 	/* USER CODE BEGIN WHILE */
 | |
| 	while (1) {
 | |
| 		/* USER CODE END WHILE */
 | |
| 		/* USER CODE BEGIN 3 */
 | |
| 
 | |
| 		HAL_Delay(100);
 | |
| 		HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
 | |
| 	}
 | |
| 	/* USER CODE END 3 */
 | |
| }
 | |
| 
 | |
| /** System Clock Configuration
 | |
| */
 | |
| void SystemClock_Config(void)
 | |
| {
 | |
| 	RCC_OscInitTypeDef RCC_OscInitStruct;
 | |
| 	RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | |
| 	RCC_PeriphCLKInitTypeDef PeriphClkInit;
 | |
| 
 | |
| 	RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_LSE;
 | |
| 	RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 | |
| 	RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
 | |
| 	RCC_OscInitStruct.LSEState = RCC_LSE_ON;
 | |
| 	RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | |
| 	RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 | |
| 	RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
 | |
| 	if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| 	RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
 | |
| 	                              | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
 | |
| 	RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 | |
| 	RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | |
| 	RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
 | |
| 	RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 | |
| 	if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| 	PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC | RCC_PERIPHCLK_USB;
 | |
| 	PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
 | |
| 	PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
 | |
| 	if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| 	HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
 | |
| 
 | |
| 	HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
 | |
| 
 | |
| 	/* SysTick_IRQn interrupt configuration */
 | |
| 	HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
 | |
| }
 | |
| 
 | |
| /* RTC init function */
 | |
| static void MX_RTC_Init(void)
 | |
| {
 | |
| 
 | |
| 	RTC_TimeTypeDef sTime;
 | |
| 	RTC_DateTypeDef DateToUpdate;
 | |
| 
 | |
| 	/**Initialize RTC and set the Time and Date
 | |
| 	*/
 | |
| 	hrtc.Instance = RTC;
 | |
| 	hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
 | |
| 	hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
 | |
| 	if (HAL_RTC_Init(&hrtc) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| 	sTime.Hours = 0x1;
 | |
| 	sTime.Minutes = 0x0;
 | |
| 	sTime.Seconds = 0x0;
 | |
| 
 | |
| 	if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| 	DateToUpdate.WeekDay = RTC_WEEKDAY_MONDAY;
 | |
| 	DateToUpdate.Month = RTC_MONTH_JANUARY;
 | |
| 	DateToUpdate.Date = 0x1;
 | |
| 	DateToUpdate.Year = 0x0;
 | |
| 
 | |
| 	if (HAL_RTC_SetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BCD) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /* USART2 init function */
 | |
| static void MX_USART2_UART_Init(void)
 | |
| {
 | |
| 
 | |
| 	huart2.Instance = USART2;
 | |
| 	huart2.Init.BaudRate = 115200;
 | |
| 	huart2.Init.WordLength = UART_WORDLENGTH_8B;
 | |
| 	huart2.Init.StopBits = UART_STOPBITS_1;
 | |
| 	huart2.Init.Parity = UART_PARITY_NONE;
 | |
| 	huart2.Init.Mode = UART_MODE_TX_RX;
 | |
| 	huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 | |
| 	huart2.Init.OverSampling = UART_OVERSAMPLING_16;
 | |
| 	if (HAL_UART_Init(&huart2) != HAL_OK) {
 | |
| 		Error_Handler();
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| /** Configure pins as 
 | |
|         * Analog 
 | |
|         * Input 
 | |
|         * Output
 | |
|         * EVENT_OUT
 | |
|         * EXTI
 | |
|         * Free pins are configured automatically as Analog (this feature is enabled through 
 | |
|         * the Code Generation settings)
 | |
| */
 | |
| static void MX_GPIO_Init(void)
 | |
| {
 | |
| 	GPIO_InitTypeDef GPIO_InitStruct;
 | |
| 
 | |
| 	/* GPIO Ports Clock Enable */
 | |
| 	__HAL_RCC_GPIOC_CLK_ENABLE();
 | |
| 	__HAL_RCC_GPIOD_CLK_ENABLE();
 | |
| 	__HAL_RCC_GPIOA_CLK_ENABLE();
 | |
| 	__HAL_RCC_GPIOB_CLK_ENABLE();
 | |
| 
 | |
| 	/*Configure GPIO pin Output Level */
 | |
| 	HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
 | |
| 
 | |
| 	/*Configure GPIO pin : LED_Pin */
 | |
| 	GPIO_InitStruct.Pin = LED_Pin;
 | |
| 	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | |
| 	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 | |
| 	HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
 | |
| 
 | |
| 	/*Configure GPIO pins : PA0 PA1 PA4 PA5
 | |
| 							 PA6 PA7 PA8 PA9
 | |
| 							 PA10 PA13 PA14 PA15 */
 | |
| 	GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4 | GPIO_PIN_5
 | |
| 	                      | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9
 | |
| 	                      | GPIO_PIN_10 | GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
 | |
| 	GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
| 	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 | |
| 
 | |
| 	/*Configure GPIO pins : PB0 PB1 PB2 PB10
 | |
| 							 PB11 PB12 PB13 PB14
 | |
| 							 PB15 PB3 PB4 PB5
 | |
| 							 PB6 PB7 PB8 PB9 */
 | |
| 	GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_10
 | |
| 	                      | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14
 | |
| 	                      | GPIO_PIN_15 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5
 | |
| 	                      | GPIO_PIN_6 | GPIO_PIN_7 | GPIO_PIN_8 | GPIO_PIN_9;
 | |
| 	GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
 | |
| 	HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | |
| }
 | |
| 
 | |
| /* USER CODE BEGIN 4 */
 | |
| 
 | |
| /* USER CODE END 4 */
 | |
| 
 | |
| /**
 | |
|   * @brief  This function is executed in case of error occurrence.
 | |
|   * @param  None
 | |
|   * @retval None
 | |
|   */
 | |
| void Error_Handler(void)
 | |
| {
 | |
| 	/* USER CODE BEGIN Error_Handler */
 | |
| 	/* User can add his own implementation to report the HAL error return state */
 | |
| 	while (1) {
 | |
| 	}
 | |
| 	/* USER CODE END Error_Handler */
 | |
| }
 | |
| 
 | |
| #ifdef USE_FULL_ASSERT
 | |
| 
 | |
| /**
 | |
|    * @brief Reports the name of the source file and the source line number
 | |
|    * where the assert_param error has occurred.
 | |
|    * @param file: pointer to the source file name
 | |
|    * @param line: assert_param error line source number
 | |
|    * @retval None
 | |
|    */
 | |
| void assert_failed(uint8_t* file, uint32_t line)
 | |
| {
 | |
|   /* USER CODE BEGIN 6 */
 | |
|   /* User can add his own implementation to report the file name and line number,
 | |
| 	ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 | |
|   /* USER CODE END 6 */
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
|   */
 | |
| 
 | |
| /**
 | |
|   * @}
 | |
| */
 | |
| 
 | |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | |
| 
 |