146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 207
1

HardFault при запуске

14.01.2022, 20:28. Показов 671. Ответов 17
Метки нет (Все метки)

Привет всем! Имеется STM320F072B-DISCO, пытаюсь в мигание светодиодом, IDE - STM32Cube.

При пуске ничего не происходит, если включить отладку - валится в HardFault_Handler. При этом я в коде, который автоматом сгенерился при создании проекта, ничего не вносил. Pinout view по дефолту, Clock configuration тоже. Прошивку обновил. В STM32 я новичок, поэтому подозреваю, что причина в чем-то банальном, вроде неправильной настройки чего-нибудь. Поэтому хотелось бы узнать, в какую сторону лучше копать, и, может, у меня какая-нибудь классическая известная запара. Насколько я понял, HardFault - это совсем общее сообщение об ошибке, и чтобы понять, что именно не так, нужно откуда-то подчерпнуть информацию. Может быть, у меня конфиги неверные, поэтому прилагаю файлы проекта:

main.c:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
 
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
 
/* USER CODE END Includes */
 
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
 
/* USER CODE END PTD */
 
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
 
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
 
/* USER CODE END PM */
 
/* Private variables ---------------------------------------------------------*/
 
/* USER CODE BEGIN PV */
 
/* USER CODE END PV */
 
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
 
/* USER CODE END PFP */
 
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
 
/* USER CODE END 0 */
 
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */
 
  /* USER CODE END 1 */
 
  /* MCU Configuration--------------------------------------------------------*/
 
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
 
  /* USER CODE BEGIN Init */
 
  /* USER CODE END Init */
 
  /* Configure the system clock */
  SystemClock_Config();
 
  /* USER CODE BEGIN SysInit */
 
  /* USER CODE END SysInit */
 
  /* Initialize all configured peripherals */
  /* USER CODE BEGIN 2 */
 
  /* USER CODE END 2 */
 
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
 
/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
 
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}
 
/* USER CODE BEGIN 4 */
 
/* USER CODE END 4 */
 
/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
      //break;
  }
  /* USER CODE END Error_Handler_Debug */
}
 
#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */
stm32f1xx_it.c:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file    stm32f1xx_it.c
  * @brief   Interrupt Service Routines.
  ******************************************************************************
  * @attention
  *
  * Copyright (c) 2022 STMicroelectronics.
  * All rights reserved.
  *
  * This software is licensed under terms that can be found in the LICENSE file
  * in the root directory of this software component.
  * If no LICENSE file comes with this software, it is provided AS-IS.
  *
  ******************************************************************************
  */
/* USER CODE END Header */
 
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "stm32f1xx_it.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
 
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN TD */
 
/* USER CODE END TD */
 
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
 
/* USER CODE END PD */
 
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
 
/* USER CODE END PM */
 
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
 
/* USER CODE END PV */
 
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */
 
/* USER CODE END PFP */
 
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
 
/* USER CODE END 0 */
 
/* External variables --------------------------------------------------------*/
 
/* USER CODE BEGIN EV */
 
/* USER CODE END EV */
 
/******************************************************************************/
/*           Cortex-M3 Processor Interruption and Exception Handlers          */
/******************************************************************************/
/**
  * @brief This function handles Non maskable interrupt.
  */
void NMI_Handler(void)
{
  /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
 
  /* USER CODE END NonMaskableInt_IRQn 0 */
  /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  while (1)
  {
  }
  /* USER CODE END NonMaskableInt_IRQn 1 */
}
 
/**
  * @brief This function handles Hard fault interrupt.
  */
void HardFault_Handler(void)
{ //<------------------------------------------------------------------------- Валится сюда
  /* USER CODE BEGIN HardFault_IRQn 0 */
 
  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    /* USER CODE END W1_HardFault_IRQn 0 */
  }
}
 
/**
  * @brief This function handles Memory management fault.
  */
void MemManage_Handler(void)
{
  /* USER CODE BEGIN MemoryManagement_IRQn 0 */
 
  /* USER CODE END MemoryManagement_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
    /* USER CODE END W1_MemoryManagement_IRQn 0 */
  }
}
 
/**
  * @brief This function handles Prefetch fault, memory access fault.
  */
void BusFault_Handler(void)
{
  /* USER CODE BEGIN BusFault_IRQn 0 */
 
  /* USER CODE END BusFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_BusFault_IRQn 0 */
    /* USER CODE END W1_BusFault_IRQn 0 */
  }
}
 
/**
  * @brief This function handles Undefined instruction or illegal state.
  */
void UsageFault_Handler(void)
{
  /* USER CODE BEGIN UsageFault_IRQn 0 */
 
  /* USER CODE END UsageFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
    /* USER CODE END W1_UsageFault_IRQn 0 */
  }
}
 
/**
  * @brief This function handles System service call via SWI instruction.
  */
void SVC_Handler(void)
{
  /* USER CODE BEGIN SVCall_IRQn 0 */
 
  /* USER CODE END SVCall_IRQn 0 */
  /* USER CODE BEGIN SVCall_IRQn 1 */
 
  /* USER CODE END SVCall_IRQn 1 */
}
 
/**
  * @brief This function handles Debug monitor.
  */
void DebugMon_Handler(void)
{
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */
 
  /* USER CODE END DebugMonitor_IRQn 0 */
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */
 
  /* USER CODE END DebugMonitor_IRQn 1 */
}
 
/**
  * @brief This function handles Pendable request for system service.
  */
void PendSV_Handler(void)
{
  /* USER CODE BEGIN PendSV_IRQn 0 */
 
  /* USER CODE END PendSV_IRQn 0 */
  /* USER CODE BEGIN PendSV_IRQn 1 */
 
  /* USER CODE END PendSV_IRQn 1 */
}
 
/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
 
  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
 
  /* USER CODE END SysTick_IRQn 1 */
}
 
/******************************************************************************/
/* STM32F1xx Peripheral Interrupt Handlers                                    */
/* Add here the Interrupt Handlers for the used peripherals.                  */
/* For the available peripheral interrupt handler names,                      */
/* please refer to the startup file (startup_stm32f1xx.s).                    */
/******************************************************************************/
 
/* USER CODE BEGIN 1 */
 
/* USER CODE END 1 */
Подскажите пожалуйста, в какую сторону мне копать, что делать или какую ещё информацию предоставить, чтобы решить проблему.
Миниатюры
HardFault при запуске   HardFault при запуске  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2022, 20:28
Ответы с готовыми решениями:

[Решено] HardFault при попытке настроить прерывание таймера
Здравствуйте. Недавно начал изучать ARM в общем и STM32 в частности, вылезла проблема при попытке...

STM32F103C8 FATFS SPI EEPROM. Hardfault при вызове f_close
Доброго времени суток. Пытаюсь развернуть FATFS на мегабитной SPI EEPROM. Столкнулся с проблемой...

Что надо сделать, чтобы при запуске программы и при первом запуске SaveDialog открывался заданный по умолчанию каталог?
Здравствуйте ВСЕ ! Проблема следующая. 1) При первом запуске SaveDialog открывается каталог с...

При запуске из среды программа работает, при запуске выполняемого файла выдает ошибку
Добавлено через 1 минуту 35 секунд как исправить ошибки в названии темы? там должно было быть...

Файл при запуске по двойному щелчку мыши не работает как при запуске в терминале
Есть текстовый файл Goodgame.sh с таким кодом: xclip -o &gt; clipboard.txt...

17
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 207
14.01.2022, 20:56  [ТС] 2
С помощью бряков нашёл место где валится.

startup_stm32f103c8tx.s:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
/**
  *************** (C) COPYRIGHT 2017 STMicroelectronics ************************
  * @file      startup_stm32f103xb.s
  * @author    MCD Application Team
  * @brief     STM32F103xB Devices vector table for Atollic toolchain.
  *            This module performs:
  *                - Set the initial SP
  *                - Set the initial PC == Reset_Handler,
  *                - Set the vector table entries with the exceptions ISR address
  *                - Configure the clock system   
  *                - Branches to main in the C library (which eventually
  *                  calls main()).
  *            After Reset the Cortex-M3 processor is in Thread mode,
  *            priority is Privileged, and the Stack is set to Main.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
 
  .syntax unified
  .cpu cortex-m3
  .fpu softvfp
  .thumb
 
.global g_pfnVectors
.global Default_Handler
 
/* start address for the initialization values of the .data section.
defined in linker script */
.word _sidata
/* start address for the .data section. defined in linker script */
.word _sdata
/* end address for the .data section. defined in linker script */
.word _edata
/* start address for the .bss section. defined in linker script */
.word _sbss
/* end address for the .bss section. defined in linker script */
.word _ebss
 
.equ  BootRAM, 0xF108F85F
/**
 * @brief  This is the code that gets called when the processor first
 *          starts execution following a reset event. Only the absolutely
 *          necessary set is performed, after which the application
 *          supplied main() routine is called.
 * @param  None
 * @retval : None
*/
 
  .section .text.Reset_Handler
  .weak Reset_Handler
  .type Reset_Handler, %function
Reset_Handler:
 
/* Copy the data segment initializers from flash to SRAM */
  ldr r0, =_sdata
  ldr r1, =_edata
  ldr r2, =_sidata
  movs r3, #0
  b LoopCopyDataInit
 
CopyDataInit:
  ldr r4, [r2, r3]
  str r4, [r0, r3]
  adds r3, r3, #4
 
LoopCopyDataInit:
  adds r4, r0, r3
  cmp r4, r1
  bcc CopyDataInit
  
/* Zero fill the bss segment. */
  ldr r2, =_sbss
  ldr r4, =_ebss
  movs r3, #0
  b LoopFillZerobss
 
FillZerobss:
  str  r3, [r2]
  adds r2, r2, #4
 
LoopFillZerobss:
  cmp r2, r4
  bcc FillZerobss
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* Call the clock system intitialization function.*/
    bl  SystemInit  /*<---------------------------------------------------------------------------------- здесь
 
 
 
 
 
 
 
 
 
 
 
 
 
/* Call static constructors */
    bl __libc_init_array
/* Call the application's entry point.*/
  bl main
  bx lr
.size Reset_Handler, .-Reset_Handler
 
/**
 * @brief  This is the code that gets called when the processor receives an
 *         unexpected interrupt.  This simply enters an infinite loop, preserving
 *         the system state for examination by a debugger.
 *
 * @param  None
 * @retval : None
*/
    .section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
  b Infinite_Loop
  .size Default_Handler, .-Default_Handler
/******************************************************************************
*
* The minimal vector table for a Cortex M3.  Note that the proper constructs
* must be placed on this to ensure that it ends up at physical address
* 0x0000.0000.
*
******************************************************************************/
  .section .isr_vector,"a",%progbits
  .type g_pfnVectors, %object
  .size g_pfnVectors, .-g_pfnVectors
 
 
g_pfnVectors:
 
  .word _estack
  .word Reset_Handler
  .word NMI_Handler
  .word HardFault_Handler
  .word MemManage_Handler
  .word BusFault_Handler
  .word UsageFault_Handler
  .word 0
  .word 0
  .word 0
  .word 0
  .word SVC_Handler
  .word DebugMon_Handler
  .word 0
  .word PendSV_Handler
  .word SysTick_Handler
  .word WWDG_IRQHandler
  .word PVD_IRQHandler
  .word TAMPER_IRQHandler
  .word RTC_IRQHandler
  .word FLASH_IRQHandler
  .word RCC_IRQHandler
  .word EXTI0_IRQHandler
  .word EXTI1_IRQHandler
  .word EXTI2_IRQHandler
  .word EXTI3_IRQHandler
  .word EXTI4_IRQHandler
  .word DMA1_Channel1_IRQHandler
  .word DMA1_Channel2_IRQHandler
  .word DMA1_Channel3_IRQHandler
  .word DMA1_Channel4_IRQHandler
  .word DMA1_Channel5_IRQHandler
  .word DMA1_Channel6_IRQHandler
  .word DMA1_Channel7_IRQHandler
  .word ADC1_2_IRQHandler
  .word USB_HP_CAN1_TX_IRQHandler
  .word USB_LP_CAN1_RX0_IRQHandler
  .word CAN1_RX1_IRQHandler
  .word CAN1_SCE_IRQHandler
  .word EXTI9_5_IRQHandler
  .word TIM1_BRK_IRQHandler
  .word TIM1_UP_IRQHandler
  .word TIM1_TRG_COM_IRQHandler
  .word TIM1_CC_IRQHandler
  .word TIM2_IRQHandler
  .word TIM3_IRQHandler
  .word TIM4_IRQHandler
  .word I2C1_EV_IRQHandler
  .word I2C1_ER_IRQHandler
  .word I2C2_EV_IRQHandler
  .word I2C2_ER_IRQHandler
  .word SPI1_IRQHandler
  .word SPI2_IRQHandler
  .word USART1_IRQHandler
  .word USART2_IRQHandler
  .word USART3_IRQHandler
  .word EXTI15_10_IRQHandler
  .word RTC_Alarm_IRQHandler
  .word USBWakeUp_IRQHandler
  .word 0
  .word 0
  .word 0
  .word 0
  .word 0
  .word 0
  .word 0
  .word BootRAM          /* @0x108. This is for boot in RAM mode for
                            STM32F10x Medium Density devices. */
 
/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*
*******************************************************************************/
 
  .weak NMI_Handler
  .thumb_set NMI_Handler,Default_Handler
 
  .weak HardFault_Handler
  .thumb_set HardFault_Handler,Default_Handler
 
  .weak MemManage_Handler
  .thumb_set MemManage_Handler,Default_Handler
 
  .weak BusFault_Handler
  .thumb_set BusFault_Handler,Default_Handler
 
  .weak UsageFault_Handler
  .thumb_set UsageFault_Handler,Default_Handler
 
  .weak SVC_Handler
  .thumb_set SVC_Handler,Default_Handler
 
  .weak DebugMon_Handler
  .thumb_set DebugMon_Handler,Default_Handler
 
  .weak PendSV_Handler
  .thumb_set PendSV_Handler,Default_Handler
 
  .weak SysTick_Handler
  .thumb_set SysTick_Handler,Default_Handler
 
  .weak WWDG_IRQHandler
  .thumb_set WWDG_IRQHandler,Default_Handler
 
  .weak PVD_IRQHandler
  .thumb_set PVD_IRQHandler,Default_Handler
 
  .weak TAMPER_IRQHandler
  .thumb_set TAMPER_IRQHandler,Default_Handler
 
  .weak RTC_IRQHandler
  .thumb_set RTC_IRQHandler,Default_Handler
 
  .weak FLASH_IRQHandler
  .thumb_set FLASH_IRQHandler,Default_Handler
 
  .weak RCC_IRQHandler
  .thumb_set RCC_IRQHandler,Default_Handler
 
  .weak EXTI0_IRQHandler
  .thumb_set EXTI0_IRQHandler,Default_Handler
 
  .weak EXTI1_IRQHandler
  .thumb_set EXTI1_IRQHandler,Default_Handler
 
  .weak EXTI2_IRQHandler
  .thumb_set EXTI2_IRQHandler,Default_Handler
 
  .weak EXTI3_IRQHandler
  .thumb_set EXTI3_IRQHandler,Default_Handler
 
  .weak EXTI4_IRQHandler
  .thumb_set EXTI4_IRQHandler,Default_Handler
 
  .weak DMA1_Channel1_IRQHandler
  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler
 
  .weak DMA1_Channel2_IRQHandler
  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler
 
  .weak DMA1_Channel3_IRQHandler
  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler
 
  .weak DMA1_Channel4_IRQHandler
  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler
 
  .weak DMA1_Channel5_IRQHandler
  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler
 
  .weak DMA1_Channel6_IRQHandler
  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler
 
  .weak DMA1_Channel7_IRQHandler
  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler
 
  .weak ADC1_2_IRQHandler
  .thumb_set ADC1_2_IRQHandler,Default_Handler
 
  .weak USB_HP_CAN1_TX_IRQHandler
  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler
 
  .weak USB_LP_CAN1_RX0_IRQHandler
  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler
 
  .weak CAN1_RX1_IRQHandler
  .thumb_set CAN1_RX1_IRQHandler,Default_Handler
 
  .weak CAN1_SCE_IRQHandler
  .thumb_set CAN1_SCE_IRQHandler,Default_Handler
 
  .weak EXTI9_5_IRQHandler
  .thumb_set EXTI9_5_IRQHandler,Default_Handler
 
  .weak TIM1_BRK_IRQHandler
  .thumb_set TIM1_BRK_IRQHandler,Default_Handler
 
  .weak TIM1_UP_IRQHandler
  .thumb_set TIM1_UP_IRQHandler,Default_Handler
 
  .weak TIM1_TRG_COM_IRQHandler
  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler
 
  .weak TIM1_CC_IRQHandler
  .thumb_set TIM1_CC_IRQHandler,Default_Handler
 
  .weak TIM2_IRQHandler
  .thumb_set TIM2_IRQHandler,Default_Handler
 
  .weak TIM3_IRQHandler
  .thumb_set TIM3_IRQHandler,Default_Handler
 
  .weak TIM4_IRQHandler
  .thumb_set TIM4_IRQHandler,Default_Handler
 
  .weak I2C1_EV_IRQHandler
  .thumb_set I2C1_EV_IRQHandler,Default_Handler
 
  .weak I2C1_ER_IRQHandler
  .thumb_set I2C1_ER_IRQHandler,Default_Handler
 
  .weak I2C2_EV_IRQHandler
  .thumb_set I2C2_EV_IRQHandler,Default_Handler
 
  .weak I2C2_ER_IRQHandler
  .thumb_set I2C2_ER_IRQHandler,Default_Handler
 
  .weak SPI1_IRQHandler
  .thumb_set SPI1_IRQHandler,Default_Handler
 
  .weak SPI2_IRQHandler
  .thumb_set SPI2_IRQHandler,Default_Handler
 
  .weak USART1_IRQHandler
  .thumb_set USART1_IRQHandler,Default_Handler
 
  .weak USART2_IRQHandler
  .thumb_set USART2_IRQHandler,Default_Handler
 
  .weak USART3_IRQHandler
  .thumb_set USART3_IRQHandler,Default_Handler
 
  .weak EXTI15_10_IRQHandler
  .thumb_set EXTI15_10_IRQHandler,Default_Handler
 
  .weak RTC_Alarm_IRQHandler
  .thumb_set RTC_Alarm_IRQHandler,Default_Handler
 
  .weak USBWakeUp_IRQHandler
  .thumb_set USBWakeUp_IRQHandler,Default_Handler
 
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
на строке
Assembler
1
2
/* Call the clock system intitialization function.*/
    bl  SystemInit
Я правильно понял, что неверно настроил часы?
0
Нарушитель
109 / 199 / 22
Регистрация: 23.11.2021
Сообщений: 927
14.01.2022, 20:58 3
Зачем гадать, что там в черном (да еще и жутко кривом) ящике происходит, если можно открыть даташит, мануал и спокойно написать код?
1
Модератор
Эксперт по электронике
8569 / 6385 / 859
Регистрация: 14.02.2011
Сообщений: 22,213
14.01.2022, 21:10 4
Цитата Сообщение от VBDUnit Посмотреть сообщение
bl  SystemInit
а функция SystemInit реализована где?
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Зачем гадать, что там в черном (да еще и жутко кривом) ящике происходит
где же он кривой?

Добавлено через 1 минуту
Цитата Сообщение от VBDUnit Посмотреть сообщение
IDE - STM32Cube
STM32CubeIDE? или STM32CubeMX?
1
69 / 70 / 2
Регистрация: 20.11.2016
Сообщений: 194
14.01.2022, 21:16 5
VBDUnit,
пишешь что имеется STM320F072B контроллер, а проект создан для другого контроллера stm32f103c8t ???
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 207
14.01.2022, 21:29  [ТС] 6
Цитата Сообщение от Radikal_78 Посмотреть сообщение
пишешь что имеется STM320F072B контроллер, а проект создан для другого контроллера stm32f103c8t ???
Уточню (может я ошибаюсь): плата STM32F072B, на которой стоит контроллер STM32F103C8T6, во вложении фотка.

Цитата Сообщение от ValeryS Посмотреть сообщение
Сообщение от VBDUnit
bl  SystemInit
а функция SystemInit реализована где?
В файле system_stm32f1xx.c:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
/**
  ******************************************************************************
  * @file    system_stm32f1xx.c
  * @author  MCD Application Team
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.
  * 
  * 1.  This file provides two functions and one global variable to be called from 
  *     user application:
  *      - SystemInit(): Setups the system clock (System clock source, PLL Multiplier
  *                      factors, AHB/APBx prescalers and Flash settings). 
  *                      This function is called at startup just after reset and 
  *                      before branch to main program. This call is made inside
  *                      the "startup_stm32f1xx_xx.s" file.
  *
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
  *                                  by the user application to setup the SysTick 
  *                                  timer or configure other parameters.
  *                                     
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
  *                                 be called whenever the core clock is changed
  *                                 during program execution.
  *
  * 2. After each device reset the HSI (8 MHz) is used as system clock source.
  *    Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to
  *    configure the system clock before to branch to main program.
  *
  * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on
  *    the product used), refer to "HSE_VALUE". 
  *    When HSE is used as system clock source, directly or through PLL, and you
  *    are using different crystal you have to adapt the HSE value to your own
  *    configuration.
  *        
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics.
  * All rights reserved.</center></h2>
  *
  * This software component is licensed by ST under BSD 3-Clause license,
  * the "License"; You may not use this file except in compliance with the
  * License. You may obtain a copy of the License at:
  *                        opensource.org/licenses/BSD-3-Clause
  *
  ******************************************************************************
  */
 
/** @addtogroup CMSIS
  * @{
  */
 
/** @addtogroup stm32f1xx_system
  * @{
  */  
  
/** @addtogroup STM32F1xx_System_Private_Includes
  * @{
  */
 
#include "stm32f1xx.h"
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_TypesDefinitions
  * @{
  */
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_Defines
  * @{
  */
 
#if !defined  (HSE_VALUE) 
  #define HSE_VALUE               8000000U /*!< Default value of the External oscillator in Hz.
                                                This value can be provided and adapted by the user application. */
#endif /* HSE_VALUE */
 
#if !defined  (HSI_VALUE)
  #define HSI_VALUE               8000000U /*!< Default value of the Internal oscillator in Hz.
                                                This value can be provided and adapted by the user application. */
#endif /* HSI_VALUE */
 
/*!< Uncomment the following line if you need to use external SRAM  */ 
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
/* #define DATA_IN_ExtSRAM */
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */
 
/* Note: Following vector table addresses must be defined in line with linker
         configuration. */
/*!< Uncomment the following line if you need to relocate the vector table
     anywhere in Flash or Sram, else the vector table is kept at the automatic
     remap of boot address selected */
/* #define USER_VECT_TAB_ADDRESS */
 
#if defined(USER_VECT_TAB_ADDRESS)
/*!< Uncomment the following line if you need to relocate your vector Table
     in Sram else user remap will be done in Flash. */
/* #define VECT_TAB_SRAM */
#if defined(VECT_TAB_SRAM)
#define VECT_TAB_BASE_ADDRESS   SRAM_BASE       /*!< Vector Table base address field.
                                                     This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
                                                     This value must be a multiple of 0x200. */
#else
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.
                                                     This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x00000000U     /*!< Vector Table base offset field.
                                                     This value must be a multiple of 0x200. */
#endif /* VECT_TAB_SRAM */
#endif /* USER_VECT_TAB_ADDRESS */
 
/******************************************************************************/
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_Macros
  * @{
  */
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_Variables
  * @{
  */
 
  /* This variable is updated in three ways:
      1) by calling CMSIS function SystemCoreClockUpdate()
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
         Note: If you use this function to configure the system clock; then there
               is no need to call the 2 first functions listed above, since SystemCoreClock
               variable is updated automatically.
  */
uint32_t SystemCoreClock = 16000000;
const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
const uint8_t APBPrescTable[8U] =  {0, 0, 0, 0, 1, 2, 3, 4};
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_FunctionPrototypes
  * @{
  */
 
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
#ifdef DATA_IN_ExtSRAM
  static void SystemInit_ExtMemCtl(void); 
#endif /* DATA_IN_ExtSRAM */
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */
 
/**
  * @}
  */
 
/** @addtogroup STM32F1xx_System_Private_Functions
  * @{
  */
 
/**
  * @brief  Setup the microcontroller system
  *         Initialize the Embedded Flash Interface, the PLL and update the 
  *         SystemCoreClock variable.
  * @note   This function should be used only after reset.
  * @param  None
  * @retval None
  */
 
 
 
 
 
 
 
 
 
void SystemInit (void)
{ // Здесь уже бряк не срабатывает
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
  #ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl(); 
  #endif /* DATA_IN_ExtSRAM */
#endif 
 
  /* Configure the Vector Table location -------------------------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#endif /* USER_VECT_TAB_ADDRESS */
}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/**
  * @brief  Update SystemCoreClock variable according to Clock Register Values.
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
  *         be used by the user application to setup the SysTick timer or configure
  *         other parameters.
  *           
  * @note   Each time the core clock (HCLK) changes, this function must be called
  *         to update SystemCoreClock variable value. Otherwise, any configuration
  *         based on this variable will be incorrect.         
  *     
  * @note   - The system frequency computed by this function is not the real 
  *           frequency in the chip. It is calculated based on the predefined 
  *           constant and the selected clock source:
  *             
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
  *                                              
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
  *                          
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) 
  *             or HSI_VALUE(*) multiplied by the PLL factors.
  *         
  *         (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value
  *             8 MHz) but the real value may vary depending on the variations
  *             in voltage and temperature.   
  *    
  *         (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value
  *              8 MHz or 25 MHz, depending on the product used), user has to ensure
  *              that HSE_VALUE is same as the real frequency of the crystal used.
  *              Otherwise, this function may have wrong result.
  *                
  *         - The result of this function could be not correct when using fractional
  *           value for HSE crystal.
  * @param  None
  * @retval None
  */
void SystemCoreClockUpdate (void)
{
  uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U;
 
#if defined(STM32F105xC) || defined(STM32F107xC)
  uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U;
#endif /* STM32F105xC */
 
#if defined(STM32F100xB) || defined(STM32F100xE)
  uint32_t prediv1factor = 0U;
#endif /* STM32F100xB or STM32F100xE */
    
  /* Get SYSCLK source -------------------------------------------------------*/
  tmp = RCC->CFGR & RCC_CFGR_SWS;
  
  switch (tmp)
  {
    case 0x00U:  /* HSI used as system clock */
      SystemCoreClock = HSI_VALUE;
      break;
    case 0x04U:  /* HSE used as system clock */
      SystemCoreClock = HSE_VALUE;
      break;
    case 0x08U:  /* PLL used as system clock */
 
      /* Get PLL clock source and multiplication factor ----------------------*/
      pllmull = RCC->CFGR & RCC_CFGR_PLLMULL;
      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
      
#if !defined(STM32F105xC) && !defined(STM32F107xC)      
      pllmull = ( pllmull >> 18U) + 2U;
      
      if (pllsource == 0x00U)
      {
        /* HSI oscillator clock divided by 2 selected as PLL clock entry */
        SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;
      }
      else
      {
 #if defined(STM32F100xB) || defined(STM32F100xE)
       prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;
       /* HSE oscillator clock selected as PREDIV1 clock entry */
       SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; 
 #else
        /* HSE selected as PLL clock entry */
        if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET)
        {/* HSE oscillator clock divided by 2 */
          SystemCoreClock = (HSE_VALUE >> 1U) * pllmull;
        }
        else
        {
          SystemCoreClock = HSE_VALUE * pllmull;
        }
 #endif
      }
#else
      pllmull = pllmull >> 18U;
      
      if (pllmull != 0x0DU)
      {
         pllmull += 2U;
      }
      else
      { /* PLL multiplication factor = PLL input clock * 6.5 */
        pllmull = 13U / 2U; 
      }
            
      if (pllsource == 0x00U)
      {
        /* HSI oscillator clock divided by 2 selected as PLL clock entry */
        SystemCoreClock = (HSI_VALUE >> 1U) * pllmull;
      }
      else
      {/* PREDIV1 selected as PLL clock entry */
        
        /* Get PREDIV1 clock source and division factor */
        prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC;
        prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U;
        
        if (prediv1source == 0U)
        { 
          /* HSE oscillator clock selected as PREDIV1 clock entry */
          SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull;          
        }
        else
        {/* PLL2 clock selected as PREDIV1 clock entry */
          
          /* Get PREDIV2 division factor and PLL2 multiplication factor */
          prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U;
          pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; 
          SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull;                         
        }
      }
#endif /* STM32F105xC */ 
      break;
 
    default:
      SystemCoreClock = HSI_VALUE;
      break;
  }
  
  /* Compute HCLK clock frequency ----------------*/
  /* Get HCLK prescaler */
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)];
  /* HCLK clock frequency */
  SystemCoreClock >>= tmp;  
}
 
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
/**
  * @brief  Setup the external memory controller. Called in startup_stm32f1xx.s 
  *          before jump to __main
  * @param  None
  * @retval None
  */ 
#ifdef DATA_IN_ExtSRAM
/**
  * @brief  Setup the external memory controller. 
  *         Called in startup_stm32f1xx_xx.s/.c before jump to main.
  *         This function configures the external SRAM mounted on STM3210E-EVAL
  *         board (STM32 High density devices). This SRAM will be used as program
  *         data memory (including heap and stack).
  * @param  None
  * @retval None
  */ 
void SystemInit_ExtMemCtl(void) 
{
  __IO uint32_t tmpreg;
  /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is 
    required, then adjust the Register Addresses */
 
  /* Enable FSMC clock */
  RCC->AHBENR = 0x00000114U;
 
  /* Delay after an RCC peripheral clock enabling */
  tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN);
  
  /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */
  RCC->APB2ENR = 0x000001E0U;
  
  /* Delay after an RCC peripheral clock enabling */
  tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN);
 
  (void)(tmpreg);
  
/* ---------------  SRAM Data lines, NOE and NWE configuration ---------------*/
/*----------------  SRAM Address lines configuration -------------------------*/
/*----------------  NOE and NWE configuration --------------------------------*/  
/*----------------  NE3 configuration ----------------------------------------*/
/*----------------  NBL0, NBL1 configuration ---------------------------------*/
  
  GPIOD->CRL = 0x44BB44BBU;  
  GPIOD->CRH = 0xBBBBBBBBU;
 
  GPIOE->CRL = 0xB44444BBU;  
  GPIOE->CRH = 0xBBBBBBBBU;
 
  GPIOF->CRL = 0x44BBBBBBU;  
  GPIOF->CRH = 0xBBBB4444U;
 
  GPIOG->CRL = 0x44BBBBBBU;  
  GPIOG->CRH = 0x444B4B44U;
   
/*----------------  FSMC Configuration ---------------------------------------*/  
/*----------------  Enable FSMC Bank1_SRAM Bank ------------------------------*/
  
  FSMC_Bank1->BTCR[4U] = 0x00001091U;
  FSMC_Bank1->BTCR[5U] = 0x00110212U;
}
#endif /* DATA_IN_ExtSRAM */
#endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */
 
/**
  * @}
  */
 
/**
  * @}
  */
  
/**
  * @}
  */    
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
конкретнее она реализована в таком виде:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void SystemInit (void)
{ // Здесь уже бряк не срабатывает
#if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG)
  #ifdef DATA_IN_ExtSRAM
    SystemInit_ExtMemCtl(); 
  #endif /* DATA_IN_ExtSRAM */
#endif 
 
  /* Configure the Vector Table location -------------------------------------*/
#if defined(USER_VECT_TAB_ADDRESS)
  SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#endif /* USER_VECT_TAB_ADDRESS */
}
Я пока плохо понимаю, как оно стыкуется, но по-моему, если бы она не могла найти эту функцию, она наверно должна была выдать ошибку компиляции/линковки (если она тут есть). Но при компиляции проблем нет.

Цитата Сообщение от ValeryS Посмотреть сообщение
STM32CubeIDE? или STM32CubeMX?
STM32CubeIDE
Миниатюры
HardFault при запуске  
0
Модератор
Эксперт по электронике
8569 / 6385 / 859
Регистрация: 14.02.2011
Сообщений: 22,213
14.01.2022, 21:35 7
Цитата Сообщение от VBDUnit Посмотреть сообщение
STM32CubeIDE
заархивируй проект и сбрось сюда, посмотрю завтра
Цитата Сообщение от VBDUnit Посмотреть сообщение
В файле system_stm32f1xx.c:
а в проект файл встроен?

Добавлено через 2 минуты
Цитата Сообщение от VBDUnit Посмотреть сообщение
Я пока плохо понимаю, как оно стыкуется, но по-моему, если бы она не могла найти эту функцию, она наверно должна была выдать ошибку компиляции/линковки (если она тут есть).
нет
обращение идет из ассемблерного файла и там она объявлена (по крайней мере должна) extern
1
69 / 70 / 2
Регистрация: 20.11.2016
Сообщений: 194
14.01.2022, 21:40 8
VBDUnit, вывихнул глаза, но вроде первый маленький контроллер это STM32F103C8T6, он просто выполняет роль программатора, а на втором контроллере надпись STM32F072.

Так что я считаю что проект создан ошибочно и надо заново создать проект для контроллера STM32F072
3
Модератор
Эксперт по электронике
8569 / 6385 / 859
Регистрация: 14.02.2011
Сообщений: 22,213
14.01.2022, 21:47 9
Цитата Сообщение от Radikal_78 Посмотреть сообщение
вывихнул глаза,
я тоже поверил на слово я у себя в первых дискавери менял 100 на 103, думал здесь что то похожее
посему вопрос VBDUnit, какие stm у тебя стоят? и лучше напиши текстом а не фоткой
1
Эксперт .NET
7797 / 5261 / 1252
Регистрация: 25.05.2015
Сообщений: 16,039
Записей в блоге: 14
14.01.2022, 21:51 10
Цитата Сообщение от Radikal_78 Посмотреть сообщение
вывихнул глаза, но вроде первый маленький контроллер это STM32F103C8T6, он просто выполняет роль программатора, а на втором контроллере надпись STM32F072
Верно.
Не надо лаза вывихивать, схема выложена на сайте https://www.st.com/en/evaluati... -resources в разделе CAD Resources.
1
Модератор
Эксперт по электронике
8569 / 6385 / 859
Регистрация: 14.02.2011
Сообщений: 22,213
14.01.2022, 21:56 11
Цитата Сообщение от Rius Посмотреть сообщение
Не надо лаза вывихивать, схема выложена на сайте
а может ТС камень поменял?
1
Эксперт .NET
7797 / 5261 / 1252
Регистрация: 25.05.2015
Сообщений: 16,039
Записей в блоге: 14
14.01.2022, 22:02 12
ValeryS,
STM32F103C8T6 - это чип, реализующий STLink на этой плате.
Человек, способный перепаять LQFP и занимающийся программированием, хочется верить, не завис бы на банальном HardFault.
Тем более пайка чистая, судя по фото, а это либо заводская, либо профи делал.
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 207
14.01.2022, 22:37  [ТС] 13
Смог подобрать угол чтобы видно было надписи.

Над кварцевым резонатором стоит STM32 F103C8T6 GQ29T 1293 CHN GQ 109 (это, как я понял, программатор)
Внизу ARM STM32F072Y RBT6 AA164 TWN AA 051 (это сам чип)
Над ним GD8I 2036 RV6DE (?)


Цитата Сообщение от Radikal_78 Посмотреть сообщение
VBDUnit, вывихнул глаза, но вроде первый маленький контроллер это STM32F103C8T6, он просто выполняет роль программатора, а на втором контроллере надпись STM32F072.
Так что я считаю что проект создан ошибочно и надо заново создать проект для контроллера STM32F072
Цитата Сообщение от Rius Посмотреть сообщение
Верно.
Не надо лаза вывихивать, схема выложена на сайте https://www.st.com/en/evaluati... -resources в разделе CAD Resources.
Да, вы правы, я тупанул и выбрал не тот контроллер. Пересоздал проект, выбрал плату и всё завелось. При создании того проекта выбрал на вкладке "MCU/MPU Selector" тот самый STM32F103C8T, вместо того, чтобы перейти на вкладку Board Selector и там выбрать свою плату.

Цитата Сообщение от ValeryS Посмотреть сообщение
Цитата Сообщение от Rius Посмотреть сообщение
Не надо лаза вывихивать, схема выложена на сайте
а может ТС камень поменял?
До такого мне ещё далековато, я рукожоп в этом плане Плата заводская, куплена в известном магазине (чтобы без рекламы).


Большое спасибо всем за помощь!


У меня остался ещё вопрос - как оптимальнее сделать передачу потока данных в 2,5 Мбит/с с компа (Windows) на этот контроллер с минимальной задержкой? UART для такого не подойдет. У меня пока в мыслях только либо USB (как? с нуля писать драйвер под винду, или есть проще вариант?), либо Ethernet модуль какой-нибудь подобрать и по UDP туда пихать. Ещё вариант пихать сначала в малину (она есть), и с неё уже через пины перекидывать в STM32, но тут я опасаюсь задержки. Или этого STM32 мало и нужен посуровее? Если посуровее, то какой?
Миниатюры
HardFault при запуске   HardFault при запуске   HardFault при запуске  

HardFault при запуске  
0
Эксперт .NET
7797 / 5261 / 1252
Регистрация: 25.05.2015
Сообщений: 16,039
Записей в блоге: 14
14.01.2022, 22:41 14
Цитата Сообщение от VBDUnit Посмотреть сообщение
как оптимальнее сделать передачу потока данных в 2,5 Мбит/с с компа (Windows) на этот контроллер с минимальной задержкой?
Насчёт задержки не скажу, а про скорость пишут, что на USB CDC достижим 1 Мбайт в секунду.
1
69 / 70 / 2
Регистрация: 20.11.2016
Сообщений: 194
14.01.2022, 22:44 15
VBDUnit,
У меня остался ещё вопрос - как оптимальнее сделать передачу потока данных в 2,5 Мбит/с с компа (Windows) на этот контроллер с минимальной задержкой? UART для такого не подойдет. У меня пока в мыслях только либо USB (как? с нуля писать драйвер под винду, или есть проще вариант?), либо Ethernet модуль какой-нибудь подобрать и по UDP туда пихать. Ещё вариант пихать сначала в малину (она есть), и с неё уже через пины перекидывать в STM32, но тут я опасаюсь задержки. Или этого STM32 мало и нужен посуровее? Если посуровее, то какой?
серьезный вопрос. Если предыдущий вопрос решен, то по правилам форума для нового вопроса нужно создавать новую тему
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 207
14.01.2022, 23:00  [ТС] 16
Добавлено через 34 секунды
Цитата Сообщение от Radikal_78 Посмотреть сообщение
серьезный вопрос. Если предыдущий вопрос решен, то по правилам форума для нового вопроса нужно создавать новую тем
Ок.
0
Модератор
Эксперт по электронике
8569 / 6385 / 859
Регистрация: 14.02.2011
Сообщений: 22,213
14.01.2022, 23:05 17
Цитата Сообщение от VBDUnit Посмотреть сообщение
Ещё вопрос: могу ли я на этом контроллере переключать состояния GPIO за 400 нс?
я тебе уже отвечал в другой теме, GPIO здесь не главное, главное расчет цвета, если конечно не хочешь одну картинку иметь всегда
и кстати
Цитата Сообщение от Radikal_78 Посмотреть сообщение
то по правилам форума для нового вопроса нужно создавать новую тему
вот и правило 5.16
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
сам же потом заплюхаешся с ответами
1
Нарушитель
109 / 199 / 22
Регистрация: 23.11.2021
Сообщений: 927
14.01.2022, 23:31 18
Цитата Сообщение от ValeryS Посмотреть сообщение
где же он кривой?
Был бы нормальный, народ бы на форумах не выл, что у них постоянно проблемы какие-то выскакивают.
Единственно верный способ нормально писать под микроконтроллеры - написать свой набор сниппетов или же библиотеку. Но не такой ужас, как SPL, кал или opencm3! Даже ослу понятно, что функции должны быть как минимум true inline, еще лучше - макросы, а идеал - шаблоны на С++, чтобы все вычисления и проверки выполнялись на стадии компиляции, а не во время выполнения кода!
А про кривой USB от ST уже неоднократно писали. И даже один товарищ провел сравнение реализаций USB от ST, моей и COKPOWEHEU. ST'шная провалила все тесты!

Добавлено через 2 минуты
ТС, вот тебе USB под STM32F0x2. Честные 12Мбит можно выжать. Там же есть у меня и HID, и CDC (но я предпочитаю эмуляцию PL2303, чтобы оно стопроцентно везде работало).
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2022, 23:31

Размер компонентов GUI при запуске jar больше чем при запуске в IDE
Вообщем есть такая вот проблема: Еще с давних пор когда начинал изучать Swing заметил, что при...

Стал сильно нагреваться блок питания но только при первом запуске и вырубает комп , при втором запуске работает норм
поставил новую видюху Geforce GTX 560 ti и стал сильно нагреваться блок питания но только при...

Программа ведет себя по разному при запуске из VisualStudio и при запуске из Release
Привет всем! Ни когда до этого с таким не сталкивался и даже не знаю как правильно...

При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome расширения
Здравствуйте, При запуске ОС устанавливаются сторонние программы,а при запуске браузера Chrome...

Монитор гаснет при запуске холодильника или при запуске вентилятора или при включении лампы
Здравствуйте! Уже четвертый месяц возникла проблема после того как монитор подключил через...

ошибка 0xc0000020 при запуске установки и запуске некоторых приложений
Пару дней назад внезапно стали вылетать ошибки при запуске некоторых приложений. Пробовал обновить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru