1 | #include <stddef.h>
|
2 | #include "stm32f10x.h"
|
3 |
|
4 | volatile uint8_t my_EXTI = 0;
|
5 |
|
6 | //***********************************************************************************************
|
7 | // System-Einstellungen
|
8 | //***********************************************************************************************
|
9 | void SetupSystem (void) {
|
10 | GPIO_InitTypeDef GPIO_InitStructure;
|
11 |
|
12 | RCC_DeInit (); // RCC System Reset(for debug purpose)
|
13 |
|
14 | // Enable HSE (Umschaltung auf externen Quarz)
|
15 | RCC_HSEConfig (RCC_HSE_ON);
|
16 |
|
17 | // HSE-Umschaltung abwarten
|
18 | while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
|
19 |
|
20 | // System-Taktung
|
21 | RCC_HCLKConfig (RCC_SYSCLK_Div1); // HCLK = SYSCLK
|
22 | RCC_PCLK2Config (RCC_HCLK_Div1); // PCLK2 (APB2) = HCLK
|
23 | RCC_PCLK1Config (RCC_HCLK_Div2); // PCLK1 (APB1) = HCLK/2
|
24 | RCC_ADCCLKConfig (RCC_PCLK2_Div6); // ADCCLK = PCLK2/6
|
25 |
|
26 | // FLASH-Speicher Zugriff
|
27 | FLASH_SetLatency(FLASH_Latency_2); // Flash - 2 wait states
|
28 | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); // Pipeline freigeben
|
29 |
|
30 | // PLL Konfiguration
|
31 | // PLLCLK = 8MHz * 9 = 72 MHz
|
32 | RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // Externer Quarz, Faktor 9
|
33 | RCC_PLLCmd (ENABLE); // Enable PLL
|
34 |
|
35 | // PLL-Konfiguration abwarten
|
36 | while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
|
37 |
|
38 | // PLL als System-Takt auswählen
|
39 | RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
|
40 |
|
41 | // PLL-Umschaltung abwarten
|
42 | while (RCC_GetSYSCLKSource() != 0x08);
|
43 |
|
44 | RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIO A Takt freigeben
|
45 |
|
46 | /* Configure PA.00 pin as input PULL-UP */
|
47 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
|
48 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
49 | GPIO_Init(GPIOA, &GPIO_InitStructure);
|
50 |
|
51 | /* Connect EXTI0 Line to PA.00 pin */
|
52 | GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
|
53 | }
|
54 |
|
55 | //***********************************************************************************************
|
56 | // Nested Vectored Interrupt Controller initialisieren
|
57 | //***********************************************************************************************
|
58 | void NVIC_Configuration (void) {
|
59 | NVIC_InitTypeDef NVIC_InitStructure;
|
60 | EXTI_InitTypeDef EXTI_InitStructure;
|
61 |
|
62 | EXTI_DeInit();
|
63 |
|
64 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); // FLASH Vector Table
|
65 | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // Pre = 2 Bit / Sub = 2 Bit
|
66 |
|
67 | /* Configure EXTI0 line */
|
68 | EXTI_InitStructure.EXTI_Line = EXTI_Line0;
|
69 | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
|
70 | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
71 | EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
72 | EXTI_Init(&EXTI_InitStructure);
|
73 |
|
74 | /* Enable and set EXTI0 Interrupt to the lowest priority */
|
75 | NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
|
76 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
77 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
78 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
79 | NVIC_Init(&NVIC_InitStructure);
|
80 | }
|
81 |
|
82 |
|
83 | // sollte ins stm32f10x_it.c
|
84 | extern volatile uint8_t my_EXTI;
|
85 | void EXTI0_IRQHandler(void)
|
86 | {
|
87 | if(EXTI_GetITStatus(EXTI_Line0) != RESET)
|
88 | {
|
89 | my_EXTI = 1;
|
90 |
|
91 | /* Clear the EXTI line 0 pending bit */
|
92 | EXTI_ClearITPendingBit(EXTI_Line0);
|
93 | }
|
94 | }
|
95 |
|
96 |
|
97 | // MAIN
|
98 | main...
|
99 |
|
100 | SetupSystem();
|
101 | NVIC_Configuration():
|
102 | while(1) {
|
103 |
|
104 | if (my_EXTI) {
|
105 | // mach was , LED toggle oder so
|
106 | // Pause
|
107 | my_EXTI = 0;
|
108 | }
|
109 |
|
110 | }
|