1 | #define TI_1ms 1
|
2 | #define TI_10ms (TI_1ms * 10)
|
3 | #define TI_100ms (TI_10ms * 10)
|
4 | #define TI_1s (TI_100ms * 10)
|
5 |
|
6 |
|
7 | #define true 1
|
8 | #define false 0
|
9 |
|
10 |
|
11 |
|
12 | /* Includes ------------------------------------------------------------------*/
|
13 | #include "stm32l4xx_hal.h"
|
14 | //#include "usb_device.h"
|
15 |
|
16 |
|
17 | TIM_HandleTypeDef htim2;
|
18 |
|
19 |
|
20 | uint8_t IN_BYTE, led_status, fft_status;
|
21 | volatile uint16_t timer_led, fft_timer;
|
22 |
|
23 |
|
24 | void SystemClock_Config(void);
|
25 | static void MX_GPIO_Init(void);
|
26 | static void MX_TIM2_Init(void);
|
27 |
|
28 |
|
29 |
|
30 | void USB_SendInteger(long value)
|
31 | {
|
32 | char i[20];
|
33 | itoa(value, i, 10);
|
34 | CDC_Transmit_FS(i, strlen(i));
|
35 | }
|
36 |
|
37 |
|
38 |
|
39 | int main(void)
|
40 | {
|
41 | HAL_Init();
|
42 |
|
43 | SystemClock_Config();
|
44 | MX_GPIO_Init();
|
45 | // MX_USB_DEVICE_Init();
|
46 |
|
47 |
|
48 | //switch in circle on
|
49 | HAL_GPIO_WritePin(GPIOB, (GPIO_PIN_2), GPIO_PIN_SET);
|
50 | // HAL_Delay(300); //fehler
|
51 | HAL_GPIO_WritePin(GPIOE, (GPIO_PIN_8), GPIO_PIN_SET);
|
52 | // HAL_Delay(300); //fehler
|
53 |
|
54 |
|
55 | MX_TIM2_Init(); //now starts interrupt for timer
|
56 |
|
57 |
|
58 | while (1)
|
59 | {
|
60 | /*
|
61 | if (VCP_read(&IN_BYTE, 1))
|
62 | {
|
63 | if (IN_BYTE == 's')
|
64 | {
|
65 | CDC_Transmit_FS("FFT starts... Please wait\n");
|
66 |
|
67 | CDC_Transmit_FS("FFT-Time with DSP: ");
|
68 | USB_SendInteger(fft_timer);
|
69 | CDC_Transmit_FS("\n\n", strlen("\n\n"));
|
70 | }
|
71 | else
|
72 | CDC_Transmit_FS("STM32-Discovery Board for Testing DSP-FFT Performance. Start with sending a 's'\n\n", strlen("STM32-Discovery Board for Testing DSP-FFT Performance. Start with sending a 's'\n\n"));
|
73 |
|
74 |
|
75 | IN_BYTE = 0;
|
76 | }
|
77 | */
|
78 |
|
79 |
|
80 | if (led_status == 2)
|
81 | {
|
82 | CDC_Transmit_FS("Button-Pressed-Interrupt\n", strlen("Button-Pressed-Interrupt\n"));
|
83 | led_status = 0;
|
84 |
|
85 | timer_led = (TI_100ms * 2);
|
86 | }
|
87 |
|
88 |
|
89 | if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)) HAL_GPIO_WritePin(GPIOB, (GPIO_PIN_2), GPIO_PIN_RESET);
|
90 | else HAL_GPIO_WritePin(GPIOB, (GPIO_PIN_2), GPIO_PIN_SET);
|
91 | }
|
92 | }
|
93 |
|
94 |
|
95 | void SystemClock_Config(void)
|
96 | {
|
97 | RCC_OscInitTypeDef RCC_OscInitStruct;
|
98 | RCC_ClkInitTypeDef RCC_ClkInitStruct;
|
99 | RCC_PeriphCLKInitTypeDef PeriphClkInit;
|
100 |
|
101 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE|RCC_OSCILLATORTYPE_MSI;
|
102 | RCC_OscInitStruct.LSEState = RCC_LSE_OFF;
|
103 | RCC_OscInitStruct.MSIState = RCC_MSI_ON;
|
104 | RCC_OscInitStruct.MSICalibrationValue = 0;
|
105 | RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_6;
|
106 | RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
|
107 | RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
|
108 | RCC_OscInitStruct.PLL.PLLM = 1;
|
109 | RCC_OscInitStruct.PLL.PLLN = 40;
|
110 | RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
|
111 | RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
|
112 | RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
|
113 | HAL_RCC_OscConfig(&RCC_OscInitStruct);
|
114 |
|
115 | RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
116 | |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
|
117 | RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
|
118 | RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
|
119 | RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
|
120 | RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
|
121 | HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4);
|
122 |
|
123 | PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
|
124 | PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
|
125 | PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_MSI;
|
126 | PeriphClkInit.PLLSAI1.PLLSAI1M = 1;
|
127 | PeriphClkInit.PLLSAI1.PLLSAI1N = 24;
|
128 | PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
|
129 | PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
|
130 | PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
|
131 | PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_48M2CLK;
|
132 | HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
|
133 |
|
134 | __HAL_RCC_PWR_CLK_ENABLE();
|
135 | HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
|
136 |
|
137 | HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
|
138 |
|
139 | HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
140 |
|
141 | HAL_RCCEx_EnableMSIPLLMode();
|
142 |
|
143 | /* SysTick_IRQn interrupt configuration */
|
144 | HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
|
145 | }
|
146 |
|
147 | /* TIM2 init function */
|
148 | static void MX_TIM2_Init(void)
|
149 | {
|
150 | htim2.Instance = TIM2;
|
151 | htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
152 | htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;
|
153 | htim2.Init.Prescaler = 400;
|
154 | htim2.Init.Period = 200; //~every ms interrupt! Needable for time
|
155 | htim2.Init.RepetitionCounter = 0;
|
156 |
|
157 | HAL_NVIC_SetPriority(TIM2_IRQn, 0, 1);
|
158 | HAL_NVIC_EnableIRQ(TIM2_IRQn);
|
159 |
|
160 | // HAL_TIM_Base_Init(&htim2); //fehler
|
161 | // HAL_TIM_Base_Start_IT(&htim2); //fehler
|
162 | }
|
163 |
|
164 |
|
165 | static void MX_GPIO_Init(void)
|
166 | {
|
167 | GPIO_InitTypeDef GPIO_InitStruct;
|
168 |
|
169 | /* GPIO Ports Clock Enable */
|
170 | __HAL_RCC_GPIOA_CLK_ENABLE();
|
171 | __HAL_RCC_GPIOB_CLK_ENABLE();
|
172 | __HAL_RCC_GPIOC_CLK_ENABLE();
|
173 | __HAL_RCC_GPIOD_CLK_ENABLE();
|
174 | __HAL_RCC_GPIOE_CLK_ENABLE();
|
175 | __HAL_RCC_GPIOH_CLK_ENABLE();
|
176 |
|
177 |
|
178 | //led 1 und 2 as output
|
179 | /*Configure GPIO pins : all LEDs */
|
180 | GPIO_InitStruct.Pin = GPIO_PIN_2;
|
181 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
182 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
183 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
184 | HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
185 |
|
186 |
|
187 | GPIO_InitStruct.Pin = GPIO_PIN_8;
|
188 | GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
189 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
190 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
191 | HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
|
192 |
|
193 |
|
194 | /*Configure GPIO pin : PA0 */
|
195 | GPIO_InitStruct.Pin = GPIO_PIN_0;
|
196 | GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; //GPIO_MODE_IT_RISING
|
197 | GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
198 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
199 |
|
200 | /* EXTI interrupt init*/
|
201 | HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
|
202 | HAL_NVIC_EnableIRQ(EXTI0_IRQn);
|
203 |
|
204 |
|
205 | /*Configure GPIO pin : PA1 */
|
206 | GPIO_InitStruct.Pin = GPIO_PIN_1;
|
207 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
208 | GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
209 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
210 |
|
211 |
|
212 | //*Configure GPIO pins : PA10 PA11 PA12 */ //for USB
|
213 | GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12;
|
214 | GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
215 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
216 | GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
217 | GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;
|
218 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
219 | }
|
220 |
|
221 |
|
222 | void EXTI0_IRQHandler(void)
|
223 | {
|
224 | if (led_status == 1)
|
225 | {
|
226 | HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
|
227 | led_status = 2;
|
228 | }
|
229 |
|
230 | HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
|
231 | }
|
232 |
|
233 |
|
234 | void TIM2_IRQHandler(void)
|
235 | {
|
236 | HAL_TIM_IRQHandler(&htim2);
|
237 |
|
238 |
|
239 | if (timer_led) timer_led--;
|
240 |
|
241 |
|
242 | //auswertung
|
243 | if (!timer_led)
|
244 | {
|
245 | timer_led = (TI_100ms * 5);
|
246 | HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_2);
|
247 | }
|
248 |
|
249 | if (!timer_led && !led_status) led_status = 1;
|
250 | }
|
251 |
|
252 |
|
253 | #ifdef USE_FULL_ASSERT
|
254 | void assert_failed(uint8_t* file, uint32_t line)
|
255 | {
|
256 | }
|
257 | #endif
|