1 | static void RCC_Configuration(void) {
|
2 |
|
3 | //ErrorStatus HSEStartUpStatus = SUCCESS;
|
4 |
|
5 | RCC_DeInit(); // RCC system reset(for debug purpose)
|
6 | RCC_HSEConfig(RCC_HSE_ON); // Enable HSE
|
7 | HSEStartUpStatus = RCC_WaitForHSEStartUp(); // Wait till HSE is ready
|
8 |
|
9 | if (HSEStartUpStatus == SUCCESS) {
|
10 |
|
11 | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // Enable Prefetch Buffer
|
12 | FLASH_SetLatency(FLASH_Latency_2); // Flash 2 wait state
|
13 | RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK
|
14 | RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK
|
15 | RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2
|
16 | RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_4); // PLLCLK = 16MHz * 4 = 64 MHz
|
17 | RCC_PLLCmd(ENABLE); // Enable PLL
|
18 | while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } // Wait till PLL is ready
|
19 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // Select PLL as system clock source
|
20 | while(RCC_GetSYSCLKSource() != 0x08) { } // Wait till PLL is used as system clock source
|
21 |
|
22 | } else {
|
23 | // If HSE fails to start-up, the application will have wrong clock configuration.
|
24 | // User can add here some code to deal with this error
|
25 | while(1) { }
|
26 | }
|
27 |
|
28 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 |
|
29 | RCC_APB1Periph_USART3 , ENABLE); // RCC_APB1Periph_I2C1 |
|
30 |
|
31 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOE |
|
32 | RCC_APB2Periph_USART1 | RCC_APB2Periph_ADC1 |
|
33 | RCC_APB2Periph_AFIO, ENABLE);
|
34 |
|
35 | RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
|
36 |
|
37 | }
|
38 |
|
39 | static void GPIO_Configuration(void) {
|
40 |
|
41 | GPIO_InitTypeDef GPIO_InitStructure;
|
42 |
|
43 | // SERVO OUTPUT
|
44 | // PA8 = SOUT1 | PA11 = SOUT2 | PA12 = SOUT3 | PA13 = SOUT4 |
|
45 | // PA14 = SOUT5 | PA15 = SOUT6 | PB4 = SOUT7 | PB5 = SOUT8
|
46 | // SOUT4 (TMS/SWDIO), SOUT6 (JTDI) , SOUT7 (JNTRST) ist beim einschalten ON
|
47 |
|
48 | GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // Disable JTAG/SWD so pins are availble
|
49 |
|
50 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
|
51 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
|
52 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
53 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
54 | GPIOA->BRR = (GPIO_Pin_8 | GPIO_Pin_14 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_15); // ServoPins aus
|
55 |
|
56 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
|
57 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
|
58 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
59 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
60 | GPIOB->BRR = (GPIO_Pin_4 | GPIO_Pin_5); // ServoPins aus
|
61 |
|
62 | //........
|
63 | }
|
64 |
|
65 | int main(void) {
|
66 |
|
67 | RCC_Configuration();
|
68 | GPIO_Configuration();
|
69 | //....
|
70 |
|
71 | }
|