Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
Sergunb 0:8f0d870509fe 2 * File Name : hw_config.c
Sergunb 0:8f0d870509fe 3 * Author : MCD Application Team
Sergunb 0:8f0d870509fe 4 * Version : V3.3.0
Sergunb 0:8f0d870509fe 5 * Date : 21-March-2011
Sergunb 0:8f0d870509fe 6 * Description : Hardware Configuration & Setup
Sergunb 0:8f0d870509fe 7 ********************************************************************************
Sergunb 0:8f0d870509fe 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:8f0d870509fe 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
Sergunb 0:8f0d870509fe 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
Sergunb 0:8f0d870509fe 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
Sergunb 0:8f0d870509fe 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
Sergunb 0:8f0d870509fe 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:8f0d870509fe 14 *******************************************************************************/
Sergunb 0:8f0d870509fe 15
Sergunb 0:8f0d870509fe 16 #include "stm32f10x_it.h"
Sergunb 0:8f0d870509fe 17
Sergunb 0:8f0d870509fe 18 #include "usb_lib.h"
Sergunb 0:8f0d870509fe 19 #include "usb_prop.h"
Sergunb 0:8f0d870509fe 20 #include "usb_desc.h"
Sergunb 0:8f0d870509fe 21 #include "hw_config.h"
Sergunb 0:8f0d870509fe 22 #include "platform_config.h"
Sergunb 0:8f0d870509fe 23 #include "usb_pwr.h"
Sergunb 0:8f0d870509fe 24 #include "stm32f10x_rcc.h"
Sergunb 0:8f0d870509fe 25 #include "misc.h"
Sergunb 0:8f0d870509fe 26
Sergunb 0:8f0d870509fe 27 ErrorStatus HSEStartUpStatus;
Sergunb 0:8f0d870509fe 28
Sergunb 0:8f0d870509fe 29 static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len);
Sergunb 0:8f0d870509fe 30
Sergunb 0:8f0d870509fe 31 /*******************************************************************************
Sergunb 0:8f0d870509fe 32 * Description : Configures Main system clocks & power
Sergunb 0:8f0d870509fe 33 *******************************************************************************/
Sergunb 0:8f0d870509fe 34 void Set_System(void)
Sergunb 0:8f0d870509fe 35 {
Sergunb 0:8f0d870509fe 36 }
Sergunb 0:8f0d870509fe 37
Sergunb 0:8f0d870509fe 38 /*******************************************************************************
Sergunb 0:8f0d870509fe 39 * Description : Configures USB Clock input (48MHz)
Sergunb 0:8f0d870509fe 40 *******************************************************************************/
Sergunb 0:8f0d870509fe 41 void Set_USBClock(void)
Sergunb 0:8f0d870509fe 42 {
Sergunb 0:8f0d870509fe 43 /* Select USBCLK source */
Sergunb 0:8f0d870509fe 44 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
Sergunb 0:8f0d870509fe 45
Sergunb 0:8f0d870509fe 46 /* Enable the USB clock */
Sergunb 0:8f0d870509fe 47 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
Sergunb 0:8f0d870509fe 48 }
Sergunb 0:8f0d870509fe 49
Sergunb 0:8f0d870509fe 50 /*******************************************************************************
Sergunb 0:8f0d870509fe 51 * Description : Power-off system clocks and power while entering suspend mode
Sergunb 0:8f0d870509fe 52 *******************************************************************************/
Sergunb 0:8f0d870509fe 53 void Enter_LowPowerMode(void)
Sergunb 0:8f0d870509fe 54 {
Sergunb 0:8f0d870509fe 55 /* Set the device state to suspend */
Sergunb 0:8f0d870509fe 56 bDeviceState = SUSPENDED;
Sergunb 0:8f0d870509fe 57 }
Sergunb 0:8f0d870509fe 58
Sergunb 0:8f0d870509fe 59 /*******************************************************************************
Sergunb 0:8f0d870509fe 60 * Description : Restores system clocks and power while exiting suspend mode
Sergunb 0:8f0d870509fe 61 *******************************************************************************/
Sergunb 0:8f0d870509fe 62 void Leave_LowPowerMode(void)
Sergunb 0:8f0d870509fe 63 {
Sergunb 0:8f0d870509fe 64 DEVICE_INFO *pInfo = &Device_Info;
Sergunb 0:8f0d870509fe 65
Sergunb 0:8f0d870509fe 66 /* Set the device state to the correct state */
Sergunb 0:8f0d870509fe 67 if (pInfo->Current_Configuration != 0)
Sergunb 0:8f0d870509fe 68 {
Sergunb 0:8f0d870509fe 69 /* Device configured */
Sergunb 0:8f0d870509fe 70 bDeviceState = CONFIGURED;
Sergunb 0:8f0d870509fe 71 }
Sergunb 0:8f0d870509fe 72 else
Sergunb 0:8f0d870509fe 73 {
Sergunb 0:8f0d870509fe 74 bDeviceState = ATTACHED;
Sergunb 0:8f0d870509fe 75 }
Sergunb 0:8f0d870509fe 76 }
Sergunb 0:8f0d870509fe 77
Sergunb 0:8f0d870509fe 78 /*******************************************************************************
Sergunb 0:8f0d870509fe 79 * Description : Configures the USB interrupts
Sergunb 0:8f0d870509fe 80 *******************************************************************************/
Sergunb 0:8f0d870509fe 81 void USB_Interrupts_Config(void)
Sergunb 0:8f0d870509fe 82 {
Sergunb 0:8f0d870509fe 83 NVIC_InitTypeDef NVIC_InitStructure;
Sergunb 0:8f0d870509fe 84
Sergunb 0:8f0d870509fe 85 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
Sergunb 0:8f0d870509fe 86
Sergunb 0:8f0d870509fe 87 NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
Sergunb 0:8f0d870509fe 88 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
Sergunb 0:8f0d870509fe 89 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
Sergunb 0:8f0d870509fe 90 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
Sergunb 0:8f0d870509fe 91 NVIC_Init(&NVIC_InitStructure);
Sergunb 0:8f0d870509fe 92 }
Sergunb 0:8f0d870509fe 93
Sergunb 0:8f0d870509fe 94 /*******************************************************************************
Sergunb 0:8f0d870509fe 95 * Description : Software Connection/Disconnection of USB Cable
Sergunb 0:8f0d870509fe 96 *******************************************************************************/
Sergunb 0:8f0d870509fe 97 void USB_Cable_Config(FunctionalState NewState)
Sergunb 0:8f0d870509fe 98 {
Sergunb 0:8f0d870509fe 99 }
Sergunb 0:8f0d870509fe 100
Sergunb 0:8f0d870509fe 101 /*******************************************************************************
Sergunb 0:8f0d870509fe 102 * Description : Create the serial number string descriptor.
Sergunb 0:8f0d870509fe 103 *******************************************************************************/
Sergunb 0:8f0d870509fe 104 void Get_SerialNum(void)
Sergunb 0:8f0d870509fe 105 {
Sergunb 0:8f0d870509fe 106 uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
Sergunb 0:8f0d870509fe 107
Sergunb 0:8f0d870509fe 108 Device_Serial0 = *(__IO uint32_t*) (0x1FFFF7E8);
Sergunb 0:8f0d870509fe 109 Device_Serial1 = *(__IO uint32_t*) (0x1FFFF7EC);
Sergunb 0:8f0d870509fe 110 Device_Serial2 = *(__IO uint32_t*) (0x1FFFF7F0);
Sergunb 0:8f0d870509fe 111
Sergunb 0:8f0d870509fe 112 Device_Serial0 += Device_Serial2;
Sergunb 0:8f0d870509fe 113
Sergunb 0:8f0d870509fe 114 if (Device_Serial0 != 0)
Sergunb 0:8f0d870509fe 115 {
Sergunb 0:8f0d870509fe 116 IntToUnicode(Device_Serial0, &Virtual_Com_Port_StringSerial[2], 8);
Sergunb 0:8f0d870509fe 117 IntToUnicode(Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4);
Sergunb 0:8f0d870509fe 118 }
Sergunb 0:8f0d870509fe 119 }
Sergunb 0:8f0d870509fe 120
Sergunb 0:8f0d870509fe 121 /*******************************************************************************
Sergunb 0:8f0d870509fe 122 * Description : Convert Hex 32Bits value into char.
Sergunb 0:8f0d870509fe 123 *******************************************************************************/
Sergunb 0:8f0d870509fe 124 static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len)
Sergunb 0:8f0d870509fe 125 {
Sergunb 0:8f0d870509fe 126 uint8_t idx = 0;
Sergunb 0:8f0d870509fe 127
Sergunb 0:8f0d870509fe 128 for (idx = 0; idx < len; idx++)
Sergunb 0:8f0d870509fe 129 {
Sergunb 0:8f0d870509fe 130 if (((value >> 28)) < 0xA)
Sergunb 0:8f0d870509fe 131 {
Sergunb 0:8f0d870509fe 132 pbuf[2 * idx] = (value >> 28) + '0';
Sergunb 0:8f0d870509fe 133 }
Sergunb 0:8f0d870509fe 134 else
Sergunb 0:8f0d870509fe 135 {
Sergunb 0:8f0d870509fe 136 pbuf[2 * idx] = (value >> 28) + 'A' - 10;
Sergunb 0:8f0d870509fe 137 }
Sergunb 0:8f0d870509fe 138
Sergunb 0:8f0d870509fe 139 value = value << 4;
Sergunb 0:8f0d870509fe 140
Sergunb 0:8f0d870509fe 141 pbuf[2 * idx + 1] = 0;
Sergunb 0:8f0d870509fe 142 }
Sergunb 0:8f0d870509fe 143 }