User | Revision | Line number | New 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
|
}
|