1 | #include "stm32f10x_lib.h" // STM32F10x Library Definitions
|
2 | #include <stdio.h>
|
3 | #include "STM32_Init.h" // STM32 Initialization
|
4 | #include "stm32f10x_usart.h"
|
5 |
|
6 | //#define UART UART_3
|
7 | typedef unsigned int Int32U; // Unsigned 32 bit quantity
|
8 |
|
9 | #define LOOP_DLY_100US 450
|
10 |
|
11 |
|
12 | void Clk_Init (void)
|
13 | {
|
14 | // 1. Clocking the controller from internal HSI RC (8 MHz)
|
15 | RCC_HSICmd(ENABLE);
|
16 | // wait until the HSI is ready
|
17 | while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
|
18 | RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
|
19 | // 2. Enable ext. high frequency OSC
|
20 | RCC_HSEConfig(RCC_HSE_ON);
|
21 | // wait until the HSE is ready
|
22 | while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
|
23 | // 3. Init PLL
|
24 | RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); // 72MHz
|
25 | RCC_PLLCmd(ENABLE);
|
26 | // wait until the PLL is ready
|
27 | while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
|
28 | // 4. Set system clock dividers
|
29 | RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
|
30 | RCC_ADCCLKConfig(RCC_PCLK2_Div8);
|
31 | RCC_PCLK2Config(RCC_HCLK_Div1);
|
32 | RCC_PCLK1Config(RCC_HCLK_Div2);
|
33 | RCC_HCLKConfig(RCC_SYSCLK_Div1);
|
34 | #ifdef EMB_FLASH
|
35 | // 5. Init Embedded Flash
|
36 | // Zero wait state, if 0 < HCLK 24 MHz
|
37 | // One wait state, if 24 MHz < HCLK 56 MHz
|
38 | // Two wait states, if 56 MHz < HCLK 72 MHz
|
39 | // Flash wait state
|
40 | FLASH_SetLatency(FLASH_Latency_2);
|
41 | // Half cycle access
|
42 | FLASH_HalfCycleAccessCmd(FLASH_HalfCycleAccess_Disable);
|
43 | // Prefetch buffer
|
44 | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
|
45 | #endif // EMB_FLASH
|
46 | // 5. Clock system from PLL
|
47 | RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
|
48 | }
|
49 |
|
50 | /*************************************************************************
|
51 | * Function Name: Dly100us
|
52 | * Parameters: Int32U Dly
|
53 | *
|
54 | * Return: none
|
55 | *
|
56 | * Description: Delay Dly * 100us
|
57 | *
|
58 | *************************************************************************/
|
59 | void Dly100us(void *arg)
|
60 | {
|
61 | Int32U Dly = (Int32U)arg;
|
62 | while(Dly--)
|
63 | {
|
64 | for(volatile int i = LOOP_DLY_100US; i; i--);
|
65 | }
|
66 | }
|
67 |
|
68 |
|
69 | void UART_init()
|
70 | {
|
71 |
|
72 | }
|
73 | /*************************************************************************
|
74 | * Function Name: main
|
75 | * Parameters: none
|
76 | *
|
77 | * Return: none
|
78 | *
|
79 | * Description: main
|
80 | *
|
81 | *************************************************************************/
|
82 | void main(void)
|
83 | {
|
84 | GPIO_InitTypeDef GPIO_InitStructure;
|
85 | NVIC_InitTypeDef NVIC_InitStructure;
|
86 | #ifdef DEBUG
|
87 | debug();
|
88 | #endif
|
89 |
|
90 | // Init clock system
|
91 | Clk_Init();
|
92 |
|
93 | // NVIC init
|
94 | #ifndef EMB_FLASH
|
95 | /* Set the Vector Table base location at 0x20000000 */
|
96 | NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
|
97 | #else /* VECT_TAB_FLASH */
|
98 | /* Set the Vector Table base location at 0x08000000 */
|
99 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
|
100 | #endif
|
101 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
|
102 |
|
103 | // Enable timer counting
|
104 | //TIM1_Cmd(ENABLE);
|
105 |
|
106 |
|
107 | UART_init();
|
108 |
|
109 |
|
110 | while(1)
|
111 | {
|
112 |
|
113 |
|
114 |
|
115 | }
|
116 | }
|
117 | #ifdef DEBUG
|
118 |
|
119 | void assert_failed(u8* file, u32 line)
|
120 | {
|
121 | /* User can add his own implementation to report the file name and line number,
|
122 | ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
123 |
|
124 | /* Infinite loop */
|
125 | while (1)
|
126 | {
|
127 | }
|
128 | }
|
129 | #endif
|