comparison BootLoader/Src/ostc_mini.c @ 985:aeafa631147d BootloaderOstc5

Exchange shared files with Bootloader specific mini version
author Ideenmodellierer
date Sun, 30 Mar 2025 21:32:37 +0200 (6 weeks ago)
parents
children
comparison
equal deleted inserted replaced
984:41136649b90d 985:aeafa631147d
1 ///////////////////////////////////////////////////////////////////////////////
2 /// -*- coding: UTF-8 -*-
3 ///
4 /// \file Discovery/Src/ostc.c
5 /// \brief Hardware specific configuration
6 /// \author Heinrichs Weikamp gmbh
7 /// \date 05-Dec-2014
8 ///
9 /// \details
10 ///
11 /// $Id$
12 ///////////////////////////////////////////////////////////////////////////////
13 /// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh
14 ///
15 /// This program is free software: you can redistribute it and/or modify
16 /// it under the terms of the GNU General Public License as published by
17 /// the Free Software Foundation, either version 3 of the License, or
18 /// (at your option) any later version.
19 ///
20 /// This program is distributed in the hope that it will be useful,
21 /// but WITHOUT ANY WARRANTY; without even the implied warranty of
22 /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 /// GNU General Public License for more details.
24 ///
25 /// You should have received a copy of the GNU General Public License
26 /// along with this program. If not, see <http://www.gnu.org/licenses/>.
27 //////////////////////////////////////////////////////////////////////////////
28
29 /* Includes ------------------------------------------------------------------*/
30 #include "ostc.h"
31 #include "stm32f4xx_hal.h"
32
33
34 /* Exported variables --------------------------------------------------------*/
35 SPI_HandleTypeDef hspiDisplay;
36 SPI_HandleTypeDef cpu2DmaSpi;
37
38
39 UART_HandleTypeDef UartHandle;
40 #ifdef USART_PIEZO
41 UART_HandleTypeDef UartPiezoTxHandle;
42 #endif
43 UART_HandleTypeDef UartIR_HUD_Handle;
44
45 __IO ITStatus UartReady = RESET;
46 __IO ITStatus UartReadyHUD = RESET;
47
48 /* Private types -------------------------------------------------------------*/
49
50 /* Private variables ---------------------------------------------------------*/
51
52 /* Private variables with external access via get_xxx() function -------------*/
53
54 /* Exported functions --------------------------------------------------------*/
55
56 /** SPI init function
57 * called from HAL
58 */
59 void MX_SPI_Init(void)
60 {
61 hspiDisplay.Instance = SPI5;
62 hspiDisplay.Init.Mode = SPI_MODE_MASTER;
63 hspiDisplay.Init.Direction = SPI_DIRECTION_2LINES;
64 hspiDisplay.Init.DataSize = SPI_DATASIZE_8BIT;
65 hspiDisplay.Init.CLKPolarity = SPI_POLARITY_LOW;
66 hspiDisplay.Init.CLKPhase = SPI_PHASE_1EDGE;
67 hspiDisplay.Init.NSS = SPI_NSS_SOFT;
68 hspiDisplay.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;//SPI_BAUDRATEPRESCALER_4;//SPI_BAUDRATEPRESCALER_256;
69 hspiDisplay.Init.FirstBit = SPI_FIRSTBIT_MSB;
70 hspiDisplay.Init.TIMode = SPI_TIMODE_DISABLED;
71 hspiDisplay.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
72 HAL_SPI_Init(&hspiDisplay);
73
74 cpu2DmaSpi.Instance = SPI1;
75 cpu2DmaSpi.Init.Mode = SPI_MODE_MASTER;
76 cpu2DmaSpi.Init.Direction = SPI_DIRECTION_2LINES;
77 cpu2DmaSpi.Init.DataSize = SPI_DATASIZE_8BIT;
78 cpu2DmaSpi.Init.CLKPolarity = SPI_POLARITY_LOW;
79 cpu2DmaSpi.Init.CLKPhase = SPI_PHASE_1EDGE;
80 cpu2DmaSpi.Init.NSS = SPI_NSS_SOFT;//SPI_NSS_HARD_OUTPUT;//SPI_NSS_SOFT;
81 cpu2DmaSpi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
82 cpu2DmaSpi.Init.FirstBit = SPI_FIRSTBIT_MSB;
83 cpu2DmaSpi.Init.TIMode = SPI_TIMODE_DISABLED;
84 cpu2DmaSpi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
85 cpu2DmaSpi.Init.CRCPolynomial = 7;
86
87 HAL_SPI_Init(&cpu2DmaSpi);
88 }
89
90
91 void MX_GPIO_Backlight_max_static_only_Init(void)
92 {
93 GPIO_InitTypeDef GPIO_InitStruct;
94 TIM_BACKLIGHT_GPIO_ENABLE();
95
96 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
97 GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
98 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
99
100 GPIO_InitStruct.Pin = TIM_BACKLIGHT_PIN;
101 HAL_GPIO_Init(TIM_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
102
103 HAL_GPIO_WritePin(TIM_BACKLIGHT_GPIO_PORT,TIM_BACKLIGHT_PIN,GPIO_PIN_SET);
104 }
105
106
107 void MX_GPIO_One_Button_only_Init(void)
108 {
109 GPIO_InitTypeDef GPIO_InitStruct;
110 BUTTON_NEXT_GPIO_ENABLE();
111
112 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
113 GPIO_InitStruct.Pull = GPIO_NOPULL;//GPIO_PULLUP; /* should be normally high */
114 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
115
116 GPIO_InitStruct.Pin = BUTTON_NEXT_PIN;
117 HAL_GPIO_Init(BUTTON_NEXT_GPIO_PORT, &GPIO_InitStruct);
118 }
119
120
121 GPIO_PinState MX_GPIO_Read_The_One_Button(void)
122 {
123 return HAL_GPIO_ReadPin(BUTTON_NEXT_GPIO_PORT, BUTTON_NEXT_PIN);
124 }
125
126 void MX_GPIO_Init(void)
127 {
128 GPIO_InitTypeDef GPIO_InitStruct;
129
130 DISPLAY_CSB_GPIO_ENABLE();
131 DISPLAY_RESETB_GPIO_ENABLE();
132 EXTFLASH_CSB_GPIO_ENABLE();
133 SMALLCPU_CSB_GPIO_ENABLE();
134 OSCILLOSCOPE_GPIO_ENABLE();
135 OSCILLOSCOPE2_GPIO_ENABLE();
136 BLE_UBLOX_DSR_GPIO_ENABLE();
137
138 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
139 GPIO_InitStruct.Pull = GPIO_PULLUP;
140 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
141
142 GPIO_InitStruct.Pin = DISPLAY_CSB_PIN;
143 HAL_GPIO_Init(DISPLAY_CSB_GPIO_PORT, &GPIO_InitStruct);
144
145 GPIO_InitStruct.Pin = DISPLAY_RESETB_PIN;
146 HAL_GPIO_Init(DISPLAY_RESETB_GPIO_PORT, &GPIO_InitStruct);
147
148 GPIO_InitStruct.Pin = EXTFLASH_CSB_PIN;
149 HAL_GPIO_Init(EXTFLASH_CSB_GPIO_PORT, &GPIO_InitStruct);
150
151 GPIO_InitStruct.Pin = OSCILLOSCOPE_PIN;
152 HAL_GPIO_Init(OSCILLOSCOPE_GPIO_PORT, &GPIO_InitStruct);
153
154 GPIO_InitStruct.Pin = OSCILLOSCOPE2_PIN;
155 HAL_GPIO_Init(OSCILLOSCOPE2_GPIO_PORT, &GPIO_InitStruct);
156
157 #ifdef DISPLAY_BACKLIGHT_PIN
158 DISPLAY_BACKLIGHT_GPIO_ENABLE();
159 GPIO_InitStruct.Pin = DISPLAY_BACKLIGHT_PIN;
160 HAL_GPIO_Init(DISPLAY_BACKLIGHT_GPIO_PORT, &GPIO_InitStruct);
161 HAL_GPIO_WritePin(DISPLAY_BACKLIGHT_GPIO_PORT,DISPLAY_BACKLIGHT_PIN,GPIO_PIN_SET);
162 #endif
163
164 #ifdef SMALLCPU_CSB_PIN
165 SMALLCPU_CSB_GPIO_ENABLE();
166 GPIO_InitStruct.Pin = SMALLCPU_CSB_PIN;
167 HAL_GPIO_Init(SMALLCPU_CSB_GPIO_PORT, &GPIO_InitStruct);
168 HAL_GPIO_WritePin(SMALLCPU_CSB_GPIO_PORT,SMALLCPU_CSB_PIN,GPIO_PIN_SET);
169 #endif
170
171 #ifdef SMALLCPU_BOOT0_PIN
172 GPIO_InitStruct.Pull = GPIO_NOPULL;
173 SMALLCPU_BOOT0_GPIO_ENABLE();
174 GPIO_InitStruct.Pin = SMALLCPU_BOOT0_PIN;
175 HAL_GPIO_Init(SMALLCPU_BOOT0_GPIO_PORT, &GPIO_InitStruct);
176 HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
177 GPIO_InitStruct.Pull = GPIO_PULLUP;
178 #endif
179
180 #ifdef IR_HUD_ENABLE_PIN
181 IR_HUD_ENABLE_GPIO_ENABLE();
182 GPIO_InitStruct.Pin = IR_HUD_ENABLE_PIN;
183 GPIO_InitStruct.Pull = GPIO_NOPULL;
184 HAL_GPIO_Init(IR_HUD_ENABLE_GPIO_PORT, &GPIO_InitStruct);
185 HAL_GPIO_WritePin(IR_HUD_ENABLE_GPIO_PORT,IR_HUD_ENABLE_PIN,GPIO_PIN_SET);
186 GPIO_InitStruct.Pull = GPIO_PULLUP;
187 #endif
188
189 #ifdef BLE_NENABLE_PIN
190 BLE_NENABLE_GPIO_ENABLE();
191 MX_Bluetooth_PowerOff();
192 #endif
193
194 #ifdef TESTPIN
195 GPIO_InitStruct.Pull = GPIO_PULLUP;
196 TEST_GPIO_ENABLE();
197 GPIO_InitStruct.Pin = TEST_PIN;
198 HAL_GPIO_Init(TEST_GPIO_PORT, &GPIO_InitStruct);
199 HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
200 GPIO_InitStruct.Pull = GPIO_PULLUP;
201 #endif
202 }
203
204
205 void MX_TestPin_High(void)
206 {
207 #ifdef TESTPIN
208 HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_SET);
209 #endif
210 }
211
212
213 void MX_TestPin_Low(void)
214 {
215 #ifdef TESTPIN
216 HAL_GPIO_WritePin(TEST_GPIO_PORT,TEST_PIN,GPIO_PIN_RESET);
217 #endif
218 }
219
220 void MX_Bluetooth_PowerOn(void)
221 {
222 GPIO_InitTypeDef GPIO_InitStruct;
223 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
224 GPIO_InitStruct.Pull = GPIO_NOPULL;
225 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
226 GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
227 HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
228 HAL_GPIO_WritePin(BLE_NENABLE_GPIO_PORT,BLE_NENABLE_PIN,GPIO_PIN_RESET);
229
230 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
231 GPIO_InitStruct.Pull = GPIO_PULLDOWN;
232 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
233 GPIO_InitStruct.Pin = BLE_UBLOX_DSR_PIN;
234 HAL_GPIO_Init(BLE_UBLOX_DSR_GPIO_PORT, &GPIO_InitStruct);
235 HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
236 }
237
238
239 void MX_Bluetooth_PowerOff(void)
240 {
241 GPIO_InitTypeDef GPIO_InitStruct;
242 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
243 GPIO_InitStruct.Pin = BLE_NENABLE_PIN;
244 GPIO_InitStruct.Pull = GPIO_NOPULL;
245 HAL_GPIO_Init(BLE_NENABLE_GPIO_PORT, &GPIO_InitStruct);
246 HAL_GPIO_WritePin(BLE_UBLOX_DSR_GPIO_PORT,BLE_UBLOX_DSR_PIN,GPIO_PIN_RESET);
247 }
248
249
250 void MX_SmallCPU_Reset_To_Boot(void)
251 {
252 #ifdef SMALLCPU_NRESET_PIN
253 GPIO_InitTypeDef GPIO_InitStruct;
254
255 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
256 GPIO_InitStruct.Pull = GPIO_NOPULL;
257 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
258
259 SMALLCPU_NRESET_GPIO_ENABLE();
260 GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
261 HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
262 HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
263 HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_SET);
264 HAL_Delay(2);
265 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
266 HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
267 HAL_Delay(100);
268 HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
269 #endif
270 }
271
272
273 void MX_SmallCPU_NO_Reset_Helper(void)
274 {
275 #ifdef SMALLCPU_NRESET_PIN
276 GPIO_InitTypeDef GPIO_InitStruct;
277
278 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
279 GPIO_InitStruct.Pull = GPIO_NOPULL;
280 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
281
282 SMALLCPU_NRESET_GPIO_ENABLE();
283 HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
284 HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_SET);
285 // HAL_Delay(100);
286 // GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
287 // HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
288 #endif
289 }
290
291
292 void MX_SmallCPU_Reset_To_Standard(void)
293 {
294 #ifdef SMALLCPU_NRESET_PIN
295 GPIO_InitTypeDef GPIO_InitStruct;
296
297 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
298 GPIO_InitStruct.Pull = GPIO_NOPULL;
299 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
300
301 SMALLCPU_NRESET_GPIO_ENABLE();
302 GPIO_InitStruct.Pin = SMALLCPU_NRESET_PIN;
303 HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
304 HAL_GPIO_WritePin(SMALLCPU_NRESET_GPIO_PORT,SMALLCPU_NRESET_PIN,GPIO_PIN_RESET);
305 HAL_GPIO_WritePin(SMALLCPU_BOOT0_GPIO_PORT,SMALLCPU_BOOT0_PIN,GPIO_PIN_RESET);
306 HAL_Delay(2);
307 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
308 HAL_GPIO_Init(SMALLCPU_NRESET_GPIO_PORT, &GPIO_InitStruct);
309 #endif
310 }
311
312
313 uint8_t MX_UART_ButtonAdjust(uint8_t *array)
314 {
315 #ifdef USART_PIEZO
316 uint8_t answer[4];
317 HAL_UART_Transmit(&UartPiezoTxHandle,array,4,1000);
318 HAL_UART_Receive(&UartPiezoTxHandle,answer,4,2000);
319 if( (answer[0] == array[0])
320 &&(answer[1] == array[1])
321 &&(answer[2] == array[2])
322 &&(answer[3] == array[3]))
323 return 1;
324 #endif
325 return 0;
326 }
327
328
329 void MX_UART_Init(void)
330 {
331 /*##-1- Configure the UART peripheral ######################################*/
332 /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
333 /* UART1 configured as follow:
334 - Word Length = 8 Bits
335 - Stop Bit = One Stop bit
336 - Parity = None
337 - BaudRate = 9600 baud
338 - Hardware flow control disabled (RTS and CTS signals) */
339
340 #ifdef USARTx_CTS_PIN
341 UartHandle.Init.HwFlowCtl = UART_HWCONTROL_RTS_CTS;
342 #else
343 UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
344 #endif
345 UartHandle.Instance = USARTx;
346 UartHandle.Init.BaudRate = 115200;
347 UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
348 UartHandle.Init.StopBits = UART_STOPBITS_1;
349 UartHandle.Init.Parity = UART_PARITY_NONE;
350 UartHandle.Init.Mode = UART_MODE_TX_RX;
351 HAL_UART_Init(&UartHandle);
352
353 #ifdef USART_PIEZO
354 UartPiezoTxHandle.Instance = USART_PIEZO;
355 UartPiezoTxHandle.Init.BaudRate = 1200;
356 UartPiezoTxHandle.Init.WordLength = UART_WORDLENGTH_8B;
357 UartPiezoTxHandle.Init.StopBits = UART_STOPBITS_1;
358 UartPiezoTxHandle.Init.Parity = UART_PARITY_NONE;
359 UartPiezoTxHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
360 UartPiezoTxHandle.Init.Mode = UART_MODE_TX_RX;
361
362 HAL_UART_Init(&UartPiezoTxHandle);
363 #endif
364
365 #ifdef USART_IR_HUD
366 UartIR_HUD_Handle.Instance = USART_IR_HUD;
367 UartIR_HUD_Handle.Init.BaudRate = 2400;
368 UartIR_HUD_Handle.Init.WordLength = UART_WORDLENGTH_8B;
369 UartIR_HUD_Handle.Init.StopBits = UART_STOPBITS_1;
370 UartIR_HUD_Handle.Init.Parity = UART_PARITY_NONE;
371 UartIR_HUD_Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
372 UartIR_HUD_Handle.Init.Mode = UART_MODE_TX_RX;
373
374 HAL_UART_Init(&UartIR_HUD_Handle);
375 #endif
376 }
377
378 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
379 {
380 if(huart == &UartHandle)
381 UartReady = SET;
382 }
383
384
385 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
386 {
387 if(huart == &UartHandle)
388 UartReady = SET;
389 else
390 if(huart == &UartIR_HUD_Handle)
391 {
392 UartReadyHUD = SET;
393 }
394 }
395
396 void MX_tell_reset_logik_alles_ok(void)
397 {
398 #ifdef RESET_LOGIC_ALLES_OK_PIN
399 GPIO_InitTypeDef GPIO_InitStruct;
400
401 RESET_LOGIC_ALLES_OK_GPIO_ENABLE();
402
403 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
404 GPIO_InitStruct.Pull = GPIO_NOPULL;
405 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
406 GPIO_InitStruct.Pin = RESET_LOGIC_ALLES_OK_PIN;
407 HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
408
409 HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_RESET);
410 HAL_Delay(1);
411 HAL_GPIO_WritePin(RESET_LOGIC_ALLES_OK_GPIO_PORT,RESET_LOGIC_ALLES_OK_PIN,GPIO_PIN_SET);
412
413 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
414 HAL_GPIO_Init(RESET_LOGIC_ALLES_OK_GPIO_PORT, &GPIO_InitStruct);
415 #endif
416 }